Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Walidacja e-mail
Forum PHP.pl > Forum > Przedszkole
ZacnyUser
  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ś?
kontur
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
Crozin
@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.
Niktoś
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.
ZacnyUser
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ć?
Crozin
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.
ZacnyUser
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.
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.