Beim Senden eines Formulars in PHP kann die Netzwerkgeschwindigkeit dazu führen, dass die Seite plötzlich langsam lädt. Wenn der Benutzer wiederholt auf die Schaltfläche „Senden“ klickt, werden mehrere Daten in der Datenbank generiert, was zu einer unkontrollierbaren Situation führt. Wie kann man dieses Problem vermeiden und lösen? Schauen wir uns unten um.
Vorwort
Warum sollten wir das wiederholte Einreichen von Formularen vermeiden? Da wir nicht möchten, dass unser Server wiederholt unnötige Daten verarbeitet, und wir auch verhindern, dass unsere Datenbank doppelte Daten generiert, ist die Vermeidung wiederholter Formulareinreichungen auch eine Möglichkeit, unsere Website sicherer zu machen.
Werfen wir zunächst einen Blick auf die Umstände, die zu einer wiederholten Einreichung von Formularen führen können. Wenn Sie die Umstände kennen, unter denen eine wiederholte Einreichung von Formularen erfolgen kann, können Sie die Situation der wiederholten Einreichung von Formularen von der Grundursache her bewältigen .
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 Übermittlung des Formulars führt.
Verwenden Sie den Browserverlauf, um Formulare wiederholt zu senden.
Wiederholte HTTP-Anfragen vom Browser.
Die Webseite wurde böswillig aktualisiert.
Es folgen mehrere Lösungen:
1: Verwenden Sie js, um die Schaltfläche so einzustellen, dass sie beim Klicken grau wird
<form name=form1 method=”POST” action=”/” target=_blank> <p> <input type=”text” name=”T1″ size=”20″> <input type=”button” value=”提交” onclick=”javascript:{this.disabled=true;document.form1.submit();}”> </p> </form>
Nachdem Sie auf die Schaltfläche geklickt haben, wird sie grau und kann nicht angeklickt werden. Wenn der Benutzer das Formular erneut abschicken muss, muss er die Seite aktualisieren und das Formular ausfüllen Daten erneut eingeben und dann absenden.
Zweitens: Verwenden Sie die Sitzung
, um eine besondere Markierung in session
zu setzen. Wenn die Formularseite angefordert wird, wird eine Sonderzeichen-Flag-Zeichenfolge generiert, in session
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);
wird 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 } }?>
Drei: Verwendung von Cookies
Das Prinzip ähnelt session
, aber cookies
sobald der Browser des Benutzers deaktiviert wirdcookies
, 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 “您已经提交过表单”; }
Viertens: Header-Funktion zum Springen verwenden
Sobald der Benutzer auf die Schaltfläche „Senden“ klickt, springen Sie anschließend zu anderen Seiten Verarbeiten der Daten
if (isset($_POST[‘submit'])) { header(‘location:success.php');//处理数据后,转向到其他页面 }
Fünf: Verwenden Sie die Datenbank, um Einschränkungen hinzuzufügen
Fügen Sie eindeutige Einschränkungen hinzu oder erstellen Sie direkt eindeutige Indizes in der Datenbank, sobald der Benutzer gefunden wird. Bei wiederholten Übermittlungen wird direkt eine Warnung oder Eingabeaufforderung ausgegeben, oder es werden nur die zum ersten Mal übermittelten Daten verarbeitet. Dies ist die direkteste und effektivste Methode und erfordert sorgfältige Überlegungen des frühen Datenbankdesigns und der frühen Datenbankarchitektur.
6: Post/Redirect/Get-Modus.
führt nach der Übermittlung eine Seitenumleitung durch, dies ist das sogenannte Post-Redirect-Get (PRG)
-Muster. Kurz gesagt: Wenn der Benutzer das Formular absendet, führen Sie eine clientseitige Umleitung durch und gelangen zur Seite mit den Informationen zum Übermittlungserfolg.
if (isset($_POST[‘action']) && $_POST[‘action'] == ‘submitted') { //处理数据,如插入数据后,立即转向到其他页面 header('location:submits_success.php'); }
Zusammenfassung
Oben geht es um die PHP-Lösung und die Vermeidung wiederholter Übermittlung von Formularen Es gibt mehrere Methoden, um wiederholte Übermittlungen zu vermeiden, die durch das Drücken von F5 durch den Benutzer verursacht werden. Außerdem wird keine Warnung vor wiederholten Übermittlungen des Browserformulars ausgegeben. Dadurch können auch die gleichen Probleme beseitigt werden, die durch das Drücken der Vorwärts- und Rückwärtstasten des Browsers verursacht werden. Ich hoffe, dass dieser Artikel jedem beim Lernen und Arbeiten helfen kann.
Verwandte Empfehlungen:
Login-, Registrierungs- und Passwortänderungsfunktionen in PHP implementiert
Detaillierte Erläuterung der anonymen PHP-Funktionen und Vorsichtsmaßnahmen
Verwendung der Rückruffunktion call_user_func_array in PHP
Das obige ist der detaillierte Inhalt vonPHP-Methode zur Lösung und Vermeidung wiederholter Formularübermittlungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!