Задать вопрос
@Donalds

Как правильно доработать код капчи?

Есть 2 файла
5.php
<?php header("Content-Type: text/html; charset=utf8"); ?>

<form action="" method="post">
    <input type="text" name="coded"><p />
    <img src="6.php" alt="" /><p />
    <input type="submit" name="subu" value="отправить"><p />
</form>
<?php

$code_capcha = $_POST['coded'];
    if(isset($_POST['subu'])) {
        if($code_capcha == $_COOKIE['coded']) {
        echo "<font color='green'> Верно </font>";
        }

else {
    echo "<font color='red'> Неверный код </font>";
   }
}

?>


6.php
<?php
header("Content-Type: image/png;");
setcookie("coded");
$image = imagecreatetruecolor(120, 30);
    $red = imagecolorallocate($image, 255, 0, 0);
    $black = imagecolorallocate($image, 0, 0, 0);
    $w = imagecolorallocate($image, 255, 255, 255);
    
    imagefill($image, 0, 0, $red);



 $cap_array = array("a","b","c","d","e","f","g","h","j","k","l","m","n","o","p","q",
  "r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9");
    for($i = 0; $i <= 4; $i++) {
    $code_capcha .= $cap_array[rand(0, count($cap_array) - 1)];   
    
}
$_COOKIE['coded']= $code_capcha;
    
    imagestring($image, 5, 40, 5, $code_capcha, $w); 
    imagepng($image);
    imagedestroy($image);
?>

PHP изучаю недавно, не могу догнать почему при нажатии кнопки отправить просто пустого input выводит "Верно", а при вводе в input (неправильного или правильного значения без разницы) выводит неверно, не пойму или код совсем неверный или что то не дописал, помогите доработать код.
  • Вопрос задан
  • 152 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Stalker_RED
@Stalker_RED
в 6.php убрать setcookie("coded"); которое вверху.
вместо $_COOKIE['coded']= $code_capcha; написать
setcookie("coded", $code_capcha);

И вообще, это неправильный подход. Бот может прочитать значение вашей куки. Лучше сохранять в сессию.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
setcookie("coded");
Программист: Дорогой php, установи, пожалуйста, пользователю куку с кодом coded и дефолтным значением в виде пустой строки.
php: Слушаю и повинуюсь.

$_COOKIE['coded']= $code_capcha;
Программист: Дорогой php, запиши в эту куку значение капчи.
*Демонический смех, отблески адского пламени*
php: Муахаха, он думает, что таким образом пишет в куку, а на самом деле просто обновляет глобальный массив с данными прошлых кук. Я просто выкину этот массив при окончании скрипта и пользователь получит пустую куку, которую программист установил изначально! Гениальный план!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы