Die folgenden Situationen führen dazu, dass das Formular wiederholt gesendet wird:
·Klicken Sie zweimal auf die Schaltfläche „Senden“.
·Klicken Sie auf die Schaltfläche „Aktualisieren“.
·Verwenden Sie die Zurück-Schaltfläche des Browsers, um den vorherigen Vorgang zu wiederholen, was zu einer erneuten Formularübermittlung führt.
·Verwenden Sie den Browserverlauf, um Formulare wiederholt einzureichen.
·Doppelte HTTP-Anfragen vom Browser.
·Die Webseite wurde böswillig aktualisiert.
Es gibt mehrere Lösungen:
1. Verwenden Sie js, um die Schaltfläche nach dem Klicken auf
<form name=form1 method=”POST” action=”/” target=_blank> <p> <input type=”text” name=”T1″ size=”20″> <input type=”button” value=”提交” οnclick=”javascript:{this.disabled=true;document.form1.submit();}”> </p> </form>
Klicken auf grau zu setzen Nachdem die Schaltfläche ausgefüllt ist, wird sie grau und kann nicht angeklickt werden. Wenn der Benutzer das Formular erneut senden muss, muss er die Seite aktualisieren, die Daten erneut eingeben und dann absenden.
Verwandte Empfehlungen: „php-Tutorial“
2. Verwenden Sie die Sitzung
, um der Sitzung eine besondere Note zu verleihen. Wenn die Formularseite angefordert wird, wird eine spezielle Zeichenfolge generiert, in der Sitzung gespeichert und im ausgeblendeten Feld des Formulars platziert. Überprüfen Sie beim Akzeptieren und Verarbeiten von Formulardaten, ob die Identifikationszeichenfolge vorhanden ist, löschen Sie sie sofort aus der Sitzung und verarbeiten Sie die Daten dann normal.
Wenn festgestellt wird, dass in der Formularübermittlung keine gültige Flag-Zeichenfolge vorhanden ist, bedeutet dies, dass das Formular bereits übermittelt wurde und diese Übermittlung ignoriert wird.
Dies verleiht Ihrer Webanwendung einen erweiterten XSRF-Schutz.
Beim Laden der übermittelten Seite wird eine Zufallszahl generiert:
$code = mt_rand(0,1000000);
und im versteckten Eingabefeld des Formulars gespeichert:
< input type=”hidden” name=”code” value=””>
Der PHP-Code auf der Empfangsseite lautet wie folgt:
<?php session_start(); if(isset($_POST[‘code'])) { if($_POST[‘code'] == $_SESSION[‘code']){ // 重复提交表单了 }else{ $_SESSION[‘code'] =$_POST[‘code']; //存储code } }?>
3. Verwendung von Cookies
Das Prinzip ähnelt der Sitzung, aber sobald der Browser des Benutzers Cookies deaktiviert, ist diese Funktion ungültig.
if(isset($_POST[‘submit'])){ setcookie(“tempcookie”,””,time()+30); header(“Location:”.$_SERVER[PHP_SELF]);exit(); } if(isset($_COOKIE[“tempcookie”])){ setcookie(“tempcookie”,””,0);echo “您已经提交过表单”; }
4. Verwenden Sie die Header-Funktion, um zu springen
Sobald der Benutzer auf die Schaltfläche „Senden“ klickt, springen Sie nach der Verarbeitung der Daten zu anderen Seiten.
if (isset($_POST[‘submit'])) { header(‘location:success.php');//处理数据后,转向到其他页面 }
5. Verwenden Sie die Datenbank, um Einschränkungen hinzuzufügen.
Fügen Sie eindeutige Einschränkungen hinzu oder erstellen Sie eindeutige Indizes direkt in der Datenbank Warnung wird direkt ausgegeben oder Tipp, oder verarbeiten Sie nur die zum ersten Mal übermittelten Daten. Dies ist die direkteste und effektivste Methode und erfordert eine sorgfältige Prüfung des frühen Datenbankdesigns und der Datenbankarchitektur.
6. Post-/Redirect-/Get-Modus
Seitenumleitung nach der Übermittlung durchführen Dies ist der sogenannte Post-Redirect-Get-Modus (PRG). Kurz gesagt: Wenn der Benutzer das Formular absendet, führen Sie eine clientseitige Umleitung zur Seite mit den Informationen zum Übermittlungserfolg durch.
if (isset($_POST[‘action']) && $_POST[‘action'] == ‘submitted') { //处理数据,如插入数据后,立即转向到其他页面 header('location:submits_success.php'); }
Das obige ist der detaillierte Inhalt vonSo vermeiden Sie Mehrfacheinreichungen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!