Heim > Backend-Entwicklung > PHP-Tutorial > PHP-Methode zur Lösung und Vermeidung wiederholter Formularübermittlungen

PHP-Methode zur Lösung und Vermeidung wiederholter Formularübermittlungen

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-08-08 09:26:06
Original
1290 Leute haben es durchsucht

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)
  };
});
Nach dem Login kopieren

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 '已提交过表单';
}
Nach dem Login kopieren

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 "您已经提交过表单";  
}
Nach dem Login kopieren

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');//处理数据后,转向到其他页面
}
Nach dem Login kopieren

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.

Verwandte Etiketten:
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