Здравствуйте, совсем запутался из за чего может происходить следующее: Я делаю капчу для обработки формы. Используя библиотеку GD генерирую изображение в отдельном .php, тут же в глобальный массив _SESSION присваиваю хэш рандомно сгенерированного текста качи. Затем на нужно странице вывожу изображение капчи, разумеется сессия подключается и на этой странице, обрабатываю событие submit, беру введенное значение капчи из формы и используя функцию md5 сравниваю хэш введенного текста с хэшем, который хранится в _SESSION. Но результат огорчает, капча всегда верна. В случае когда сравниваешь истинные значение, а не хэши, то все работает прекрасно. Проверял много раз, все ли правильно написано, то ли я сравниваю, но результат один и тот же.
Код создания капчи: Код (Text): <?php session_start(); header('Content-Type: image/png'); $im = imagecreatetruecolor(131, 57); $bg = imagecolorallocate($im, 242,243,244); $grey = imagecolorallocate($im, 48,43,47); imagefill($im, 0, 0, $bg); $text = rand(100,999); $_SESSION['code'] = md5($text); $font = 'MACARENA.TTF'; imagettftext($im, 42, 6, 24, 47, $grey, $font, $text); imagepng($im); imagedestroy($im); ?> Скрипт обработки: Код (Text): <?php session_start(); if(isset($_POST['submit'])) { $code = md5($_POST['code']); if($code == $_SESSION['code']) { echo "Капча верна"; } else { echo "Капча неверна"; } } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <img src="captcha/captcha.php" /> <input type="text" name="code" class="input" /> <input type="submit" name="submit" value="save" class="button" /> </form>
Расставь echo везде - посмотри, что в $code, что в $_POST['code'], что в $_SESSION['code'] . После сравнения PHP: <?php // ... if($code == $_SESSION['code']) { // ... } else { // ... } // ... ?> надо обязательно убирать из сессии параметр code ( unset($_SESSION['code']); ) Не знаю, зачем они нужны в данном случае, но сравниваются они без проблем: PHP: <?php $str1 = md5('123'); $str2 = md5('123'); if($str1 == $str2) echo('Равны'); else echo('Не равны'); echo('<br />=======<br />'); $str1 = md5('123'); $str2 = md5('234'); if($str1 == $str2) echo('Равны'); else echo('Не равны'); ?>