我正在尝试检查数据库中的重复项,但不知何故它无法正常工作。 在我的表单中,用户可以选择多个复选框,在他们发送之后,由于隐藏字段,他们的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旁注:我知道我应该使用准备好的陈述,但暂时没有问题。
答案 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,因此只会检查一个。
示例:我的表格中有food
和cheese
,我正在检查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);