2010-04-06 199 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