所以我试图构建一个简单的游戏,让用户尝试猜测一个随机数。
我遇到的问题是,每次我提交表单时,页面都会刷新,所以随机数会发生变化。
通过阅读$_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。