2

我是自学 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>
4

3 回答 3

3

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

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

header('位置:yourpage.php')

它将防止这种行为。

于 2012-12-27T12:48:21.500 回答
0

而不是 isset()

利用

!empty($_POST)

于 2012-12-27T12:47:21.797 回答
0

我也是 php 新手,将分享我的经验.. 我对此有 2 个愿景.. 第一个是如果你有很多表单,你需要添加 form="form1" attrtibute 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">

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

于 2017-02-15T22:47:33.610 回答