首页 > 解决方案 > PHP/HTML 按钮仅适用于循环中的第一个元素

问题描述

我正在学习 PHP,现在卡住了。在 while 循环中,显示所有待办事项。这些元素中的每一个都有一个删除按钮和一个检查按钮。删除按钮适用于每个元素,但检查按钮仅适用于第一个元素。检查按钮用于检查元素。按下检查按钮时,将显示一条错误消息,指出无法删除此元素。仅在第一个元素中当然不是。我找不到错误。

我怀疑索引中有问题

        <?php
        $todos = $conn->query("SELECT * FROM todos ORDER BY id DESC");
    ?>
    <div class="show-todo-section">
        <?php if($todos->rowCount() <= 0){ ?>
            <div class="todo-item">
                <div class="empty">
                    <img src="img/f.png" width="100%" />
                    <img src="img/Ellipsis.gif" width="80px">
                </div>
                
            </div>
        <?php } ?>
        <?php while($todo = $todos->fetch(PDO::FETCH_ASSOC)) { ?>
            <div class="todo-item">
 
                <form action="app/checked.php" method="POST">
                    <button class="check-box" value="<?php echo $todo['id']; ?>" name='checked' type="submit">Check</button>
                </form>

                <form action="app/delete.php" method="POST">                 
                    <button class="remove-to-do" value="<?php echo $todo['id']; ?>" name='delete' type="submit">x</button>
                </from> 

                <?php if($todo['checked']){ ?>                      
                    <h2 class="checked"><?php echo $todo['title'] ?></h2>
                <?php }else { ?>  
                    <h2><?php echo $todo['title'] ?></h2>
                <?php } ?>
                
                <small>created: <?php echo $todo['date_time'] ?></small> 
                <?php for ($i = 1; $i <= $todo['coins']; $i++) {
                    echo "<img class='coins' src='img/coin.gif' width='40px' />";
                } ?>            
                
            </div>
        <?php } ?>
    </div>

已检查的.php

<?php

 if (isset($_POST['checked'])) {
   require '../db_conn.php';

   $id = $_POST['checked'];

   if(empty($id)){
       header("Location: ../index.php?mess=errorChecked". $id);
   }else{
        
    $todos = $conn->prepare("SELECT id, checked FROM todos WHERE id=?");
    $todos->execute([$id]);

    $todo = $todos->fetch();
    $uId = $todo['id'];
    $checked = $todo['checked'];

    $uChecked = $checked ? 0 : 1;

    $res = $conn->query("UPDATE todos SET checked=$uChecked WHERE id=$uId");

    header("Location: ../index.php?mess=successChecked");
    $conn = null;
    exit();
   }

} else{  
   header("Location: ../index.php?mess=errorChecked");

}

标签: phphtmlmysql

解决方案


推荐阅读