Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Sprawdzanie poprawności wprowadzonych danych.
Forum PHP.pl > Forum > Przedszkole
assasin
Witam, w skrypcie rejestracji mam taki kawałek kodu:
  1. }
  2. if (!preg_match($email_chars, $email)) {
  3. error_s("Email ma zły format..");
  4. $isValid = false;


Dlaczego gdy przy rejestracji wpisuje adres w takiej formie: test@test-strona.pl to wyświetla mi błąd ,, Email ma zły format" ?
pedro84
Nie przechodzi przez preg_match. Wklej większy kawałek kodu, w szczególności ze zmienną $email_chars.
assasin
  1. function error_s($text) {
  2. echo("<p style=\"color:yellow;font-family:verdana;\">".$text);
  3. echo("<br /><br /><a style=\"color:orange;\" href=\"".$_SERVER["SCRIPT_NAME"]."\">Wróć...</a></p>");
  4. }
  5.  
  6. $page = '
  7. <form method="post" action="' . $_SERVER["SCRIPT_NAME"] . '">
  8. <p style="text-align:center;">
  9. <strong>' . $title2 . ' - ' . $title . '</strong>
  10. <br /><br /><br />
  11. Login:
  12. <br /><input name="username" type="text" maxlength="14" /><br />
  13. Hasło:
  14. <br /><input name="password" type="password" maxlength="12" /><br />
  15. Email:
  16. <br /><input name="email" type="text" maxlength="50" />
  17. <br /><input name="tbc" type="checkbox" checked="checked" /> TBC<br /><br /><br />
  18. <button type="submit">Rejestruj</button>
  19. </p>
  20. </form>
  21. ';
  22.  
  23. $user_chars = "#[^a-zA-Z0-9_\-]#";
  24. $email_chars = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";
  25.  
  26. $con = @mysql_connect($ip, $user, $pass);
  27. if (!$con) {
  28. error_s("Nie można połączyć się z bazą: ".mysql_error());
  29. }
  30.  
  31. if (! empty($_POST)) {
  32. // dodajemy zmienną, która mówi, czy formularz został prawidłowo wypełniony
  33. // na początku przyjmujemy, że tak
  34. $isValid = true;
  35. if (( empty($_POST["username"])) || ( empty($_POST["password"])) || ( empty($_POST["email"])) || ( empty($_POST["tbc"]))) {
  36. error_s("You did not enter all the required information.");
  37. // jeśli jednak któreś pole jest puste, to formularz nie został prawidłowo wypełniony
  38. $isValid = false;
  39. } else {
  40. $username = strtoupper($_POST["username"]);
  41. $password = strtoupper($_POST["password"]);
  42. $email = strtoupper($_POST["email"]);
  43. $blocked = "1";
  44. $active = "0";
  45. $t = md5(uniqid(time())); //generujemy 32-bitowy token
  46. if (strlen($username) < 5) {
  47. error_s("Login jest za krótki.");
  48. // formularz nie został dobrze wypełniony również wtedy, gdy nazwa użytkownika jest zbyt krótka
  49. $isValid = false;
  50. } elseif (strlen($username) > 14) {
  51. error_s("Login jest za długi.");
  52.  
  53. // lub zbyt długa
  54. $isValid = false;
  55.  
  56. }
  57.  
  58. if (strlen($password) < 5) {
  59. error_s("Hasło jest za krótkie.");
  60. $isValid = false;
  61.  
  62. } elseif (strlen($password) > 14) {
  63. error_s("Hasło jest za długie.");
  64. $isValid = false;
  65.  
  66. }
  67. if (strlen($email) < 5) {
  68. error_s("Email jest za krótki.");
  69. $isValid = false;
  70.  
  71. } elseif (strlen($email) > 50) {
  72. error_s("Email jest za długi.");
  73. $isValid = false;
  74. }
  75.  
  76. if (preg_match($user_chars, $username)) {
  77. error_s("Nazwa użytkownika zawiera niedozwolone znaki.");
  78. $isValid = false;
  79.  
  80. } elseif (preg_match($user_chars, $password)) {
  81. error_s("Hasło zawiera niedozwolone znaki.");
  82. $isValid = false;
  83.  
  84. }
  85. if (!preg_match($email_chars, $email)) {
  86. error_s("Email ma zły format..");
  87. $isValid = false;
  88.  
  89.  
  90. }
  91. if ($_POST['tbc'] != "on") {
  92. $tbc = "0";
  93. } else {
  94. $tbc = "1";
  95. }
  96. $username = mysql_real_escape_string($username);
  97. $password = mysql_real_escape_string($password);
  98. $email = mysql_real_escape_string($email);
  99. $qry = @mysql_query("select username from ".mysql_real_escape_string($r_db).".account where username = '".$username."'", $con);
  100. if (!$qry) {
  101. error_s("Error querying database: ".mysql_error());
  102. $isValid = false;
  103.  
  104.  
  105. } elseif ($existing_username = mysql_fetch_assoc($qry)) {
  106. foreach ($existing_username as $key=>$value) {
  107. $existing_username = $value;
  108. }
  109. }
  110. $existing_username = strtoupper($existing_username);
  111. if ($existing_username == strtoupper($_POST['username'])) {
  112. error_s("Ta nazwa użytkownika (login) jest już zajęta..");
  113. $isValid = false;
  114. }
  115. unset($qry);
  116. $qry = @mysql_query("select email from ".mysql_real_escape_string($r_db).".account where email = '".$email."'", $con);
  117. }
  118. if (!$qry) {
  119. error_s("Error querying database: ".mysql_error());
  120. $isValid = false;
  121. }
  122. if ($existing_email = mysql_fetch_assoc($qry)) {
  123. foreach ($existing_email as $key=>$value) {
  124. $existing_email = $value;
  125. }
  126.  
  127. }
  128. if ($existing_email == $_POST['email']) {
  129. error_s("Ten adres email jest już zajęty.");
  130. $isValid = false;
  131.  
  132. }
  133. if ($isValid) {
  134. $sha_pass_hash = sha1(strtoupper($username).":".strtoupper($password));
  135. $register_sql = "insert into ".mysql_real_escape_string($r_db).".account (username, sha_pass_hash, email, expansion, locked, token) values (upper('".$username."'),'".$sha_pass_hash."','".$email."','".$tbc."','".$blocked."','".$t."')";
  136. $qry = @mysql_query($register_sql, $con);
  137.  
  138. $nadawca = "From: The Ocolus <gall@compzone.org>rn"; //ustawiamy nadawcę listu
  139. $temat = "Aktywuj swoje konto !"; //ustawiamy temat listu
  140. mail($email, $temat, "Dziekujemy $username za zalozenie konta w naszym serwisie. Zeby aktywowac Twoje nowo utworzone konto kliknij w ponizszy link <a href="http://www.theocolus.pl/activate.php?t=$t&n=$username" target="_blank">http://www.theocolus.pl/activate.php?t=&#0...=$username</a> Wiadomosc ta zostala wyslana do Ciebie przez osobnika, ktory posiadal IP: $REMOTE_ADDR", $nadawca); //wysyłamy list na podany przez użytkownika adres e-mail znajdujący się w zmiennej $email
  141. $wynikmail = "Dziękujemy za założenie konta w naszym serwisie ! Na podany przed chwilą przez Ciebie adres e-mail została wysłana wiadomość, którą należy odebrać i aktywować swoje konto klikając w link aktywacyjny znajdujący się w wiadomości"; //jeżeli się to uda wyświetlamy stosowną informację
  142.  
  143.  
  144. if (!$qry) {
  145. error_s("Error creating account: ".mysql_error());
  146. $isValid = false;
  147. }
  148. echo("Konto zostało utworzone pomyślnie... <br /> <br /> $wynikmail <br /> <a href=\"".$_SERVER["SCRIPT_NAME"]."\">Wróć...</a></p>");
  149. } else {
  150. echo $page;
  151. }
  152.  
  153. } else {
  154. echo($page);
  155. }
  156. ?>
pedro84
Tak jak myślałem, dodaj po prostu do $email_chars myślniki i Ci wtedy takie adres przepuści.
assasin
Cytat
$email_chars = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";


tzn?

$email_chars -= "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";

albo

$email_chars - "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";
haha.gif

albo

$email_chars = "-";

Chyba ci chodzi o to że mam dodać myślnik do zbioru znaków:D ale jak
pedro84
  1. $email_chars = '/^[^0-9][A-z0-9_-]+([.][A-z0-9_-]+)*[@][A-z0-9_-]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/';

Tak. Zarówno w domenie, jak i nazwie użytkownika może myślnik występować, więc musisz go puszczać w obu częściach stringu.

PS. Sprawdzone, działa smile.gif
assasin
A co zrobić gdy nie przepuszcza takich adresów: r.tomiczek@gmail.com z kropką.
pedro84
Zrobić myk, aby przepuszczał smile.gif
  1. $email_chars = '/^[^0-9][A-z0-9_.-]+([.][A-z0-9_-]+)*[@][A-z0-9_-]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/';


PS Staraj się analizować kod, wtedy sam sobie poradzisz smile.gif
thek
I po co koło wymyślać? Zobacz filter_var i opcję walidacji email.
assasin
Może inaczej, co trzeba zrobić żeby przepuszczało wszystkie adresy?
Bo kolejny email z złym formatem to: 89tfet@gmail.com
pedro84
Zobacz filter_var
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.