检查MySQL中的重复项

时间:2014-01-05 20:35:57

标签: php mysql

我正在尝试检查数据库中的重复项,但不知何故它无法正常工作。 在我的表单中,用户可以选择多个复选框,在他们发送之后,由于隐藏字段,他们的userID随附它。我想检查数据库中是否已存在其UserID和任何复选框的组合。

我有以下代码:(当然已经建立了数据库连接。

<?php
$UserID = $_POST['UserID'];
$Datum = $_POST['Datum'];

$check = mysql_query("SELECT `UserID`, `Datum` FROM `Werkdagen` WHERE `userID`='$UserID' AND `Datum`='$Datum' LIMIT 1");

if (mysql_num_rows($check)>0)
{
     $error = "<span class='error'>Je staat hebt je al opgegeven voor één van deze werkdagen!</span>";
} else {
     foreach ($_POST['Datum'] as $date){
            mysql_query("INSERT INTO `Werkdagen` (`UserID`, `Datum`) VALUES ('$UserID', '$date')");         
            $success = "<span class='success'>Je werkdagen zijn opgeslagen!</span>";}
            }
?>  

我在这里做错了什么?

Litte旁注:我知道我应该使用准备好的陈述,但暂时没有问题。

4 个答案:

答案 0 :(得分:0)

如果您想检查是否已输入,实际检索数据毫无意义。

SELECT COUNT(UserID) counted
FROM   Werkdagen
WHERE  userID =  $user_id 
AND    Datum  = '$datum'

请确保将日期保存为时间戳或日期时间。获取此结果时,可以检查数组中的“计数”以查看是否存在匹配(注意**:在检查之前转换为int,或者在if语句中始终为true)。

哦,请确保你逃脱所有数据(这就是为什么准备好的陈述很好!)。您不希望员工删除或截断您的数据;)

**有关类型的更多信息: http://www.php.net/manual/en/types.comparisons.php

如果直接将“1”或“0”强制转换为bool,则两者最终都将为“true”,因为字符串已填充。如果先将它们转换为int,则将它们分别转换为1和0。 1 == true和0 == false其中“1”== true和“0”== true。

答案 1 :(得分:0)

我的代码出了什么问题?

您在$check上设置了 LIMIT 为1,因此只会检查一个。

示例:我的表格中有foodcheese,我正在检查cheese,但限制为 1. 我只会在这种情况下,请food检查cheese

如何解决?

更改:

$check = mysql_query("SELECT `UserID`, `Datum` FROM `Werkdagen` 
WHERE `userID`='$UserID' AND `Datum`='$Datum' LIMIT 1");

为:

$check = mysql_query("SELECT `UserID`, `Datum` 
FROM `Werkdagen` WHERE `userID`='$UserID' AND `Datum`='$Datum'");

那是不可能的!很棒,但它仍然发布重复

我怀疑它会出现这种情况,但如果确实如此,请确保所有字段匹配(例如:日期可能不相同(基准表示日期))。

答案 2 :(得分:0)

可能这可能会有所帮助

$check = mysql_query("SELECT `UserID`, `Datum` FROM `Werkdagen` WHERE `userID`='$UserID' AND `Datum` IN ('".implode(",",$Datum )."'");

答案 3 :(得分:0)

你的$ Datum是数组,如果你回显$ Datum,你什么也看不见,因为你需要访问每个元素。 我想的是下一步使用:

$begin_query = "SELECT `UserID`, `Datum` FROM `Werkdagen` WHERE `userID`='$UserID' AND `Datum` IN (";

foreach ( $Datum as $key=>$value)
{
$begin_query =$begin_query."'".$key."'"; //or $value, I do not know how they are stored
}
$begin_query = $begin_query.") LIMIT 1";
$check = mysql_query($begin_query);