【问题标题】:PHP Script is still getting executed even with isset( ) submit button check after browser refresh即使在浏览器刷新后使用 isset() 提交按钮检查,PHP 脚本仍在执行
【发布时间】:2012-12-12 20:32:47
【问题描述】:

我是自学 PHP 的新手。 我只想在单击提交按钮时运行一个小的 PHP 脚本。不幸的是,执行此提交按钮检查的函数isset()(根据我的教程)似乎不起作用!

当我在浏览器中刷新页面时,部分 PHP 脚本:print("You're not a member of this site"); 仍在执行,即使我还没有按下提交按钮!为什么?

和代码:

<html>
<head>
    <title>A BASIC HTML FORM</title>

    <?PHP
        if (isset($_POST['Submit1'])) {
            $username = $_POST['username'];

            if ($username == "letmein") {

                print ("Welcome back, friend!");

            }
            else {

                print ("You're not a member of this site");

            }
        }
    ?>
</head>
    <body>
        <Form name ="form1" Method ="POST" Action ="basicForm.php">
            <INPUT TYPE = "TEXT" VALUE ="username" NAME="username">
<p>

            <Input Type = "Submit" Name = "Submit1" Value = "Login">
        </FORM>
    </body>
</html>

【问题讨论】:

  • html 应该全部小写,但应该不是问题。
  • 您是否收到一条消息,说明请求的数据将被再次发送?
  • 我刚刚在我的本地服务器上尝试过,它运行良好。您是否输入“letmein”作为用户名?
  • 请尝试清除浏览器缓存!
  • @PeeHaa 暗示的是,如果你点击“刷新”按钮,一些浏览器会重复上一个请求:无论是 GET 还是 POST。如果您将光标放在地址栏中并按 Enter,您的页面是否“行为不端”?

标签: php forms submit isset


【解决方案1】:

代替isset()

使用

!empty($_POST)

【讨论】:

  • 这对于 OP 问题应该无关紧要。
  • @Manish GoyalTried 试过了,工作正常,但结果仍然没有变化(浏览器刷新后 PHP 代码仍然被执行)。无论如何,我应该如何用这段代码引用“submit1”?
【解决方案2】:

如果您使用浏览器的刷新或F5键,您需要在提交后立即重定向,刷新时不会超过isset。

就像在mysql_query 函数之后你为表单提交的 INSERT 记录编写的函数一样,你需要编写一个

header('Location:yourpage.php')

它会阻止这种行为。

【讨论】:

  • 请您详细解释一下“立即重定向”是什么意思
  • 您可以将一些数据保存到会话中,设置一些 cookie - 然后执行Header("Location: basicForm.php");然后执行一些 $_COOKIE 检查 - 然后print ("Welcome back, friend!")
  • @ Max Yakimets 好的,谢谢。不知道怎么做你刚才说的,但我会玩它并给大家回复结果
  • 清除浏览器缓存。 PHP 代码仍在执行中
【解决方案3】:

我也是php新手,分享一下我的经验吧。。 我对此有两种看法。第一种是如果您有许多表单,则需要添加 form="form1" 属性 insde 输入和按钮,以便为 $_POST 提供一个表单。

第二个想法是..

没有 ajax, $_POST 方法在点击时发送数据,但来自服务器的请求仅在刷新后出现。这意味着帖子中显示的数据落后了 1 次刷新。

您可以添加一个隐藏的单选按钮或带有一些“检查值”的检查按钮,例如“1”.. 直到此按钮接收到一个值,然后您可以比较该值,如果它为真,则显示一条消息,如果不是,则显示另一条消息。

但是你需要一个默认值,要么是空的,要么总是从“你不是会员”开始,直到复选框改变值。

<?php
 $username = "";
 $username = (isset($_POST['Submit1']) ? $_POST['Submit1'] : "");
?>
<Form name ="form1" Method ="POST" Action ="basicForm.php">
<INPUT TYPE = "TEXT" VALUE ="username" NAME="username">

<INPUT hidden TYPE = "checkbox" NAME="check_trigger"
<?php if(!is_empty($username)){ echo "checked";}; ?> >

<Input Type = "Submit" Name = "Submit1" Value = "Login">
</FORM>

所以当输入用户名时,复选框会自动选中,您可以 即使名称已更改,也要回显问候消息... 我是不是跑题了。。

或者你可以把你的名字作为默认值放在isset里面

$username = (isset($_POST['Submit1']) ? $_POST['Submit1'] : "letmein");

并且拥有

<INPUT TYPE = "TEXT" 
VALUE =<?php"echo htmlspecialchars($username);?>" NAME="username">

但您需要一些验证和安全性。

【讨论】:

    猜你喜欢
    • 2015-08-18
    • 2013-08-02
    • 2016-08-19
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2019-11-14
    • 2021-12-15
    相关资源
    最近更新 更多