Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Walidacja e-mail
-ZacnyUser-
post
Post #1





Goście







  1. if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
  2. $blad++;
  3. echo '<p> Proszę wprowadzić poprawnie adres email.</p>';
  4. } else {
  5. $wynik = mysql_query("SELECT * FROM $tabela WHERE email='$email'");
  6. if (mysql_num_rows($wynik) <> 0) {
  7. $blad++;
  8. echo '<p> Podany adres e-mail jest już w naszej bazie. Jeżeli nie pamiętasz hasła skorzystaj z funkcji resetowania hasła.</p>';
  9. }
  10. }


Mam taki skrypt walidacji mejla. Na początku było eregi, ale z oczywistych powodów je zmieniłem. Problem polega na tym, że ten 'filtr' przepuszcza wszystkie dane z formularza. Do tego filtra trzeba dodać jeszcze jakieś parametry?

Kolejna rzecz tyczy się filtra stringa nick. Użyłem tam takiego filtra:

  1. if (strlen($login) < 6 or strlen($login) > 30 or !filter_var($login, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH)) {
  2. $blad++;
  3. echo '<p>Proszę wprowadzić poprawny login (od 6 do 30 znaków, małe i duże znaki, bez znaków diakrytycznych i specjalnych).</p>';


Pomoże mi ktoś?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
kontur
post
Post #2





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 3.04.2012

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


a nie lepiej na preg_match to zrobic?
  1. //mail:
  2. $wyr_reg='/[a-zA-Z0-9_.]+@[a-zA-Z0-9-]+.([a-z]){2,3}/';
  3. if(preg_match($wyr_reg, $twoja_zmienna_zawierajaca_mail))
  4. {
  5. //wpisano poprawnie
  6. }
  7. else
  8. {
  9. //wpisano niepoprawnie
  10. }

login podobnir tyle ze:
$wyr_reg='/([a-zA-Z0-9]){6,30}/' //dowolny ciag od 6 do 30 znakow alfanumerycznych
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@ZacnyUser: W tej chwili w przypadku podania poprawnego maila wywali błąd - odwróć warunek, tak by blok IF wykonał się gdy funkcja filter_var zwróci false.
@kontur: Użyte wyrażeń regularnych tutaj jest kompletnie nietrafione.
Go to the top of the page
+Quote Post
Niktoś
post
Post #4





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


A czego nie trafione?Wyrażenia regularne są sprawdzone i skuteczne.Akurat kontura wyrażenie nie jest najwyższych lotów.
Propo strlen ,bo czytałem w którymś tam poście ,że są problemy z określeniem długości znaków przy polskich znakach.
Go to the top of the page
+Quote Post
-ZacnyUser-
post
Post #5





Goście







Cytat(Niktoś @ 23.04.2012, 13:00:32 ) *
że są problemy z określeniem długości znaków przy polskich znakach.

To można zauważyć w jednym z popularnych skryptów forum, albo na forum Fotka.pl. Minimalna ilość znaków w poście wynosi 10, ale jak się używa polskich znaków, to wystarczy 5. Pewnie chodzi o sposób kodowania polskich znaków.

Cytat(Crozin)
W tej chwili w przypadku podania poprawnego maila wywali błąd - odwróć warunek, tak by blok IF wykonał się gdy funkcja filter_var zwróci false.

Domyśliłem się, ale dzięki.

Generalnie wszystko już działa, dzięki za pomoc. Trochę niewygodne jest to Wasze forum.
Aha, czemu nie da się zarejestrować?
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
Wyrażenia regularne są sprawdzone i skuteczne.
Pewnie dlatego, że do sprawdzenia poprawności podanego adresu email trzeba by użyć takiego wyrażenia?
Kod
/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD
A i ono o ile dobrze kojarzę nie jest idealne.

W zdecydowanej większości przypadków bezpośrednie użycie wyrażenia regularnego to wprowadzenie dodatkowego problemu do rozwiązania - przy tak błahej rzeczy jak sprawdzanie poprawności maila w momencie gdy PHP oferuje wbudowaną funkcję do robienia tego to głupota.
Go to the top of the page
+Quote Post
-ZacnyUser-
post
Post #7





Goście







Cytat(Crozin @ 24.04.2012, 00:23:03 ) *
PHP oferuje wbudowaną funkcję do robienia tego to głupota.

Tylko że mi nie działa ta wbudowana metoda walidacji mejla. Albo źle jej używałem.
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: 18.09.2025 - 15:54