Загрузка...

PHP капча с обновлением без перезагрузки страницы.

Тема в разделе Backend создана пользователем Hangman666 13 июл 2016. 507 просмотров

Загрузка...
  1. Hangman666
    Hangman666 Автор темы 13 июл 2016 Хранитель Идей 342 10 мар 2016
    1. Создадим файл captcha.php
    Код

    <?php
    $width = 100; //Ширина изображения
    $height = 60; //Высота изображения
    $font_size = 16; //Размер шрифта
    $let_amount = 4; //Количество символов, которые нужно набрать
    $fon_let_amount = 30; //Количество символов на фоне
    $font = "шрифт.ttf"; //Путь к шрифту
    $letters = array("a","1","c","2","e","3","g"); //Символы которые будут генерироваться на картинке, можно добавить
    $colors = array("90","110","130","150","170","190","210"); //Набор цветов, которые будут также генерироваться
    $src = imagecreatetruecolor($width,$height); //Создаем изображение
    $fon = imagecolorallocate($src,255,255,255); //Создаем фон
    imagefill($src,0,0,$fon); //Заливаем изображение фоном
    for($i=0;$i < $fon_let_amount;$i++) //Добавляем на фон символы
    {
    //случайный цвет
    $color = imagecolorallocatealpha($src,rand(0,255),rand(0,255),rand(0,255),100);
    //случайный символ
    $letter = $letters[rand(0,sizeof($letters)-1)];
    //случайный размер
    $size = rand($font_size-2,$font_size+2);
    imagettftext($src,$size,rand(0,45),
    rand($width*0.1,$width-$width*0.1),
    rand($height*0.2,$height),$color,$font,$letter);
    }
    for($i=0;$i < $let_amount;$i++) //То же самое для основных букв
    {
    $color = imagecolorallocatealpha($src,$colors[rand(0,sizeof($colors)-1)],
    $colors[rand(0,sizeof($colors)-1)],
    $colors[rand(0,sizeof($colors)-1)],rand(20,40));
    $letter = $letters[rand(0,sizeof($letters)-1)];
    $size = rand($font_size*2-2,$font_size*2+2);
    $x = ($i+1)*$font_size + rand(1,5); //Даем каждому символу случайное смещение
    $y = (($height*2)/3) + rand(0,5);
    $cod[] = $letter; //Запоминаем код
    imagettftext($src,$size,rand(0,15),$x,$y,$color,$font,$letter);
    }
    $cod = implode("",$cod); //Переводим код в строку
    session_start();
    $_SESSION['code']=$cod;
    header ("Content-type: image/gif"); //Выводим готовую картинку
    imagegif($src);
    ?>

    2. Код вывода капчи:
    Код

    <html>
    <head>
    </head>
    <img src="captcha.php" /><a href="#" onclick="document.getElementById('cap').src = 'captcha.php?nocash='+Math.random(); return false;">Обновить</a>
    <form action="check.php" method="POST">
    <input type="text" name="captcha_code">
    <input type="submit" value="Отправить" name="req">
    </form>
    </html>

    3. Создаем файл check.php:
    Код

    <?php
    session_start();
    $code=$_SESSION['code'];
    if($_POST['captcha_code']=="" || $_POST['captcha_code']==" ")
    {
    die("Введите символы!");
    }
    else
    {
    $p_code=$_POST['captcha_code'];
    if($p_code!=$code)
    {
    die("Неверно введены символы!");
    }
    else
    {
    //Тут делаем все что должно быть,
    //если капча введена верно
    //например, echo "Сообщение отправлено";
    }
    }
    ?>

    Можно полностью менять количество символов, размер шрифта, сам шрифт, размер картинки и т.д.

    Пример вывода:
    [IMG]
     
Top