我正在使用复选框按钮更新我日历中每天的占用情况。
如果我只检查一个复选框,则更新它,但如果我选中多个复选框,则不会更新任何行。
这是我的代码:
$query = mysqli_query($con, "SELECT * FROM koledar");
while ($vsidnevi = mysqli_fetch_assoc($query)) {
$dnevi = [$vsidnevi['dan']];
foreach ($dnevi as $dan) {
if ($vsidnevi['zasedenost']==0) {
echo '<label class="btn btn-primary">';
echo '<input type="checkbox" name="miha" value="' . $dan . '" data-toggle="button">' . $dan;
echo '</label>';
} elseif ($vsidnevi['zasedenost']==1) {
echo '<label class="btn btn-primary active disabled">';
echo '<input type="checkbox" name="miha" value="' . $dan . '" data-toggle="button">' . $dan;
echo '</label>';
}
}
}
和
if (isset($_GET['dodaj']) && $_GET['dodaj']=="true") {
if(isset($_POST['miha'])) {
$daen = $_POST['miha'];
$dodaj = mysqli_query($con, "UPDATE koledar SET zasedenost=1 WHERE dan=" . $daen . "");
}
}
答案 0 :(得分:0)
首先,您应该将您的文字值作为参数传递给MySQL作为预准备语句(以防止SQL注入攻击)。
提交多个值时,$_POST['miha']
将是您必须循环的数组:
if (isset($_GET['dodaj']) && $_GET['dodaj']=="true") {
if(isset($_POST['miha'])) {
$dodaj = mysqli_prepare($con, '
UPDATE koledar
SET zasedenost=1
WHERE dan=?
');
mysqli_stmt_bind_param($dodaj, 's', $daen);
foreach ($_POST['miha'] as $daen) {
mysqli_stmt_execute($dodaj);
}
}
}
或者使用IN ()
:
if (isset($_GET['dodaj']) && $_GET['dodaj']=="true") {
if(isset($_POST['miha'])) {
$inq = implode(',', array_fill(0, count($_POST['miha']), '?'));
$dodaj = mysqli_prepare($con, "
UPDATE koledar
SET zasedenost=1
WHERE dan IN ($inq)
");
call_user_func_array('mysqli_stmt_bind_param', array_merge(
array(
$dodaj,
str_repeat('s', count($_POST['miha']))
),
$_POST['miha']
));
mysqli_stmt_execute($dodaj);
}
}