回答
比方说,你要检查,如果输入的用户名已经存在。你可以使用通常的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