回答
比方說,你要檢查,如果輸入的用戶名已經存在。你可以使用通常的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之一,也是一個好主意。所以,你就可以用裝有輸入的數據的所有字段顯示回來 - 很好的可用性改進
最簡單的方法是讓一個隱藏的字段ID保存表中主鍵的值。如果爲空,這將自動錶示數據是新的並需要插入。否則,這取決於你的具體情況,如果你提供更多的細節,我可以嘗試給你更詳細的迴應。
您將需要使用您的數據對數據庫進行查詢並查看是否返回任何結果。如果他們是,那麼你知道它是重複的。例如:
$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);
}
必須有另一條線驗證和查詢構建之間 - 查詢的數據準備。 – 2010-04-06 18:25:54
顯然驗證函數會進行過濾等。爲了簡潔起見,我只是添加了validate()。 – dkinzer 2010-04-06 18:45:48
但它不應該做任何「過濾」,無論你是什麼意思。 SQL數據準備是獨特的操作,不應該與其他任何混合。因爲它綁定到sql查詢,而不是數據驗證。 – 2010-04-06 18:59:04
這要看情況。如果你的數據庫有主鍵,唯一約束等,那麼數據庫根本不會插入數據,你可以嘗試捕獲任何錯誤。否則,您必須根據用戶的信息查詢數據,並將他們的新信息與他們的舊信息進行比較。
如果你只是想避免從形成雙提交問題然後做一個Redirect after POST
這裏是頁與窗體模式和它的處理程序:
<?
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>
非常感謝你! – input 2010-04-06 21:49:31
- 1. 驗證'價格'(雙)表單輸入PHP
- 2. PHP驗證輸入表格
- 3. 驗證Magento表單輸入
- 4. PHP輸入驗證
- 5. Laravel 3驗證單個輸入表單
- 6. PHP表單驗證
- 7. PHP表單驗證
- 8. PHP表單驗證
- 9. 表單驗證PHP
- 10. PHP文件輸入驗證
- 11. PHP後輸入驗證
- 12. PHP驗證輸入類型
- 13. 在php中輸入驗證
- 14. 使用Javascript驗證輸入表單
- 15. jQuery的輸入表單驗證
- 16. 輸入,阻止整個表單驗證
- 17. CodeIgniter:驗證表單不重置輸入
- 18. Angularjs:表單驗證和輸入指令
- 19. 驗證表單文本輸入
- 20. Jquery輸入表單默認值驗證
- 21. 使用jQuery輸入表單驗證
- 22. 如何驗證表單的輸入值
- 23. 在AngularJS中驗證表單的輸入
- 24. 表單輸入字段驗證模式
- 25. 如何驗證表單輸入和laravel
- 26. 如何驗證Symfony表單輸入MoneyType?
- 27. 驗證代碼輸入到表單
- 28. 表單輸入Revel的驗證
- 29. PHP表單驗證程序/ MySQL插入
- 30. PHP輸入驗證一個URL的單個輸入
謝謝!此代碼後,我有插入代碼。我是否假設錯誤信息會在沒有運行所有代碼的情況下退出頁面? 另外,我如何將其重定向到另一頁? – input 2010-04-06 19:07:51
你應該做「從...中選擇1」而不是「select * from ...」,因爲你真的只想知道一行是否存在,而不是從中檢索值。 – Samuel 2010-04-11 19:38:10