防止MySQL中的多个数据条目

时间:2011-02-25 01:29:31

标签: php mysql forms

所以这是交易。我到处浏览,所有其他技术都与刷新浏览器有关,以及防止php页面重新提交帖子数据的方法。我是新手(显然:p)但无论如何,我认为我的问题很简单。我只想要一个方法,可能是一个if else语句来检查post数据条目,以及我的表中是否已经匹配,而不是执行查询。我不担心查询表的所有结果,因为我只怀疑这个表将有50-60个条目。

这是处理表单提交的php页面:

$firstName = $_POST['firstName'];
$lastName = $_POST['lastName'];
$email = $_POST['email'];
$city = $_POST['city'];
$state = $_POST['state'];

$submitDate = date("Y-m-d");

mysql_connect ("localhost", "abc", "123") or die ('Error: ' . mysql_error());
mysql_select_db ("members");

$query = "INSERT INTO persons (ID, firstName, lastName, email, city, state, submitDate)VALUES (
'NULL',
'".$firstName."',
'".$lastName."',
'".$email."',
'".$city."',
'".$state."',
'".$submitDate."'
)";

mysql_query($query) or die ('Error Updating database');

echo "Database Updated With: " .$firstName ." " .$lastName ." " .$email ." " .$city ." " .$state; 

mysql_close($con);

很抱歉,似乎无法让我的php使用这些代码括号正确格式化。无论如何。只是为了重新迭代,寻找可能基于名字和姓氏的方法。如果那些已经存在,那么就不允许提交数据。我已经尝试了一些if if语句,但我认为我没有得到将结果与我的查询进行比较的概念。我希望这一切都有道理!!!

6 个答案:

答案 0 :(得分:3)

您可以使用INSERT IGNORE INTO ...让MySQL处理它。

$query = "INSERT IGNORE INTO persons (ID, firstName, lastName, email, city, state, submitDate) VALUES (
'NULL',
'".$firstName."',
'".$lastName."',
'".$email."',
'".$city."',
'".$state."',
'".$submitDate."'
)";

答案 1 :(得分:2)

我建议在你想要唯一的列上添加一个UNIQUE索引。

答案 2 :(得分:2)

我也有这个问题。基本上我所做的是在插入之前,对符合条件的条件进行选择,并检查它是否返回;如果不是,我们就可以进入。

$query = "SELECT COUNT(id) AS mycount FROM persons WHERE firstName = '".$firstnName."' AND lastName = '".$lastName."'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
if($row['mycount'] == 0) {
    //Do insert
}

答案 3 :(得分:1)

您的问题只是刷新页面重新发送POST数据吗?防止这种情况的几乎标准方法是在处理表单数据后重定向浏览器,如下所示:

header('Location: ' . $_SERVER['PHP_SELF']);

请注意,在将任何输出发送到浏览器之前必须更改标题,因此这应该高于您的doctype,并确保之前没有空格。

答案 4 :(得分:1)

这样做的一种方法是确保您的表具有适当的主键集(至少firstnamelastname),然后只是尝试插入并查看它是否在重复时失败。为此,您可以使用mysql_error()功能检查错误消息。

答案 5 :(得分:1)

您可以使用这两个字段对数据库执行选择以检查行是否已存在,但如果这是需要唯一的,则MySQL表中的这两列上也应该有唯一索引。 / p>