防止php表單提交重新整理自動重複提交

來源:互聯網
上載者:User

js 阻止重複提交


第一個是將告訴瀏覽器禁用submit按鈕的表單被提交之後,第二個是將更改按鈕的文本來給使用者一些知道發生了什麼。這是代碼添加到你的表單標記:onsubmit="document.getElementById('myButton').disabled=true;document.getElementById('myButton').value='Submitting, please wait...';"你的表單標記將類似於: 

或jquery做法

$(document).ready(function(){
  $(input:submit).click(){
      setTimeout(function(){obj.disabled=true;},100)
  };
});

PHP程式員就是這樣實現防止使用者多表單提交的;這種方法應用於大多數的瀏覽器(IE  +,FireFox、Opera、…)。

Session阻止重複提交

由於表單變數的內容由$_POST[‘name’]引用,也許在處理完表單後,直接將$_POST[‘name’]銷毀(unset())即可, 其實不然可能由於頁面預設對錶單內容進行了緩衝,所以,即使銷毀了$_POST[‘name’],重新整理後,$_POST[‘name’]還是會被賦值,一 樣有效。

可利用Session解決。首先給Session賦個值,比如400,第一次提交成功後改變Session的值,當第二次提交時去檢查這個Session的值,如果不是400,就不再處理表單中的資料。 可設定Session的有效時間?

<?php
if (isset($_POST[‘action’]) && $_POST[‘action’] == ’submitted’) {
session_start();
isset($_SESSION[‘num’]) or die (“no session”);
if ($_SESSION[‘num’]==400){

echo ‘<a href=”‘.$_SERVER[PHP_SELF] .'”>Please try again</a>';
$_SESSION[‘num’]=500;
} else {

echo “However you have submitted”;
}
} else {
session_start() or die(“session is not started”);
$_SESSION[‘num’]= 400;
?>
<form action=”<?php echo $_SERVER[‘PHP_SELF’]; ?>” method=”POST”>
Name: <input type=”text” name=”personal[name]”><br>
Email: <input type=”text” name=”personal[email]”><br>
Beer: <br>
<select multiple name=”beer[]”>
<option value=”warthog”>Warthog</option>
<option value=”guinness”>Guinness</option>
<option value=”stuttgarter”>Stuttgarter Schwabenbr</option>
</select><br>
<input type=”hidden” name=”action” value=”submitted”>
<input type=”submit” name=”submit” value=”submit me!”>
</form>
<?php
}
?>

cookie阻止重複提交

引入cookie機制來解決(這個方法不建議用,原因後面會寫到)

提交頁面代碼如下a.php代碼如下:

<form id="form1" name="form1" method="post" action="b.php">
<p>說明
<input type="text" name="titile" />
</p>
<p>
<input type="submit" name="Submit" value="提交" />
</p>
</form>
<?php
setcookie("onlypost", 't');   //設定cookie,可以帶上時間值。像有些論壇防止灌水就可以將你的一些基本資料存放到裡面。
?>

處理頁面b.php代碼如下:

<?php
if($_COOKIE['onlypost'] == 't'){
printr($COOKIE);
//處理提交的內容  如果驗證成功則處理
print "ok";
setcookie("onlypost", 'f'); //改變cooike值刪除也可以了
}
?>

利用header函數跳轉

一旦使用者點擊提交按鈕,處理完資料後跳到其他頁面

if (isset($_POST['submit'])) {
   header('location:success.php');//處理資料後,轉向到其他頁面
}

利用資料庫來添加約束

直接在資料庫裡添加唯一約束或建立唯一索引,一旦發現使用者重複提交了,直接拋出警告或者提示,
或者只處理第一次提交的資料,這是最直接有效方法,要求前期的資料庫設計和架構要考慮周全

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.