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); tj. wyż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:
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
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