php表单输入验证

php表单输入验证,php,mysql,database,validation,Php,Mysql,Database,Validation,我有一个html页面,在其中输入数据,然后在php页面上提交并插入数据库。如何在php中验证接收到的数据是否与数据库中的数据重复 非常感谢您的帮助。最简单的方法是使用隐藏字段ID保存表中主键的值。如果为空,这将自动意味着数据是新的,需要插入。否则这取决于您的具体情况,如果您提供更多详细信息,我可以尝试给您更详细的回答。最简单的方法是使用隐藏字段ID保存表中主键的值。如果为空,这将自动意味着数据是新的,需要插入。否则,这取决于您的具体情况,如果您提供更多详细信息,我可以尝试给您更详细的答复。您需要

我有一个html页面,在其中输入数据,然后在php页面上提交并插入数据库。如何在php中验证接收到的数据是否与数据库中的数据重复


非常感谢您的帮助。

最简单的方法是使用隐藏字段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”而不是“从…”中选择*。