$_SERVER[';PHP_SELF';]不断重置输入值


$_SERVER['PHP_SELF'] constantly resetting input value

所以我试图构建一个简单的游戏,让用户尝试猜测一个随机数。

我遇到的问题是,每次我提交表单时,页面都会刷新,所以随机数会发生变化。

通过阅读$_SERVER['HP_SELF']上的其他帖子,我认为它不应该只刷新页面的输入值。

但每次我提交表格时,我的随机数都会发生变化。

有没有一种方法可以提交表单而不刷新页面。

<?php
function form(){
 echo "<form method='post' action=" . $_SERVER['PHP_SELF'] . ">";
    echo "<input type='text' name='user' /><br/>";
    echo "<input type='submit' value='submit' />";
}
form();
$userinput = $_POST['user'];
$random = rand (  1 , 4);
echo "input is " . $userinput . "  " . "random number is " . $random;
?> 

$_SERVER['PHP_SELF']是页面的URL,减去域。http://php.net/manual/en/reserved.variables.server.php

如果你不想"加载"另一个页面,那么就使用AJAX。

有时人们也会通过在脚本中放入if $_POST['variable']来使用同一页面。检查$_POST是否存在

您也可以将随机数添加到表单的隐藏输入中,如下所示:

<?php
function form(){
    echo "<form method='post' action=" . $_SERVER['PHP_SELF'] . ">";
    echo "<input type='text' name='user' /><br/>";
    echo "<input type='submit' value='submit' />";
    echo "<input type='hidden' name='random' value=".rand(1, 4)."/><br/>";
}
if (!empty($_POST['user'])) {
    $userinput = $_POST['user'];
    $random = $_POST['random'];
    echo "input is " . $userinput . "  " . "random number is " . $random;
} else {
    form();
}
?>

你似乎很困惑。随机数会发生变化,因为这是生成新随机数时发生的情况,也是每次运行此脚本时(即每次加载页面时)所做的事情。您的表单提交会重新加载页面,因为这就是在没有任何JavaScript的情况下提交<form>的工作方式。

听起来你正试图在不重新加载的情况下提交表单。在这种情况下,您需要使用AJAX。也就是说,使用JavaScript提交表单,但不重定向浏览器。

需要明确的是:$_SERVER['PHP_SELF']与您的问题完全无关。使用它作为表单标记的action属性的值,只会告诉浏览器发布到同一页面,而不是其他页面。它仍然执行完整的POST请求,从而重新加载页面。换句话说,如果您的目标是保持在同一页面上,那么使用什么作为action属性并不重要;无论你在那里放什么,你都必须使用JavaScript。