PHPは、重複送信フォームコメントを防ぎます

おそらくスピード、または悪意のあるWebページの更新の制限を無視することはできませんので、ユーザは、繰り返しにデータベースに同じレコードを結果として、フォームを送信する際に、連続使用者が存在する可能性があるので、繰り返しフォームを送信できないようにされ、送信ボタンをクリックしますか、悪意のある攻撃者は、その後、我々はそのような変更やトラブルに巻き込まれるデータベースにデータを追加するなど、データの提出後に対処する、データを提出します。

 

それでは、どのように起こるの重複フォームの送信でこの現象を回避していますか?重複して提出フォームを防止するための多くの方法は、いくつかの一般的な方法のPHPの要約で見てみましょうを制限する必要があります。 ターンテーブルのはじめにダイレクトドライブモータ〔ターンテーブルのダイレクトドライブモーター]

まず、最初に正面から制限を行います。

フロントエンドJavaScriptが複数のクリックは、送信ボタンを防止すること無効にすると、この単純な方法の後、ボタンをクリックするだけで無効になっていますが、欠点は、ユーザーがJavaScriptを無効にしている場合、スクリプトが無効であることです。

以下の例では、我々は重複したフォーム送信の問題を処理するためにそれを使用して言及したお客様は、以下のコードを参照してください。

1

2

3

4

<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='正在提交,请等待...';document.register.cont.disabled=true;document.the_form.submit();">

</form>

ユーザーが「送信」ボタンをクリックすると、ボタンがグレーの状態になり、

そこの方法ですが、また、JavaScript関数の使用は、しかしOnSubmitの()メソッドを使用して、フォームを提出した場合は、すぐにポップアップしますダイアログを、次のように:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<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>

ユーザーがボタンを「提出」をクリックしている場合は、上記の例では、スクリプトが自動的にユーザーが持っていることを示す、submitcountゼロ以外の値を決定するために、ユーザが再び提出しようとするカナダ1、スクリプト変数から現在の状態とsubmitcount変数を記録します回避の重複に提出してフォームを送信します。

第二には、クッキーを使用して処理します

記録状態を使用してクッキーフォーム送信は、フォームが送信されているかどうかを確認することができ、その状態に応じて、以下のコードを参照してください。

1

2

3

4

5

6

7

8

9

10

11

<?php

if(isset($_POST['Go'])){

    setcookie("tempcookie","",time()+30);

    header("Location:".$_SERVER[PHP_SELF]);

    exit();

}

if(isset($_COOKIE["tempcookie"])){

    setcookie("tempcookie","",0);

    echo "您已经提交过表单";

}

?>

クライアントがクッキー無効になっている場合は、この方法は、この点には何の影響、してください注意を払っていません。

第三に、セッションハンドリングの使用

使用PHPのセッションますが、また、重複がフォームを送信避けるために。あなたはセッション変数を持つフォーム送信の値を記録することができますので、割り当てられている実行しているPHPのセッション変数の過程で、サーバー側に保存されたセッションは、変更することができます次回は、この変数を訪問し、新しい値を取得します。、それは考慮されていない場合再提出ユーザーは、次のコードを参照してくださいされています。

1

2

3

4

5

6

<?php

    session_start();

    //根据当前SESSION生成随机数

    $code = mt_rand(0,1000000);

    $_SESSION['code'] = $code;

?>

在页面表单上将随机数作为隐藏值进行传递,代码如下:

1

<input type="hidden" name="originator" value="<?=$code?>">

在接收页面的PHP代码如下:

1

2

3

4

5

6

7

8

9

10

<?php

session_start();

if(isset($_POST['originator'])) {

    if($_POST['originator'] == $_SESSION['code']){

        // 处理该表单的语句,省略

    }else{

        echo ‘请不要刷新本页面或重复提交表单!’;

    }

}

?>

第四、使用header函数转向

除了上面的方法之外,还有一个更简单的方法,那就是当用户提交表单,服务器端处理后立即转向其他的页面,代码如下所示。

1

2

3

4

if (isset($_POST['action']) && $_POST['action'] == 'submitted') {

    //处理数据,如插入数据后,立即转向到其他页面

    header('location:submits_success.php');

}

这样,即使用户使用刷新键,也不会导致表单的重复提交,因为已经转向新的页面,而这个页面脚本已经不理会任何提交的数据了。

以上就是php防止表单重复提交详解的详细内容

おすすめ

転載: www.cnblogs.com/furuihua/p/12133826.html
おすすめ