PHP SQL:如果选中复选框,则更新多行的值

时间:2018-05-17 10:58:49

标签: php sql database

我正在尝试更新选中该复选框的每一行中的状态列,来自' Ikke Betalt'与Betalt'同时使用提交按钮。基本上它是一个活动的参与者名单,我希望能够检查'一旦他们付款,他们就会离开。

见表:

我的代码

<form method="post">
<table>
    <thead>
        <tr>
            <td>Betalt?</td>
            <td>Id</td>
            <td>Navn</td>
            <td>Nummer</td>
            <td>Email</td>
            <td>Antal Gæster</td>
            <td>Dato</td>
            <td>Status</td>
        </tr>
    </thead>
    <tbody>
        <?php include 'deltagere.php'; ?>
    </tbody>
</table>
<p><button name="submit" type="submit" value="submit">Opdater</button></p>
</form>

$sql = "SELECT * FROM t_launch ORDER BY launch_date ASC";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {

// Output data of each row
while($row = mysqli_fetch_assoc($result)) {

    echo '<tr>' . PHP_EOL;
    echo '<td><input type="checkbox" name="betaling[]" value="' .$row["launch_id"]. '"></td>' . PHP_EOL;
    echo '<td>' . $row["launch_id"] . '</td>' . PHP_EOL;
    echo '<td>' . $row["launch_firstname"] . ' ' . $row["launch_lastname"] . '</td>' . PHP_EOL;
    echo '<td>' . $row["launch_number"] . '</td>' . PHP_EOL;
    echo '<td>' . $row["launch_email"] . '</td>' . PHP_EOL;
    echo '<td>' . $row["launch_guests"] . '</td>' . PHP_EOL;
    echo '<td>' . $row["launch_date"] . '</td>' . PHP_EOL;
    echo '<td>' . $row["launch_status"] . '</td>' . PHP_EOL;
    echo '</tr>' . PHP_EOL;
    }
}

else {
echo "0 results";
}

foreach ($_POST['betaling'] as $launch_id) {
mysql_query("UPDATE `t_launch` SET `launch_status` = 'Betalt' WHERE `launch_id` = '$betaling'");
}

php的第一部分很好地列出了表格,但是在搜索了类似情况的几个小时后,我还没有能够破解第二个UPDATE部分。

我已使用静态ID测试了我的数据库中的SQL UPDATE调用,并确认它可以正常工作,但目前该页面只是更新而不更新任何内容。

解决

在与有一些PHP经验的朋友交谈后,我们找到了解决方案:

if(isset($_POST['checkednames'])) {
    $ids = join(', ', $_POST['checkednames']);
    mysqli_query($conn, "UPDATE `t_launch` SET `launch_status` = 'Betalt' WHERE `launch_id` IN ($ids)") or die(mysql_error());
    }

我们必须重新格式化数组以满足sql的要求。

注意 - 我们还修复了一些关于mysql和mysqli的语法错误(我把它们混淆了)

2 个答案:

答案 0 :(得分:0)

查看代码,您似乎在更新函数中使用了错误的变量名称。当你应该使用$ launch_id

时,你使用$ betaling

编辑:

只是想指出不推荐使用mysql_query,所以你可能想看看pdo或Mysqli。

此外,您可以使用“WHERE launch_id IN $ launch-ids”编辑一个查询中的所有行。 $ launchids应该是逗号分隔的括号之间的ID列表。

答案 1 :(得分:0)

尝试分离表单显示及其逻辑过程。

例如:将表单更改为<form method="post" action="another_file.php">

然后将处理全局$_POST变量的脚本剪切为新文件。它应该是:

<?php
if (isset($_POST) && isset($_POST['betaling']) && !empty($_POST['betaling']) {
  foreach ($_POST['betaling'] as $launch_id) {
    mysql_query("UPDATE `t_launch` SET `launch_status` = 'Betalt' WHERE `launch_id` = '$betaling'");
  }
}

然后,一旦提交了按钮,就会执行sql查询。

希望得到这个帮助。

更新:

$betaling更改为$launch_id,您没有$betaling var。