Пользователю выводится уравнение которое ему нужно решить, уравнение берется случайным образом. Но как я понял при нажатии на эту кнопку рандом заново генерируется и введённый ответ почти всегда не верный. Как это исправить? PHP: echo " <form action='{$_SERVER['SCRIPT_NAME']}'> <input type = 'text' name='n1'><br> <input type='submit' name='b1' value='нажми'> </form> "; $r = array( "3+5", "7+4", "8+14", "7-6", "9*2", ); $g = mt_rand(0, 4); echo $r[$g]; $r1 = array( 3 + 5, 7 + 4, 8 + 14, 7 - 6, 9 * 2, ); $t = $r1[$g]; echo "<br>$t<br>"; if (isset($_REQUEST['b1']) ?? false) { if ($_REQUEST['n1'] == $t) { header('Location: http://123'); } else { echo "<br>Ошибка"; } }
да Location не важно я не могу ввести правильный ответ на уравнение. Например 7-6 вводишь 1 а он не идет в этот if, а идет в нижний где echo "ошибка". Может пойти по ссылке если повторить пару тройку раз. Как я понял он при нажатии на кнопку генерирует другое число и уже с ним работает.
Ну тут два варианта 1. При показе капчи ответ на нее записывается им в сессию, при проверке проверяется ответ пользователя и ответ в сессии 2. Раз такого характера капча, можете передать значение первого числа, второго и операцию скрытыми полями, а при проверке вычислить значение и сравнить с ответом пользователя
Решение уравнения запоминать нужно где-то чтоб сравнивать с ним потом ответ пользователя. Можно его прокинуть к пользователю же в зашифрованном виде, чтоб он его не подсмотрел. PHP: <?php $salt = 'salt'; $range = [5, 20]; $actions = [ '+' => function ($a, $b) { return $a + $b; }, '-' => function ($a, $b) { return $a - $b; }, '*' => function ($a, $b) { return $a * $b; }, ]; $a = mt_rand($range[0], $range[1]); $b = mt_rand($range[0], $range[1]); $sign = array_rand($actions); $action = "$a $sign $b = "; $hash = md5($actions[$sign]($a, $b).$salt); if(isset($_REQUEST['response']) && isset($_REQUEST['hash'])) { $result = $_REQUEST['hash'] == md5(trim($_REQUEST['response']).$salt); } ?> <form> <span><?php echo $action; ?></span> <input style="width:50px;" type="text" name="response"> <input type="hidden" name="hash" value="<?php echo $hash; ?>"> <input type="submit" value="Проверить"> </form> <?php if(isset($result)) { ?> <p>Ответ <?php echo $result ? '' : 'не'; ?> верен!</p> <?php } ?>