刷新时表中有多个条目

时间:2015-05-22 14:20:07

标签: php

当我通过POST方法将表单提交到PHP_SELF页面时,每次刷新时都会将文本插入表中。如何修复此问题并防止我的textarea在插入之前变空?

echo "<form action=<?php echo $_SERVER['PHP_SELF']; method='post'>";
echo "<textarea name='msg' placeholder='Type message here' required='required' style='width:100%;min-height:60px;min-height:60px;'></textarea>";
echo "<button>Send</button>";
echo "</form>";

这是我的PHP代码,可以将文本插入到表格中,以及#39; msg&#39;。

if(isset($_POST['msg'])&!empty($_POST['msg']))
{
    $message=$_POST['msg'];
    $message=$conn->quote($message);
    $sql="INSERT INTO msg(msg.to,msg.from,msg) VALUES('".$_SESSION["tousermessage"]."','".$_SESSION["username"]."',$message)";
    $ex=$conn->prepare($sql);
    $ex->execute();

    unset($_POST['msg']);
}

1 个答案:

答案 0 :(得分:0)

首先,您已经使用PHP并回显:

echo "<form action=<?php echo $_SERVER['PHP_SELF']; method='post'>";

需要更改为(并且会抛出一个解析错误)。 <{3}}可能未设置。

echo "<form action='' method='post'>";

现在,如果您想避免在页面刷新时将条目添加到数据库中,您可以选择几个选项。

  • 使用Error reporting重定向(到同一页面或其他页面)
  • 使用两个不同的文件,HTML表单然后是PHP / MySQL。但是,点击返回上一页并进行刷新的人也可能会生成相同的内容,因此无论哪种方式,都使用header

I.e。:(并且您的条件语句中缺少&

旁注:你的价值观$message。这是一个字符串,应该引用它。即:'$message'。但是我把它留在了下面。如果你得到header并且你应该收到错误,请引用它。

if(isset($_POST['msg']) && !empty($_POST['msg']))
    {
        $message=$_POST['msg'];
        $message=$conn->quote($message);
        $sql="INSERT INTO msg(msg.to,msg.from,msg) VALUES('".$_SESSION["tousermessage"]."','".$_SESSION["username"]."',$message)";
        $ex=$conn->prepare($sql);
        $ex->execute();

        unset($_POST['msg']);
        header("Location: http://www.example.com/yourfile.php");
        exit;
    }

但是,只有在您不在标题之前输出时才会有效,例如PHP以上的HTML等。

如果是这种情况,使用ob_start();可能会有效,但理想情况下,PHP应该位于您可能拥有的任何HTML之上。

使用会话令牌是另一种选择,但这可能超出了这个问题的范围。

请查看以下有关防止多个提交的页面:

效果相当好,可以防止多次提交。

脚注: