[英]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));
}
}
?>
任何形式的帮助均不胜感激。 提前致谢。 :)
在表单中,您需要传递带有要删除的行ID的action属性
所以会是这样的
<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.