php - 带有复选框的 HTML 表单元素

标签 php html mysql forms foreach

我有一些显示 HTML 表单的 PHP,如下所示: enter image description here 然后当按下更新按钮时更新表中的信息。

我的问题是删除选项。每当我点击更新按钮时,信息都会成功更新,但我收到有关删除语句的错误消息: enter image description here

代码如下: //连接到愿望 list 数据库的信息 $服务器名称 = ".com"; $db用户名 = ""; $密码=“”; $数据库名称 = "";

    try {
        // To connect to the database please
        $conn = new mysqli($servername, $dbusername, $password, $dbname);
        if ($conn->connect_error) {
            die('Connect Error (' . $conn->connect_errno . ') '
                . $conn->connect_error);
        }

       echo "Please click <strong><a href = 'http://eggcavity.com/add-wishlist'>here</a></strong> to add creatures to your wishlist.";

       if(isset($_POST['submit'])){
            $ids = $_POST['ids'];

            // Prepare and bind the udpate statement
            $sql2 = "UPDATE Wishlists SET Picture = ?, Stage = ?, Gender = ?, Frozen = ?, Notes= ? WHERE ID = ?";
            $stmt2 = $conn->prepare($sql2);
            $stmt2->bind_param('sssssi', $picture, $stage, $gender, $frozen, $notes, $id);

            foreach($ids as $id){
                $stagecode = $id . "stage";
                $gendercode = $id . "gender";
                $frozencode = $id . "frozen";
                $notescode = $id . "notes";
                $namecode = $id . "creature";
                $stage = $_POST[$stagecode];
                $Stage = $stage;
                $gender = $_POST[$gendercode];
                $frozen = $_POST[$frozencode];
                $notes = $_POST[$notescode];
                $name = $_POST[$namecode];

                $sql1 = 'SELECT * FROM Creatures WHERE Name = "' . $name . '"';
                $result = mysqli_query($conn, $sql1);
                $row = $result->fetch_assoc();
                $picture = $row["$stage"];

                $stmt2->execute();
            }

            $theCount = 0;
            foreach($_POST['delete'] as $selected){
                $sql = "DELETE FROM Wishlists WHERE ID = ?";
                $stmt = $conn->prepare($sql);
                $stmt->bind_param('i', $selected);
                $stmt->execute();
                $theCount++;
            }
            echo "Your wishlist has been updated, and" .$theCount. " creature(s) has/have been removed from your wishlist.<br>Please click <a href='http://eggcavity.com/edit-wishlist'>here</a> to return to the edit page.";
       } else {
           // Get current user's username
           $current_user = wp_get_current_user();
           $username = $current_user->user_login;
           $theDeleteCount = 0;
           // Just display the form
           $sql = 'SELECT Creature, Picture, Stage, Gender, Frozen, ID FROM Wishlists WHERE Username = "' . $username . '"';
           $result = mysqli_query($conn, $sql);
           if (mysqli_num_rows($result) > 0) {
               echo '<form method="POST"><table><strong>' .
                   '<tr>' .
                       '<td></td>' .
                       '<td>Creature</td>' .
                       '<td>Stage</td>' .
                       '<td>Gender</td>' .
                       '<td>Frozen</td>' .
                   '</tr></strong>';
               while($row = $result->fetch_assoc()) {
                   $creature = $row["Creature"];
                   $id = $row["ID"];
                   $picture = $row["Picture"];
                   $stage = $row["Stage"];
                   echo '<input name="ids[]" type="hidden" value="' . $id . '">' .
                       '<input name="' . $id . 'creature" type="hidden" value="' . $creature . '">' .
                       '<tr>' .
                           '<td rowspan="2"><img src="' . $picture . '"></td>' .
                           '<td>' . $creature . '</td>' .
                           '<td><select name="' . $id . 'stage">' .
                               '<option value ="' . $stage . '" selected>' . $stage . '</option>' . 
                               '<option value = "Stage1">Stage1(Egg)</option>' .
                               '<option value = "Stage2">Stage2</option>' .
                               '<option value = "Stage3">Stage3</option>' .
                               '<option value = "Stage4">Stage4</option>' .
                           '</select></td>' .
                           '<td><select name="' . $id . 'gender">' .
                               '<option value ="' . $row["Gender"] . '" selected>' . $row["Gender"] . '</option>' . 
                               '<option value = "Unspecified">Unspecified</option>' .
                               '<option value = "Female">Female</option>' .
                               '<option value = "Male">Male</option>' . 
                           '</select></td>' .
                           '<td><select name="' . $id . 'frozen">' .
                               '<option value ="' . $row["Frozen"] . '" selected>' . $row["Frozen"] . '</option>' . 
                               '<option value="Unspecified">Unspecified</option>' .
                               '<option value="Yes">Yes</option>' .
                               '<option value="No">No</option>' .
                           '</select></td>' .
                       '</tr>' .
                       '<tr>' .
                           '<td colspan="3">Notes: <input type="text" name="' . $id . 'notes" value="' . $row["Notes"] .'"></td>' .
                           '<td>' . 'Delete<br>' . '<input type="checkbox" name="creatures[]" value="' . $id . '"></td>' .
                       '</tr>';
               }
               echo '</table><input name="submit" type="submit" id="submit" value="Update"></form>';
           } else {
              echo "<br>You have no creatures in your wishlist.";
           }
       }
    } catch (mysqli_sql_exception $e) { 
        throw $e; 
    } 

    // Close the connection to the database
    $conn->close();

如果您可以帮助我找出我传递给 foreach() 语句的信息有什么问题:

foreach($_POST['delete'] as $selected){

我将永远感激不已。任何想法都有帮助。

我尝试了很多东西,其中很多都是在 stackoverflow 上找到的。我想我可能错过了一些小事和/或愚蠢的事情。我有另一个页面运行在复选框表单上,效果很好。

谢谢您,祝您有美好的一天!

最佳答案

包含要删除的生物 ID 的表单元素称为 creatures[],因此您需要处理该 POST 变量的内容,而不是 delete - 甚至尽管 delete 是您想要做的。所以,也许是这样的:-

替换

$theCount = 0;
foreach($_POST['delete'] as $selected){
    $sql = "DELETE FROM Wishlists WHERE ID = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param('i', $selected);
    $stmt->execute();
    $theCount++;
}

$theCount = 0;
$creatures=!empty( $_POST['creatures'] ) ? $_POST['creatures'] : false;
if( $creatures ) {
    if( !is_array( $creatures ) ) $creatures=explode(',',$creatures);
    foreach( $creatures as $id ){
        $sql = "DELETE FROM Wishlists WHERE ID = ?";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param('i', $id);
        $stmt->execute();
        $theCount++;
    }
}

关于php - 带有复选框的 HTML 表单元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38582433/

相关文章:

php - 当订单状态从待处理变为已取消时发送电子邮件通知

php - 从数据库中获取最常见的值(value)

html - 使用 CSS 居中对齐

javascript - 在窗口调整大小时更改 div 的位置

PHP 表单发送邮件给所有用户而不是一个

php - 是否可以从删除中获取结果?

php - 如何优化或加速 mysql 或 php 中的子查询

PHP Post数组数组

mysql - 如何在日期范围内连接 MySQL 表?

mysql 的 php 表单问题