检查表单是否已提交

时间:2017-03-17 10:06:21

标签: php html

我正在制作一个日历网络应用程序,当我点击日期时会弹出一个表单。如果我使用$_SERVER["REQUEST_METHOD"] == "POST"isset($_POST['submit'])来检查表单是否已提交,即使我刷新页面并且不点击提交,也会执行echo代码。如何确保仅在提交表单时检索表单数据?

<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">
                    Event Title:<br>
                    <input type="text" name="eventTitle" id="eventTitle" maxlength="15" size="20" placeholder="Code.fun.do" required><br><br>
                    Event Description:<br>
                    <textarea name="eventDescription" rows="5" cols="50"></textarea><br><br>
                    From:<br>
                    <input type="time" name="eventTimeFrom"><br><br>
                    To:<br>
                    <input type="time" name="eventTimeTo"><br><br>
                    <input id="eventSave" type="submit" name="submit" value="Save">
</form>

<?php
            $eventTitle = $eventDescription = $eventTimeFrom = $eventTimeTo = "";
            //if ($_SERVER["REQUEST_METHOD"] == "POST") {
            if(isset($_POST['submit'])) {  
                echo "<h2>something</h2>";
                $eventTitle = test_input($_POST["eventTitle"]);
                $eventDescription = test_input($_POST["eventDescription"]);
                $eventTimeFrom = test_input($_POST["eventTimeFrom"]);
                $eventTimeTo = test_input($_POST["eventTimeTo"]);
            }
            function test_input($data) {
                $data = trim($data);
                $data = stripslashes($data);
                $data = htmlspecialchars($data);
                return $data;
            }
?>

1 个答案:

答案 0 :(得分:1)

提交表单时。 POST请求将发送到服务器。

您可以通过在完成脚本正在执行的工作后重定向页面来避免这种情况:

header("Location: http://mypage.php");
die();

现在,问题在于您丢失了回显的数据数据,因此您可以添加一些内容来提供成功消息:

header("Location: http://mypage.php?success=true");
die();

现在,在您的脚本中,您可以使用输出的位置:

<?php
if ( isset( $_GET['success'] && $_GET['success'] == 'true' ) ) {
    echo 'Your form has been submitted!';
}

这应避免您遇到的麻烦。还有其他一些技巧,您应该使用适合您的技术。

另外,在浏览器中使用前进和后退按钮时,也会重新提交POST请求 - 您也应该注意这一点。