Я хочу создать случайный ключ для пользователя, который будет использоваться во время регистрации. Код сравнивает сгенерированный ключ с пользовательским вводом, но ключ восстанавливается, когда пользователь отправляет форму, поэтому они никогда не совпадают. Я попытался защитить функцию генератора, проверив, был ли он уже сгенерирован, но он не работает. Затем я тоже пытался использовать сеанс, который тоже не работал. Вот код, который всегда производит «сбой», а не «успех»:Как остановить uniqid() от регенерации в форме PHP
Редактировать: Я внесла некоторые исправления в соответствии с вашими комментариями.
<?php
session_start();
$_SESSION['key'] = randomKey();
$key1 = $_SESSION['key'];
error_reporting(E_ALL);
ini_set('display_errors', 1);
function randomKey() {
if (empty($_SESSION['key'])) {
$key = uniqid();
$_SESSION['key'] = $key;
return $key;
} else {
return $_SESSION['key'];
}
}
if(isset($_POST['submit']))
{
$input = $_POST['inputKey'];
if (strcmp($input,$_SESSION['key']) == 0) {
echo 'success';
} else {
echo 'fail';
}
}
?>
<html>
<head>
</head>
<body>
<form method="POST" action="">
<table border="0">
<tr>
<td>Your key:</td>
<td>
<b>
<?php echo $key1; ?></b>
</td>
</tr>
<tr>
<td>Enter your key:</td><td><input type="text" name="inputKey"></td>
</tr>
<tr>
<td><input id="button" type="submit" name="submit" value="Sign-Up"></td>
</tr>
</table>
</form>
</body>
</html>
Если вы не передадите $ key в свою функцию, он всегда будет нулевым, поэтому вы всегда получите новый. Прочитайте это http://php.net/manual/en/language.variables.scope.php – rjdown
$ _session -> $ _SESSSION –
@rjdown, но он использует сеанс глобальный –