使用复选框更新mysql中的多行?

时间:2013-10-28 18:28:28

标签: php mysql

我正在使用复选框按钮更新我日历中每天的占用情况。

如果我只检查一个复选框,则更新它,但如果我选中多个复选框,则不会更新任何行。

这是我的代码:

$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 . "");
    } 
}

1 个答案:

答案 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);
    } 
}