Всем привет, не так давно окунулся в мир php, перед этим немного лет поплавал в pawn Решил реализовать систему капчи, беру два числа $a и $b Пытаюсь их суммировать и проверить $_POST['capt']==$c ($c сумма $a и $b) Вот собственно сам код PHP: <?php $a=rand(1,10); $b=rand(1,10); $c=$a+$b; if(isset($_POST['capt']) && !empty($_POST['capt'])) { if(isset($_POST['capt2'])) { if($_POST['capt']==$c) { echo 'Капча введена ВЕРНО, сумма ', $c; } else { echo 'Капча введена НЕВЕРНО, сумма ', $c; } } } ?> <form action="" method="POST"> <? echo $a, ' + ', $b, ' = ?'; ?><br> <input type="text" name="capt"><br> <input type="submit" name="capt2" value="Выполнить"> </form> Тема такая, что при вызове кнопки 'submit' он уже изменяет переменные :-( Прошу прощения за строение кода, т.к. на данном этапе изучаю базу p.s. в теории, понимаю, что можно это реализовать путем использовании сессии Помогите, господа кодеры
Конечно изменяет. Капчу надо сгенерировать, сохранить в сессии, и только потом проверить. мы же знаем, как работает php: phpfaq.ru/na_tanke
Isset и проверка именно нажатия кнопки, мне кажется лишены смысла. Я дума можно код сократить. PHP: if (!empty($_POST['capt'])) { if ($_POST['capt'] == $c) { echo 'Капча введена ВЕРНО, сумма ', $c; } else { echo 'Капча введена НЕВЕРНО, сумма ', $c; } }
Как пример: page1.php PHP: <?php session_start(); $digit1 = mt_rand(1,20); $digit2 = mt_rand(1,20); if( mt_rand(0,1) === 1 ) { $math = "$digit1 + $digit2"; $_SESSION['answer'] = $digit1 + $digit2; } else { $math = "$digit1 - $digit2"; $_SESSION['answer'] = $digit1 - $digit2; } ?> <form method="POST" action="page2.php"> <?php echo $math; ?> = <input name="answer" type="text" /><br /> <input type="submit" /> </form> page2.php PHP: <?php session_start(); if ($_SESSION['answer'] == $_POST['answer'] ) echo ' <b>Это правильный ответ</b>'; else echo 'Не верный ответ. Ожидалось '.$_SESSION['answer']; ?>
штьё ета? --- Добавлено --- вариантов два: 1. сессия 2. подписанные переменные пихать в хидден инпут на форме, а на сервере проверять, что это именно те переменные, потом что подпись правильная. Плюсы - ничего не надо хранить; капча не дохнет, но можно добавить подписанное же время.
Попробую угадать, он писал скрипты для игр, half-life, counter-strike или подобное, википедия на это намекает