Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
[PHP]Ereg wyrażenia regularne, weryfikacja danych z formularza
#1
Poniższy kod przedstawia jak w łatwy i bezpieczny sposób sprawdzić, czy dane z formularza są zgodne z tym czego oczekujemy. Kod ten zabezpiecza odrazu przed atakami typu SQL Injection, bowiem nie przepuści znaków typu /, " itd.

Kod PHP:
// Dane z tablicy POST otrzymane z formularza zapisujemy w troche przyjaźniejszej postaci
$login $_POST["login"];
$password $_POST["password"];
$email $_POST["email"];
$name $_POST["name"];
$country $_POST["country"];

// Zestaw wyrażen regularnych, które sprawdzają zawartość zmiennej.
$login_result ereg('^[A-Za-z0-9]{4,14}$'$login); // Przepuści tylko wtedy, jeśli zmienna zawiera duże lub małe litery lub cyfry i długość jest pomiędzy 4 a 14 znaków.
$password_result ereg('^[A-Za-z0-9]{6,8}$'$password); // tj. wyżej z tym że dł. znaków pomiędzy 6-8
$email_result ereg('^[a-zA-Z0-9_\.+]{1,20}@[a-zA-Z0-9_+]{1,20}\.[a-zA-Z0-9]{2,4}$'$email); // Tutaj jest zapisany format e-maila. Sprawa generalnie nie jest taka prosta, ale ten skrypt sie sprawdza.
$name_result ereg('^[A-Za-z ]{3,25}$'$name); // Nazwa od 3-25, tylko duże lub małe litery i ewentualnie spacja.
$country_result ereg('^[A-Za-z ]{2,25}$'$country); tjwyżej tylko zakres 2-25

if ($login_result  && $password_result && $email_result && $name_result && $country_result)
{
  
//wykonaj akcje, na przykład dodaj wyniki do bazy.
}
else 
{
// System informowania użytkownika o błędach
if (!$login_result)
{
   echo (
"Wprowadzony login jest nieprawidłowy.");
}

if (!
$password_result)
{
   echo (
"Wprowadzone hasło jest nieprawidłowe.");
}

// itd. Możemy również zapisywać to do zmiennej i wyświetlać błędy w innym miejscu ustalonym przez nas.

Chcesz pomóc? Wstaw jako sygnature na innym forum:
[Obrazek: 993a3cb39134bda0.gif]
Kod znajdziesz tutaj: http://forum.pcmod.pl/viewtopic.php?pid=522#p522

Asus P5K WS :: E2160 @ 3,63GHz BOX :: 2x1GB Geil Ultra DDR2 800MHz CL4 :: Galaxy 7600GS 128MB 1.4ns 500/1400 @ 600/1800 16k 03 :: Seagate ST3250410AS 250GB :: Amacrox Warrior AX-450PNF
Odpowiedz


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości