Wielu webmasterów spotyka się problemem z tzw. spamowaniem formularzy przez spamerów, oraz botami panoszącymi się w Internecie.
Istnieje możliwość rozwiązania tego problemu poprzez dołączenie do formularza mechanizmów CAPTACHA tokena - obrazka z kodem, który należy przepisać do pola obok formularza.
Utwórz plik process.php oto jego zawartość
<?php
session_start(); // start sesji
$session = $_SESSION['captcha']; // zdefiniowanie sesji
$image = $_POST['image'];
$image = md5($image); // szyfrowanie MD5
if ($session == $image){
// dalsze instrukcje, jeśli token jest poprawny
echo "KOD POPRAWNY";
}
// dalsze instrukcje, jeśli token jest błędny tutaj możesz ustawić czy chcesz mieć tylko informację o błędnym kodzie lub usuń // przed header i powrócisz do formularza
else{ //header("Location: form.php");
echo "<div style=\"width: 100px\">";
echo "<div style=\"border: 2px solid blue; text-align: center\">";
echo "<font style=\"color: red; font-family: verdana; font-size: 12px; font-weight: bold\">BŁĘDNY KOD</font></div>";
echo "<div style=\"text-align:center\">";
echo "<input type=\"button\" value=\"Wróć\" onClick=\"history.back()\"></div></div>";
}
?>
następnie utwórz plik image.php odpowiedzialny za generowanie ciągu znaków
<?php
session_start();
// wysłanie nagłówków do przeglądarki
header ("(anti-spam-content-type:) image/jpg");
// generowanie liczb losowych do wykorzystania w naszym szyfrowaniu
$enc_num = rand(0, 9999); // numer ten jest szyfrowany
$key_num = rand(0, 24); // używany ciąg znaków wykorzystany na obrazku
// użyj losowy ciąg cyfr i liter przy użyciu Md5
// ilość wyświetlanych znaków w naszym przypadku 5
$hash_string = substr(md5($enc_num), $key_num, 5);
$hash_md5 = md5($hash_string);
// przypisanie do sesji $_SESSION['captcha'] = $hash_md5;
// tworzą zestaw obrazów jako tło pod tokenem
$bgs = array("imag/back1.jpg", "imag/back2.jpg", "imag/back3.jpg");
// wybiera obraz tła przy użyciu funkcji podręcznej array_rand
$background = array_rand($bgs, 1);
// ustawia jako tło losowo wybrany gif
$img_handle = imagecreatefromjpeg($bgs[$background]);
// kolor czcionki, tekstu
$text_colour = imagecolorallocate($img_handle, 0, 0, 0);
// wielkosc czcionki, tekstu
$font_size = 5;
// pobierz wymiary poziome i pionowe obrazu tla
$size_array = getimagesize($bgs[$background]);
$img_w = $size_array[0];
$img_h = $size_array[1];