2010-04-06 232 views
0

我有一個html頁面,我在其中輸入數據,然後提交併插入數據庫中的一個php頁面。我將如何驗證在PHP中收到的數據不是數據庫中的數據的重複?php表單輸入驗證

任何幫助表示讚賞。

回答

3

比方說,你要檢查,如果輸入的用戶名已經存在。你可以使用通常的SELECT查詢來完成:

$name = mysql_real_escape_string($_POST['name']); 
$sql = "SELECT * FROM table WHERE name = '$name'"; 
$res = mysql_query($query, $connection); 
if (mysql_num_rows($res) > 0) $error = "User already exists."; 

在php文件中,而不是html之一,也是一個好主意。所以,你就可以用裝有輸入的數據的所有字段顯示回來 - 很好的可用性改進

+0

謝謝!此代碼後,我有插入代碼。我是否假設錯誤信息會在沒有運行所有代碼的情況下退出頁面? 另外,我如何將其重定向到另一頁? – input 2010-04-06 19:07:51

+0

你應該做「從...中選擇1」而不是「select * from ...」,因爲你真的只想知道一行是否存在,而不是從中檢索值。 – Samuel 2010-04-11 19:38:10

0

最簡單的方法是讓一個隱藏的字段ID保存表中主鍵的值。如果爲空,這將自動錶示數據是新的並需要插入。否則,這取決於你的具體情況,如果你提供更多的細節,我可以嘗試給你更詳細的迴應。

1

您將需要使用您的數據對數據庫進行查詢並查看是否返回任何結果。如果他們是,那麼你知道它是重複的。例如:

$data = validate($_POST['data']); 
$query = "select * from `tablename` where `fieldname` = $data limit 1;"; 

$result = mysql_query($query, $connection); 

//now check that the number of rows is 0 

if (mysql_num_rows($result) == 0) { 

//insert the data 
insert($data); 

} 
+0

必須有另一條線驗證和查詢構建之間 - 查詢的數據準備。 – 2010-04-06 18:25:54

+0

顯然驗證函數會進行過濾等。爲了簡潔起見,我只是添加了validate()。 – dkinzer 2010-04-06 18:45:48

+0

但它不應該做任何「過濾」,無論你是什麼意思。 SQL數據準備是獨特的操作,不應該與其他任何混合。因爲它綁定到sql查詢,而不是數據驗證。 – 2010-04-06 18:59:04

1

這要看情況。如果你的數據庫有主鍵,唯一約束等,那麼數據庫根本不會插入數據,你可以嘗試捕獲任何錯誤。否則,您必須根據用戶的信息查詢數據,並將他們的新信息與他們的舊信息進行比較。

如果你只是想避免從形成雙提交問題然後做一個Redirect after POST

0

這裏是頁與窗體模式和它的處理程序:

<? 
if ($_SERVER['REQUEST_METHOD']=='POST') { 
    //validation part 
    $err=''; 
    if (!$name) $err.="You must enter name<br>"; 
    $name = mysql_real_escape_string($_POST['name']); 
    $sql = "SELECT * FROM table WHERE name = '$name'"; 
    $res = mysql_query($query, $connection); 
    if (mysql_num_rows($res) > 0) $err. = "User already exists."; 
    // etc 

    // check if there was no errors: 
    if (!$err) { 
    //save to the database 
    mysql-query(...); 
    //and redirect 
    Header("Location: ".$_SERVER['PHP_SELF']); 
    exit; 
    } else { 
    foreach($_POST as $key => $value) $_POST[$key] = htmlspecialchars($value); 
    } 
} else { 
    $_POST['name'] = $_POST['email'] = $_POST['notes'] =''; 
} 
//here goes the form, with error message, if any. 
?> 
<html> 
<head></head> 
<body> 
<? if ($err) echo '<font color=red><b>'.$err.'</b></font>'; ?> 
<form action="<? echo $_SERVER['PHP_SELF'] ?>" method="POST"><br> 
Name: <input type="text" name="name" value="<? echo $_POST['name'] ?>"><br> 
Email: <input type="text" name="email" value="<? echo $_POST['email'] ?>"><br> 
Notes: <textarea rows="3" cols="30" name="notes"><? echo $_POST['notes'] ?></textarea><br> 
<input type="submit" name="submit"> 
</form> 
</body> 
</html> 
+0

非常感謝你! – input 2010-04-06 21:49:31