0
<form method="POST" action="<?php $_SERVER['PHP_SELF']; ?>">
    <table border="1" cellpadding="4">
        <tr>
            <th>Id</th>
            <th>Name</th>

        </tr>
        <?php
        include('connect.php');
        $getQuery = "SELECT id,username,admin FROM tutorial_users ORDER BY id ASC";
        $getResult = mysql_query($getQuery) or die("Query not executed");
        while (list($id, $userName, $admin) = mysql_fetch_row($getResult)) {
            ?>
            <?php
            $checked = ($admin == 1) ? 'checked="checked"' : '';
            ?>
            <tr align="center">
                <td><?php echo $id; ?></td>
                <td><?php echo $userName; ?></td>
                <td><?php echo "<input type='checkbox' name='admin[]' value='$id' $checked>"; ?></td>
            <?php } ?>
        <tr>
    </table>
    <p>
        <input type="submit" name="submit" value="Update Role">
    </p>
</form>
<?php
$updated = FALSE;
if (isset($_POST['submit'])) {
    $admin = $_POST['admin'];
    $admin = join(",", $admin);
    $admin = "(" . $admin . ")";
    $defaultQuery = "UPDATE tutorial_users SET admin=0";
    $defaultResult = mysql_query($defaultQuery);
    $upQuery = "UPDATE tutorial_users SET admin=1 WHERE id IN $admin";
    echo $upQuery;
    $upResult = mysql_query($upQuery);
    $updated = TRUE;
}
?>

上記のコードでは、2 つの質問があります。

  1. すべてのチェックボックスをオフにして、送信を押すとundefined index $admin、どうすれば修正できますか?

    少なくとも 1 つのボックスをチェックし、値を POST 配列に渡すと、正常に動作します。

  2. 第二に、これが結果を達成するための良いアプローチなのか、それとも他の方法があるのか​​ を知りたいです。個人的には、1000 件のレコードがあると、2 つのクエリを 1 つずつ更新するのに時間がかかるため、気分が悪いです。

結果: 私が望むのは、チェックされたボックスの値が 1 で、チェックされていないボックスが 0 であるという非常に単純なものです。

4

3 に答える 3