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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (102)

我正在尝试更新选中复选框的每一行中的状态列,从'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的语法错误(我把它们混淆了)

提问于
用户回答回答于

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

编辑:

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

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

用户回答回答于

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

例如:将表单更改为 <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变种。

扫码关注云+社区

领取腾讯云代金券