Heim > Backend-Entwicklung > PHP-Tutorial > Ausführliche Erklärung zum Verhindern der wiederholten Übermittlung von Formularen in PHP

Ausführliche Erklärung zum Verhindern der wiederholten Übermittlung von Formularen in PHP

伊谢尔伦
Freigeben: 2023-03-07 15:40:01
Original
3468 Leute haben es durchsucht

Wenn ein Benutzer ein Formular sendet, kann aufgrund der Netzwerkgeschwindigkeit derselbe Datensatz wiederholt in die Datenbank eingefügt werden oder die Webseite wird böswillig aktualisiert. Daher besteht eine nicht zu ignorierende Einschränkung darin, zu verhindern, dass Benutzer das Formular wiederholt senden Wenn der Benutzer kontinuierlich auf die Schaltfläche „Senden“ klickt oder ein Angreifer in böswilliger Absicht Daten übermittelt, geraten wir bei der Verarbeitung nach der Übermittlung der Daten in Schwierigkeiten, z. B. beim Ändern oder Hinzufügen von Daten zur Datenbank.

Wie kann man also das Phänomen der wiederholten Formularübermittlung vermeiden? Es muss in vielerlei Hinsicht eingeschränkt werden. Lassen Sie uns einige gängige Methoden in PHP zusammenfassen, um das wiederholte Senden von Formularen zu verhindern.

Machen Sie zunächst Einschränkungen vom Frontend aus.

Frontend JavaScript wird deaktiviert, nachdem die Schaltfläche einmal angeklickt wurde, d Der Benutzer deaktiviert das Javascript-Skript. Ungültig.

Vom Kunden im folgenden Beispiel erwähnt, verwenden wir es, um das wiederholte Übermittlungsproblem des Formulars zu lösen. Sehen Sie sich bitte den Code unten an:

<form method="post" name="register" action="test.PHP" enctype="multipart/form-data">
<input name="text" type="text" id="text" />
<input name="cont" value="提交" type="button" onClick="document.register.cont.value=&#39;正在提交,请等待...&#39;;document.register.cont.disabled=true;document.the_form.submit();">
</form>
Nach dem Login kopieren

Wenn der Benutzer auf „Senden“ klickt "-Schaltfläche. Die Schaltfläche wird grau und ist nicht verfügbar

Es gibt eine andere Methode, die ebenfalls die Funktion von JavaScript verwendet, jedoch die OnSubmit()-Methode verwendet. Wenn das Formular einmal gesendet wurde, wird ein Dialogfeld angezeigt Der Code lautet wie folgt:

<script language="javascript">
<!--
var submitcount=0;
function submitOnce (form){
if (submitcount == 0){
     submitcount++;
     return true;
} else{
    alert("正在操作,请不要重复提交,谢谢!");
    return false;
}
}
//-->
</script>
<form name="the_form" method="post" action="" onSubmit="return submitOnce(this)">
<input name="text" type="text" id="text" />
<input name="cont" value="提交" type="submit">
</form>
Nach dem Login kopieren

Wenn der Benutzer im obigen Beispiel auf die Schaltfläche „Senden“ geklickt hat, zeichnet das Skript automatisch den aktuellen Status auf und fügt 1 zur Anzahl der Übermittlungen hinzu Variable Wenn der Benutzer versucht, erneut zu senden, stellt das Skript fest, dass der Wert der Submitcount-Variable ungleich Null ist, und teilt dem Benutzer mit, dass das Formular gesendet wurde, wodurch eine wiederholte Übermittlung des Formulars vermieden wird.

Zweitens: Verwenden Sie die Cookie-Verarbeitung.

Verwenden Sie Cookies, um den Status der Formularübermittlung aufzuzeichnen. Anhand des Status können Sie überprüfen, ob das Formular gesendet wurde der folgende Code:

<?php
if(isset($_POST[&#39;Go&#39;])){
    setcookie("tempcookie","",time()+30);
    header("Location:".$_SERVER[PHP_SELF]);
    exit();
}
if(isset($_COOKIE["tempcookie"])){
    setcookie("tempcookie","",0);
    echo "您已经提交过表单";
}
?>
Nach dem Login kopieren

Wenn der Client Cookies deaktiviert, hat diese Methode keine Auswirkung. Bitte beachten Sie dies.

Drittens verwenden Sie die Sitzungsverarbeitung

Durch die Verwendung der Sitzungsfunktion von PHP kann auch das wiederholte Senden von Formularen vermieden werden. Die Sitzungsvariable wird auf der Serverseite gespeichert. Wenn Sie das nächste Mal auf diese Variable zugreifen, können Sie den von Ihnen übermittelten Wert mit einer Sitzungsvariablen aufzeichnen Wenn es nicht übereinstimmt, wird davon ausgegangen, dass der Benutzer wiederholt sendet. Bitte beachten Sie den folgenden Code:

<?php
    session_start();
    //根据当前SESSION生成随机数
    $code = mt_rand(0,1000000);
    $_SESSION[&#39;code&#39;] = $code;
?>
Nach dem Login kopieren

Übergeben Sie die Zufallszahl als versteckten Wert auf dem Seitenformular. Der Code lautet wie folgt :

<input type="hidden" name="originator" value="<?=$code?>">
Nach dem Login kopieren

Im PHP der empfangenden Seite lautet der Code wie folgt:

<?php
session_start();
if(isset($_POST[&#39;originator&#39;])) {
    if($_POST[&#39;originator&#39;] == $_SESSION[&#39;code&#39;]){
        // 处理该表单的语句,省略
    }else{
        echo ‘请不要刷新本页面或重复提交表单!’;
    }
}
?>
Nach dem Login kopieren

Viertens verwenden Sie die Header-Funktion, um zu

umzuleiten

Zusätzlich zur oben genannten Methode gibt es eine einfachere Methode, nämlich wenn der Benutzer das Formular sendet und nach der serverseitigen Verarbeitung sofort auf andere Seiten umleitet.

if (isset($_POST[&#39;action&#39;]) && $_POST[&#39;action&#39;] == &#39;submitted&#39;) {
    //处理数据,如插入数据后,立即转向到其他页面
    header(&#39;location:submits_success.php&#39;);
}
Nach dem Login kopieren

Auf diese Weise kommt es, selbst wenn der Benutzer den Aktualisierungsschlüssel verwendet, nicht zu einer wiederholten Übermittlung des Formulars, da es auf eine neue Seite umgeleitet wurde und dieses Seitenskript keine Rolle mehr spielt alle übermittelten Daten.

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung zum Verhindern der wiederholten Übermittlung von Formularen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage