繁体   English   中英

尝试在PHP中为每一行构建一个删除按钮,但是出现错误

[英]Trying to build a delete button in PHP for each row but there's an error

我正在尝试在PHP中使用以下代码来生成行和删除按钮。 但是,它不会删除选定的内容,而是从行的底部删除。

<?php
$connection = mysqli_connect('localhost','root','','rohit');
{

    $query  = "SELECT * FROM user";
    $result = mysqli_query($connection,$query);

    while($row = mysqli_fetch_assoc($result)) {
        $id     = $row['id'];
        $name   = $row['name'];
        $lname  = $row['lname'];
        $dept   = $row['department'];
        $dob    = $row['DOB'];
        $doj    = $row['DOJ'];
        $mobile = $row['mobile'];
        $email  = $row['email'];
        $salary = $row['salary'];
        $gender = $row['gender'];


        echo "<tr>";
        echo "<td>{$id}</td>";
        echo "<td>{$name}</td>";
        echo "<td>{$lname}</td>";
        echo "<td>{$dept}</td>";
        echo "<td>{$dob}</td>";
        echo "<td>{$doj}</td>";
        echo "<td>{$mobile}</td>";
        echo "<td>{$email}</td>";
        echo "<td>{$salary}</td>";
        echo "<td>{$gender}</td>";
        echo '<td>' . '<form method="post"><button class="mb-1 mr-1 btn btn-primary" name="edit"><i class="fa fa-edit"></i></button>' .
            '<button class="mb-1 mr-1 btn btn-danger" name="delete"><i class="fa fa-times"></i></button></form>'
            . '</td>';
        echo "</tr>";

    }
}

?>
<?php
if (isset($_POST['delete'])) {
    $query1  = "DELETE FROM user ";
    $query1 .= "WHERE id = $id LIMIT 1";
    $result1 = mysqli_query($connection,$query1);

    if (!$result1) {
        die("FAILED" . mysqli_error($connection));
    }
}
?>

任何形式的帮助均不胜感激。 提前致谢。 :)

表单中,您需要传递带有要删除的行IDaction属性

所以会是这样的

<form method="post" action="<?= $_SERVER['PHP_SELF']?>?id={$id}">

然后在您的SQL查询中,您将传递此ID,我在这里使用准备好的语句来保护您免受SQL注入

<?php
  if (isset($_POST['delete'])) {
     $stmt = $connection->prepare("DELETE FROM user WHERE id=?");
     $stmt->bind_param($_GET['id']);
     $stmt->execute();

   if (!$result1) {
    die("FAILED" . mysqli_error($connection));
   }
 }
?>

我对您的代码进行了一些更改。 这将工作..!

1.changed方法属性(给定方法POST,但是在php查询中是GET。现在都是POST类型)

2.在删除时将id作为隐藏字段传递。 因此它将删除正确的记录。也删除查询是更改(使用此ID删除记录)

<?php

$connection = mysqli_connect('localhost','root','','rohit');
{

$query  = "SELECT * FROM user";
$result = mysqli_query($connection,$query);

while($row = mysqli_fetch_assoc($result)) {
    $id     = $row['id'];
    $name   = $row['name'];
    $lname  = $row['lname'];
    $dept   = $row['department'];
    $dob    = $row['DOB'];
    $doj    = $row['DOJ'];
    $mobile = $row['mobile'];
    $email  = $row['email'];
    $salary = $row['salary'];
    $gender = $row['gender'];


    echo "<tr>";
    echo "<td>{$id}</td>";
    echo "<td>{$name}</td>";
    echo "<td>{$lname}</td>";
    echo "<td>{$dept}</td>";
    echo "<td>{$dob}</td>";
    echo "<td>{$doj}</td>";
    echo "<td>{$mobile}</td>";
    echo "<td>{$email}</td>";
    echo "<td>{$salary}</td>";
    echo "<td>{$gender}</td>";
    echo '<td>' . '<form method="post"><button class="mb-1 mr-1 btn btn-primary" name="edit"><i class="fa fa-edit"></i></button>' .
        '<input type="hidden" name="del_id" value="'.$id.'">'.
        '<button class="mb-1 mr-1 btn btn-danger" name="delete"><i class="fa fa-times"></i></button></form>'
        . '</td>';
    echo "</tr>";

}
}

?>
<?php
if (isset($_POST['delete'])) {
$del_id = $_POST['del_id'];
$query1  = "DELETE FROM user ";
$query1 .= "WHERE id = $del_id LIMIT 1";
$result1 = mysqli_query($connection,$query1);

if (!$result1) {
    die("FAILED" . mysqli_error($connection));
}
}
?>

您正在使用用于从while循环中的$result对象获取数据的$id 循环在数据库中的最后一个当前id处结束,因此它将仅删除最后一个$id并且仅删除一次。 您可以在表单中为每个记录写$id 例如:

<form method="post"><button class="mb-1 mr-1 btn btn-primary" name="edit"><i class="fa fa-edit"></i></button>' .
    '<input display="hidden" name="id" value="'.$id.'">'.
    '<button class="mb-1 mr-1 btn btn-danger" name="delete"><i class="fa fa-times"></i></button>
</form>

然后在你的PHP中

if (isset($_POST['delete'])) {
    $d_id = $_POST['id'];
    $query1  = "DELETE FROM user ";
    $query1 .= "WHERE id = $d_id LIMIT 1";
    $result1 = mysqli_query($connection,$query1);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM