繁体   English   中英

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

[英]Updating multiple rows in mysql with checkboxes?

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

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

这是我的代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM