2016-02-15 87 views
0

我發現了一些答案,如this good one(它使用兩個文件一個用於表單和其他處理),還有一些使用外部資源(如數據庫或簡單文件)的其他答案。防止多次提交相同的表格

我在找的是防止同一個表單的多重提交,尤其是當表單和php代碼在同一個文件中而且沒有使用外部文件時。

這是我曾嘗試:

<?php //fone.php 
if (session_status() == PHP_SESSION_NONE) { 
    session_start(); 
} 

if(isset($_SESSION['token'])) 
    $_SESSION['prv_token']=$_SESSION['token']; 

$_SESSION['token']=md5(uniqid()); 
?> 

<html> 
    <head><meta charset="utf-8"><title>TEST</title></head> 
    <body> 
     <?php 
      if($_SERVER['REQUEST_METHOD']=='POST' && $_POST['token']==$_SESSION['prv_token']){ 
       echo "<p>Form Submited</p>"; 
      } 
     ?> 
     <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>"> 
      <input type="hidden" name="token" value="<?php echo $_SESSION['token'];?>"> 
      Name : <input type="text" name="name"><br> 
      Age : <input type="text" name="age"><br> 
      <input type="submit" name="submit"> 
     </form> 
    </body> 
</htmL> 

該解決方案對我的作品,但代碼休息,如果我在其他文件中使用$_SESSION['token']

+2

所以......你的問題是什麼? – Glubus

+0

@Glubus防止同一表單的多個提交,在表單的情況下,並且php代碼在同一個文件中...並且不使用外部文件 – BBeta

+0

就像你在你的問題中陳述的那樣,你已經實現了這一點。你是否要求替代你自己的解決方案?這真的不是那個地方。 – Glubus

回答

1

如果您正在使用會話,它將是所有瀏覽器頁面的共同點。所以你需要使用不同的會話名稱

Eg: $_SESSION['your_page_name_token'] 
+0

是的,似乎使用不同的會話名稱是解決方案。如何檢查$ _POST解決問題?! – BBeta

+0

是的。我不應該建議,因爲我不知道整個代碼! – Ruby

+0

Brosef在第一次提交後只設置了一個friggin cookie。然後每個頁面加載檢查帖子是否已經被創建。 – Glubus