php表单输入验证
我有一个html页面,在其中输入数据,然后在php页面上提交并插入数据库。如何在php中验证接收到的数据是否与数据库中的数据重复php表单输入验证,php,mysql,database,validation,Php,Mysql,Database,Validation,我有一个html页面,在其中输入数据,然后在php页面上提交并插入数据库。如何在php中验证接收到的数据是否与数据库中的数据重复 非常感谢您的帮助。最简单的方法是使用隐藏字段ID保存表中主键的值。如果为空,这将自动意味着数据是新的,需要插入。否则这取决于您的具体情况,如果您提供更多详细信息,我可以尝试给您更详细的回答。最简单的方法是使用隐藏字段ID保存表中主键的值。如果为空,这将自动意味着数据是新的,需要插入。否则,这取决于您的具体情况,如果您提供更多详细信息,我可以尝试给您更详细的答复。您需要
非常感谢您的帮助。最简单的方法是使用隐藏字段ID保存表中主键的值。如果为空,这将自动意味着数据是新的,需要插入。否则这取决于您的具体情况,如果您提供更多详细信息,我可以尝试给您更详细的回答。最简单的方法是使用隐藏字段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);
}
您需要使用数据查询数据库,并查看是否返回任何结果。如果是,那么你知道这是一个复制品。例如:
$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);
}
这要视情况而定。如果您的数据库具有主键、唯一约束等,那么数据库就不会插入数据,您可以尝试捕获任何错误。否则,您必须根据用户的信息查询数据,并将其新信息与旧信息进行比较
如果您只是想避免表单的双重提交问题,那么根据具体情况进行调整。如果您的数据库具有主键、唯一约束等,那么数据库就不会插入数据,您可以尝试捕获任何错误。否则,您必须根据用户的信息查询数据,并将其新信息与旧信息进行比较
如果您只是想避免表单的双重提交问题,那么请执行一个假设您想检查输入的用户名是否已经存在。您可以使用常用的选择查询执行此操作:
$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文件中。因此,您将能够用输入的数据填充所有字段来显示它-极大的可用性改进假设您想检查输入的用户名是否已经存在。您可以使用常用的选择查询执行此操作:
$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文件中。因此,您将能够在所有字段中填充输入的数据,并将其显示出来-极大地提高了可用性以下是带有表单的页面模式及其处理程序:
<?
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>
以下是带有表单的页面架构及其处理程序:
<?
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>
在验证和查询构建之间必须有另一条线-查询的数据准备。显然,验证函数将执行过滤等操作。为了简洁起见,我刚刚添加了validate()。但它不应该执行任何“过滤”,不管你的意思是什么。sql数据准备是一项独特的操作,不应与任何其他操作混合使用。因为它绑定到sql查询,而不是数据验证。谢谢!如何显示错误消息并重新定向页面?谢谢验证和查询构建之间必须有另一条线-查询的数据准备。显然,验证函数将执行过滤等操作。为了简洁起见,我刚刚添加了validate()。但它不应该执行任何“过滤”,不管您的意思是什么。sql数据准备是一项独特的操作,不应与任何其他操作混合使用。因为它绑定到sql查询,而不是数据验证。谢谢!如何显示错误消息并重新定向页面?谢谢谢谢你!在这个代码之后,我有了插入代码。我是否假设错误消息将在不运行所有代码的情况下退出页面?另外,如何将其重定向到另一个页面?您应该执行“从…选择1”而不是“从…选择*因为您只想知道行是否存在,而不是从中检索值。谢谢!在这个代码之后,我有了插入代码。我是否假设错误消息将在不运行所有代码的情况下退出页面?另外,如何将其重定向到另一个页面?您应该执行“从…”中选择1”而不是“从…”中选择*。