2017-03-17 104 views
0

我正在制作日历网络应用程序,当我点击某个表单时弹出一个表单。如果我使用$_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; 
      } 
?> 
+0

你想保存提交后的值? –

+0

@MasivuyeCokile我正在使用JavaScript获取表单数据并将其显示在日历中。 –

+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请求也会重新提交 - 您也应该注意这一点。

+1

其他技术包括使用会话和/或唯一的网址 - 但我不想在这个特定的答案中进入。 –