我正在使用复选框按钮更新日历中月份中的某天的职业。

如果仅选中一个复选框,它将对其进行更新,但是如果选中多个复选框,则不会更新任何行。

这是我的代码:

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

最佳答案

首先,您应该将文字值作为预准备语句的参数传递给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);
    }
}

关于php - 使用复选框更新mysql中的多行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19642367/

10-09 18:15
查看更多