Nachdruck von: http://www.hlmblog.com/183.html
Beim Absenden des Formulars kann es sein, dass die Seite aufgrund der Netzwerkgeschwindigkeit usw. plötzlich langsam geladen wird und der Benutzer wiederholt auf klickt Wenn Sie auf die Schaltfläche „Senden“ klicken, werden mehrere Daten in der Datenbank generiert, was zu unkontrollierbaren Situationen führt.
Die folgende Situation führt beispielsweise 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 wiederholten Formularübermittlungen führt.
Formulare mithilfe des Browserverlaufs erneut senden.
Doppelte HTTP-Anfragen vom Browser.
Die Webseite wurde böswillig aktualisiert.
Es gibt mehrere Lösungen:
Erstens: Verwenden Sie js, um die Schaltfläche so einzustellen, dass sie nach dem Klicken grau wird
$(document).ready(function(){ $(input:submit).click(){ setTimeout(function(){obj.disabled=true;},100) }; });
Zweitens: Sitzung verwenden
Die Sitzung (das Tag, das beim Anfordern des Formulars generiert wird) wird im ausgeblendeten Feld des Formulars gespeichert.
Verwenden Sie diese Methode, um nach dem Empfang der Formulardaten zu überprüfen, ob der Flag-Wert vorhanden ist, löschen Sie ihn zuerst und verarbeiten Sie die Daten dann. Wenn er nicht vorhanden ist, bedeutet dies, dass er übermittelt wurde. Diese Übermittlung wird ignoriert .
//服务端生成随机数存入session, 分配至表单页 $data['sess_id'] = $_SESSION['sid'] = mt_rand(1000, 9999); $this->load->view('form', $data); //表单页隐藏域存放此session值 <input type="hidden" name="sid" value="<?=$sess_id; ?>"> //处理 if($_POST['sid'] != '' && $_POST['sid'] == $_SESSION['sid']) { unset($_SESSION['sid']); echo '处理数据'; } else { echo '已提交过表单'; }
Drei: Verwendung von Cookies
Das Prinzip ähnelt dem der Sitzung, aber sobald der Browser des Benutzers Cookies deaktiviert, wird 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: Verwenden Sie die Header-Funktion zum 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');//处理数据后,转向到其他页面 }
Fünftens: Verwenden Sie die Datenbank, um Einschränkungen hinzuzufügen
Fügen Sie direkt eindeutige Einschränkungen hinzu oder erstellen Sie eindeutige Indizes in der Datenbank. Sobald festgestellt wird, dass der Benutzer wiederholt übermittelt hat, wird direkt eine Warnung oder Eingabeaufforderung ausgegeben,
oder Es werden nur die ersten übermittelten Daten verarbeitet. Eine direkte und effektive Methode erfordert eine sorgfältige Prüfung des frühen Datenbankdesigns
Das Obige stellt PHP-Methoden zur Lösung und Vermeidung wiederholter Übermittlung von Formularformularen vor, einschließlich relevanter Aspekte. Ich hoffe, dass es für Freunde hilfreich ist, die an PHP-Tutorials interessiert sind.