我正在尝试检查用户输入的值是否与我定义的值匹配。为此,我使用方法POST
创建了一个<form>
。由于我只是在尝试代码,所以我添加了一个引用同一value.php
页面的action属性。然后我想让页面echo
判断值是否匹配。我遇到了一个奇怪的问题,我在另一篇关于Stack Overflow的文章中读到了这个问题,但我仍然不太明白为什么会发生这种情况。
这是<form>
的代码,它是value.php
文件的内容:
<form action="value.php" method="POST">
<input type="text" name="fruit" placeholder="FRUIT HERE"><br>
<input type="text" name="vegetable" placeholder="VEGETABLE HERE">
<button type="submit">CHECK</button>
</form>
在<form>
上面的同一个文件value.php
中,我有以下PHP代码:
<?php
$db_fruit = 'apple';
$db_vegetable = 'tomato';
if (isset($_POST['fruit']) && isset($_POST['vegetable'])) {
$fruit= htmlentities($_POST['fruit']);
$vegetable = htmlentities($_POST['vegetable']);
if (!empty($fruit) && !empty($vegetable)) {
if ($fruit == $db_fruit && $vegetable == $db_vegetable) {
echo 'The values do match.';
} else {
echo 'The values do not match.';
}
}
}
?>
由于PHP代码中有isset();
函数,我希望除非用户用type="submit"
点击<button>
,否则不会执行echo
。然而,如果事实上提供了错误的值,并且执行了echo 'The values do not match.';
,则即使在页面刷新后,尽管接受了Confirm form resubmission
警告并单击了Continue
,echo
也不会消失。我如何使CCD_ 17不会出现在页面刷新上;全新的"?
我还应该指出,我正在寻找一个不需要使用JavaScript的解决方案。
它与您在这里发布的代码完全相同,我合并了两个不同的部分,在这种情况下,您需要防止在刷新时重新提交表单,所以我在脚本标记之间添加了javascript。此外,逻辑发生了一些变化,在我看来,收集将在数组中进行回声处理的文本,并将它们回声在一起是更好的方法,但变化不大。您也可以通过包含脚本来尝试上一个版本。
<?php
$db_fruit = 'apple';
$db_vegetable = 'tomato';
$result = array();
if (isset($_POST['fruit']) && isset($_POST['vegetable'])) {
$fruit= htmlentities($_POST['fruit']);
$vegetable = htmlentities($_POST['vegetable']);
if (!empty($fruit) && !empty($vegetable)) {
if ($fruit == $db_fruit && $vegetable == $db_vegetable) {
$result[] = 'The values do match.';
} else {
$result[] = 'The values do not match.';
}
}
}
if (!empty($result)) {
foreach ($result as $val) {
echo "$val";
}
}
?>
<script> //this part will not allow form resubmit on refresh !
if ( window.history.replaceState ) {
window.history.replaceState( null, null, window.location.href );
}
</script>
<form action="" method="POST"> //because php code is on same file action empty
<input type="text" name="fruit" placeholder="FRUIT HERE"><br>
<input type="text" name="vegetable" placeholder="VEGETABLE HERE">
<button type="submit">CHECK</button>
</form>
在没有重新提交表单的情况下,回波仍然出现?这很奇怪,也许你的浏览器仍然发送POST点击继续。。。
不管怎样,您可以应用的技巧是使用会话控制变量。
就在表单之前,但在管理POST之后,您定义了一个会话变量,并给它一个随机值,例如:
$_SESSION['control'] = rand(100000, 999999);
并将该值作为隐藏输入放入表单中:
<input type="hidden" name="control" value="<?php echo $_SESSION['control']; ?>" >
现在你可以检查发送的控件是否与当前控件匹配,而不是检查水果和蔬菜(如果你愿意,你仍然可以这样做):
if (isset($_POST['control']) && isset($_SESSION['control']
&& $_POST['control'] == $_SESSION['control`]) {
当然,不要忘记在脚本开始时开始会话:
session_start();
仅此而已。