Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]problem z walidacją adresu email
Forum PHP.pl > Forum > Przedszkole
imysz
Witam. Tworzę formularz rejestracji i mam problem z sprawdzeniem poprawności adresu email. by był on w formacie np. nazwa@gmail.com.
stosuję taki fragment do tego:

  1. function valid_email($email)
  2. {
  3. if (preg_match("/^([a-z0-9+_-]+)(.[a-z0-9+_-]+)
  4. *@([a-z0-9-]+.)+[a-z]{2,6}$/ix", $email))
  5. return true;
  6. else
  7. return false;
  8. }
  9.  
  10. if (!valid_email($email))
  11. echo "poprawny";
  12. else echo "Nie poprawy adres e-mail";


ale mimo wpisania niepoprawnego adresu(np. nazwa) rekord dodaje się do bazy

oto cały kod kod, poprawnie jest napisany?:

  1. <?php
  2.  
  3.  
  4. $login = $_POST['login'];
  5. $haslo = $_POST['haslo'];
  6. $haslo2 = $_POST['haslo2'];
  7. $email = $_POST['email'];
  8.  
  9.  
  10.  
  11.  
  12. $login = trim($login);
  13. $haslo = trim($haslo);
  14. $haslo2 = trim($haslo2);
  15. $email = trim($email);
  16.  
  17. // sprawdzenie poprawnosci loginu
  18.  
  19. if(!$login || !$haslo || !$haslo2 || !$email)
  20. {
  21. if(empty($login))
  22. {
  23. echo 'Pole login nie zostało wypełnione<br/>';
  24. }
  25.  
  26. $db= mysql_connect('localhost', 'db994313', 'pizgafurtke');
  27. mysql_query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");
  28. mysql_select_db('db994313');
  29.  
  30. $zapytanie = "select * from uzytkownicy where login='$login'";
  31. $wynik_login = mysql_query($zapytanie);
  32. $wynik_login_rezultat = mysql_num_rows($wynik_login);
  33. if($wynik_login_rezultat > 0)
  34. {
  35. echo 'Login jest już używany<br/>';
  36. }
  37.  
  38. if(strlen($login)<5)
  39. {
  40. echo 'Login powinien zawierać przynajmniej 5 znaków<br/>';
  41. }
  42.  
  43. if(strlen($login) > 16)
  44. {
  45. echo 'Login powinien zawierać maksynmalnie 16 znaków';
  46. }
  47.  
  48. // sprawdzenie hasla
  49. if(empty($haslo))
  50. {
  51. echo 'Pole haslo nie zostalo wypelnione<br/>';
  52. }
  53. if(empty($haslo2))
  54. {
  55. echo 'Pole z potwierdzeniem hasła nie zostało wypełnione<br/>';
  56. }
  57. if(strlen($haslo) < 4)
  58. {
  59. echo 'Hasło powinno zawierać przynajmniej 5 znaków<br/>';
  60. }
  61. if(strlen($haslo2) <5)
  62. {
  63. echo 'Hasło powinno zawierać przynajmniej 5 znaków<br/>';
  64. }
  65. if($haslo !=$haslo2)
  66. {
  67. echo 'Podane hasła różnią się do siebie<br/>';
  68. }
  69.  
  70. // sprawdzenie adresu email
  71. if(empty($email))
  72. {
  73. echo 'Pole email nie zostało wypełnione';
  74. }
  75.  
  76. $zapytanie_email = "select * from uzytkownicy where email='$email'";
  77. $wynik_email = mysql_query($zapytanie_email);
  78. $wynik_email_rezultat = mysql_num_rows($wynik_email);
  79. if($wynik_email_rezultat > 0)
  80. {
  81. echo 'Podany email jest już zarejestrowany<br/>';
  82. }
  83.  
  84. function valid_email($email)
  85. {
  86. if (preg_match("/^([a-z0-9+_-]+)(.[a-z0-9+_-]+)
  87. *@([a-z0-9-]+.)+[a-z]{2,6}$/ix", $email))
  88. return true;
  89. else
  90. return false;
  91. }
  92.  
  93. if (!valid_email($email))
  94. echo "poprawny";
  95. else echo "Nie poprawy adres e-mail";
  96.  
  97. }
  98. else{
  99. $zapytanie_dodaj = "insert into uzytkownicy values('".$login."', sha1('".$haslo."'), '".$email."')";
  100. $wyslij_zapytanie = mysql_query($zapytanie_dodaj);
  101. if($wyslij_zapytanie){
  102. echo 'Rejestraja ukończona pomyślnie';
  103. }
  104.  
  105.  
  106.  
  107. }
  108. ?>
Blame
Od tego są filtry: filter_var.
MateuszS
No dobra sprawdzasz te warunki extra, ale co z tego skoro skrypt sie dalej wykonuje, po kazdym warunku, np puste pole. Daj exit(); w kazdym warunku po echo zeby skrypt sie przerwal i nie wyk. zapytania
imysz
Blame

dzięki za pomoc, teraz działa.

MateuszScirka
Faktycznie, wtedy skrypt się zawsze wykonywał. Dodałem teraz na końcu każdego warunku exit; , ale mam jedno pytanie. bo przedtem jak np. cały formularz był pusty to po przyciśnięciu buttona zarejestruj to pokazywało np tak:

Pole login nie zostało wypełnione
Login powinien mieć więcej niż 5 znaków
hasła różnią się od siebie
itd. w zależności od tego które pola były źle wypełnione lub puste, tak wyświetlane były odpowiednie komunikaty.

a teraz po dodaniu exit; jeżeli zostawię pusty formularz i dam zarejestruj to pojawia się tylko komunikat o braku wpisania loginu a reszty w ogóle nie wyświetla. Idze jakoś ten skrypt udoskonalić by pokazywało wszystko co jest do poprawki ?

pozdrawiam
MateuszS
tak

Przed calym skryptem daj $i=0; a pod kazdym echo dodaj $i++; i wywal exity, potem przed zapytaniem daj warunek

  1. if($i!=0) exit();


i ma smigac i wyswietlac bledy
imysz
MateuszScirka
Działa tak jak chciałem. Dziękuję.

teraz mam taką sytuację, że formularz jest w pliku register.php i w formularzu jest że ma się wykonać skrypt register_cnf.php w którym właśnie jest cały kod rejestrujący. Gdy coś było źle wypełnione w formularzu lub puste i gdy daję wstecz w przeglądarce by poprawić to formularz jest pusty, da się zrobić tak aby dane które były dobrze wpisane zostały tak jak były, nie kasowały się?

lub czy da się zrobić tak aby formularz i skrypt rejestrujący był w jednym pliku *php ?

pozdrawiam
thek
Wszystko się da smile.gif
Ja z reguły gdy nie korzystam z obiektówki robię pseudo-podział w jednym pliku dla formularzy na zasadzie.
  1. <?php
  2. $pola = array (
  3. 'pole' => 'default'
  4. );
  5. $field_errors = array();
  6. if( isset( $_POST ) AND !empty( $_POST ) ) {
  7. if( array_key_exists('save', $_POST) ) {
  8. //w zależności jaki typ pola dodaję czasem if( array_key_exists( 'pole', $_POST ) )
  9. //ale zawsze na bank jest to co poniżej, no chyba, że oczekuję 0, to wtedy inaczej ;)
  10. if( !empty( 'pole' ) ) {
  11. //tutaj jakaś dodatkowa walidacja itp
  12. $field['pole'] = $_POST['pole'] //ale $_POST['pole'] już po obróbce jest tu!
  13. } else {
  14. $field_errors['pole'] = 'Komunikat błędu';
  15. }
  16. }
  17. if( count( $field_errors ) == 0 ) {
  18. //tutaj zapis do bazy, ewentualne przekierowania itp bo znaczy, że wszystko OK
  19. } else {
  20. //wywalam na ekran, że są błedy formularza i jest on do poprawki
  21. }
  22. }
  23. ?>
  24. <html>
  25. <head>
  26. //sekcja head
  27. </head>
  28. <body>
  29. <form method="post" action="">
  30. <input name="pole" value="<?php echo $field['pole'] ?>" />
  31. <input type="submit" name="save" value="zapisz" />
  32. <?php
  33. if( $field_errors['pole'] )
  34. //wywalam komunikat pod polem go tyczącym :)
  35. ?>
  36. </form>
  37. </body>
  38. </html>
To tak w telegraficznym skrócie! Resztę przemyśl...
EDIT: Formularz tego typu to fajny sposób jeśli chcesz sobie zrobić wstęp do obiektówki. Bo można to co podałem jeszcze nieco przerobić i sobie piszesz własną klasę do tworzenia i walidacji formularzy.
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.