2013-01-22 54 views
0

我的生活中最難過的時間是在提交給自己的表單中不理解POST REDIRECT GET模式的基礎知識。 主要的問題是當用戶返回或刷新頁面時,我在數據庫中得到重複條目 所以基本上我有一個包含兩個表單的頁面,每個表單都提交給自己。 我有一些關於PRG模式實現的代碼,但它似乎並沒有工作。 我會發佈一個簡短的例子,我將嘗試解釋我在做什麼。POST REDIRECT GET在表單中提交數據庫中的重複條目

<?php 
    function saveUser1($UserName_1) 
    { 
    include 'db_conn.php'; 
    //MySQL code etc...  
     if($result) return 1; //registro correcto 
     else return -2; //error 
     header('Location: samepage.php' , true, 303); 
    exit(); 
    } 

    function saveUser2($UserName_2) 
    { 
    include 'db_conn.php'; 
    //MySQL code etc...  
     if($result) return 1; //registro correcto 
     else return -2; //error 
     header('Location: samepage.php' , true, 303); 
    exit(); 
    } 

    $error1 = 0; 
    $error2 = 0; 

    if(isset($_POST['userForm1'])) 
    { 
     $error1 = saveUser1(clean_form($_POST['txtUserName_1']); 
    } 
    if(isset($_POST['userForm2'])) 
    { 
     $error2 = saveUser2(clean_form($_POST['txtUserName_2']); 
    } 
    ?> 

現在

<form action="" name="userForm1" method="POST"> 
    <label for="data">Some Data</label> 
    <input type="text" value="some test data to post" name="txtUserName_1" id="txtUserName_1" /><br /> 
    <input type="submit" name="userForm1" id="userForm1"/> 
    </form> 

    <form action="" name="userForm2" method="POST"> 
    <label for="data">Some Data</label> 
    <input type="text" value="some test data to post" name="txtUserName_2" id="txtUserName_2" /><br /> 
    <input type="submit" name="userForm2" id="userForm2"/> 
    </form> 

我剛剛創建的例子就是我試圖完成這個代碼,但我還沒有與PGR模式任何運氣HTML。 你能告訴我錯誤在哪裏嗎?或者將我(不開玩笑)轉向一些關於這個主題的好教程? 我一直在尋找很多問題/答案,博客,但我找不到任何真正可靠的東西(從我的角度來看)。 在此先感謝。

+0

我種解決的,如果有人尋找同樣anwser,你需要創建第二個PHP頁面,你會將數據插入到數據庫中,然後,您將把用戶重定向到表單所在的初始頁面。 –

回答

0

以下是sampl e代碼,如果你想嘗試。

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
    Name: <input type="text" name="name"> 
    Email: <input type="text" name="email"> 
    Password: <input type="password" name="password"> 
    <input type="submit" value="submit" name="send"> 
</form> 

PHP代碼和的common.php是數據庫連接文件

<?php 
    require_once "common.php"; 

    if(isset($_REQUEST['send'])) 
    { 
     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $password = $_POST['password']; 

     $check = "SELECT * FROM user WHERE name = '".$name."' AND email = '".$email."' AND password = '".$password."'"; 
     $check_result = mysql_query($check) or die(mysql_error()); 

     if(mysql_num_rows($check_result) > 0) 
     { 
     header('Location : post.php'); 
     } 
     else 
     { 
     $sql = "INSERT INTO user (name,email,password) VALUES ('$name','$email','$password')"; 
     $result = mysql_query($sql) or die(mysql_error()); 
     } 
    }  
?> 
+0

完美,我需要,謝謝! –

+0

永遠歡迎。如果可以,我很樂意幫助任何人。 –

0

而不是檢查表單名稱本身檢查表單中的唯一字段。例如。如果(isset($ _ POST [txtUserName_1'']))

表單名稱本身在帖子中不存在。

要查看發佈內容,請嘗試:

print_r($ _ POST); 退出;

+0

如何防止將提交的信息重新發布到數據庫中? –

+0

這將是唯一的一個表單提交。我不知道爲什麼你有兩種形式/方法等,但這將使你有工作的結構 – ste

+0

但是如果我沒有弄錯,重新加載頁面將導致重新提交這個獨特的領域。 –

0

也許你必須將帖子動作設置爲同一頁面。
而你的表單不應該與你的提交按鈕具有相同的名稱(不確定)。

<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >  
<label for="data">Some Data</label> 
<input type="text" value="some test data to post" name="data" id="data" /><br /> 
<input type="submit" name="submit1" id="userForm1"/> 
</form> 

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" name="form2" method="POST"> 
<label for="data">Some Data</label> 
<input type="text" value="some test data to post" name="data" id="data" /><br /> 
<input type="submit" name="submit2" id="userForm2"/> 
</form> 

的PHP:

if(isset($_POST['submit1'])) 
{ 
    $error1 = saveUser1(clean_form($_POST['txtUserName_1']); 
} 
if(isset($_POST['submit2'])) 
{ 
    $error1 = saveUser1(clean_form($_POST['txtUserName_2']); 
} 

您可以添加一個隱藏字段用於檢查如果執行:

<input type="hidden" name="executed" value="0"/> 

那麼你可以當你執行了MySQL將其設置爲0查詢

function saveUser1($UserName_1) 
{ 
if($_POST['executed'] == 0) 
{ 
include 'db_conn.php'; 
//MySQL code etc...  
    if($result) $_POST['executed'] = 1; //registro correcto 
    header('Location: samepage.php' , true, 303); 
exit(); 
} 
} 
+0

剛剛嘗試過,它沒有工作,重新加載並獲得重複條目。 –