Задать вопрос
@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 (неправильного или правильного значения без разницы) выводит неверно, не пойму или код совсем неверный или что то не дописал, помогите доработать код.
  • Вопрос задан
  • 155 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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: Муахаха, он думает, что таким образом пишет в куку, а на самом деле просто обновляет глобальный массив с данными прошлых кук. Я просто выкину этот массив при окончании скрипта и пользователь получит пустую куку, которую программист установил изначально! Гениальный план!
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽