Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]problem z walidacją adresu email
imysz
post
Post #1





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 16.08.2009

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
Blame
post
Post #2





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


Od tego są filtry: filter_var.
Go to the top of the page
+Quote Post
MateuszS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


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

Ten post edytował MateuszScirka 18.02.2010, 18:36:31
Go to the top of the page
+Quote Post
imysz
post
Post #4





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 16.08.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
MateuszS
post
Post #5





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
imysz
post
Post #6





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 16.08.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
thek
post
Post #7





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Wszystko się da (IMG:style_emoticons/default/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.

Ten post edytował thek 18.02.2010, 22:15:53
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 10:45