2017-03-17 10 views
0

Ich mache eine Kalender Web App und wenn ich auf ein Datum klicke erscheint ein Formular. Wenn ich $_SERVER["REQUEST_METHOD"] == "POST" oder isset($_POST['submit']) verwende, um zu überprüfen, ob das Formular übermittelt wird oder nicht, wird der Code echo ausgeführt, auch wenn ich die Seite aktualisiere und nicht auf Senden klicke. Wie kann ich sicherstellen, dass die Formulardaten nur abgerufen werden, wenn ich das Formular absende?Überprüfen Sie, ob das Formular eingereicht wurde.

<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

Sie möchten die Werte nach dem Senden behalten? –

+0

@MasivuyeCokile Ich benutze Javascript, um Formulardaten zu erhalten und sie im Kalender anzuzeigen. –

+0

Ihr Fragetitel sagt etwas anderes, und Ihr Körper etwas anderes, können Sie klar erklären, was Sie wollen? –

Antwort

1

Wenn Sie das Formular absenden. Eine POST-Anfrage wird an den Server gesendet.

Sie können dies vermeiden, indem Sie die Seite umgeleitet, wenn Sie die Arbeit abgeschlossen haben, dass Ihr Skript mit diesem tut:

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

Nun, hier ist das Problem, dass Sie Echo Daten Daten verloren gehen, so dass Sie könnte hinzufügen etwas eine Erfolgsmeldung zu geben:

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

nun in Ihrem Skript Sie könnte dies in dem die Ausgabe gehen würde:

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

Dies sollte die Probleme vermeiden, die Sie haben. Es gibt andere Techniken, und Sie sollten eine verwenden, die für Sie richtig ist.

Nebenbei bemerkt, POST-Anfragen werden auch erneut gesendet, wenn Sie Vorwärts- und Zurück-Schaltflächen in Ihrem Browser verwenden - Sie sollten dies auch beachten.

+1

Andere Techniken umfassen die Verwendung von Sitzungen und/oder eindeutigen URLs - aber ich möchte in dieser spezifischen Antwort nicht darauf eingehen. –

Verwandte Themen