我有一个包含书籍的数据库。在页面上,我有循环打印数据库中的每个记录,每个记录的标题,作者,出版商,日期和评级。我想使用每个记录底部的删除按钮来删除它。
当我点击删除按钮时,页面会更新,但记录不会被删除。
我试图找到解决这个问题的方法,但还没有。我尝试将数据库表中的book_id类别用作我的索引,以便识别每条记录并将其删除但不起作用。
以下是我的按钮表单的代码,因为它显示为html代码:
while ($row = mysqli_fetch_array($result))
{
echo '<div id="forminput">';
$timestamp = strtotime($row['date']);
echo '<div id = "bookpicture">';
echo '<img src="images/Book Cover 8crop.jpg" alt="Book Cover">';
echo '</div>';
echo '<div id = "bookinfo">';
echo '<div id = "titleauthor">';
echo '<h3>' . htmlspecialchars($row['title'], ENT_QUOTES, 'UTF-8') . '</h3>';
echo '<p>' . htmlspecialchars($row['author'], ENT_QUOTES, 'UTF-8') . '</p>';
echo '</div>';
echo '</div>';
$id = htmlspecialchars($row['book_id'], ENT_QUOTES, 'UTF-8');
echo '</div>' ;
echo '<div id = "publisher">' ;
echo '<p>' . 'Published on' . " " . htmlspecialchars(date('F j, Y,', $timestamp),
ENT_QUOTES, 'UTF-8') .
" " . 'by' . " " . htmlspecialchars($row['publisher'], ENT_QUOTES, 'UTF-8') . '</p>';
echo '</div>';
echo '<div id = "formDelete">';
echo '<form name="deleteForm" method="post" id="deleteForm" action="index.php">';
echo '<input type="submit" value="Update" name="myAdd" id="myAdd" style = "width:
100px" required>';
echo '<input type="submit" value="Delete" name="myDelete" id="$id" style = "width:
100px" required>';
echo '</form>';
echo '</div>';
echo '</div>';
echo '<hr>' ;
echo '</div>';
}
?>
这是我的index.php文件中的代码。
else if (isset($_POST['myDelete']))
{
$ids = mysqli_real_escape_string($link, $_POST['$id']);
$sql="DELETE FROM readbooks WHERE book_id = '$ids'";
if (!mysqli_query($link, $sql))
{
$error = 'Error with submission: ' . mysqli_error($link);
include 'php/error.html.php';
exit();
}
}
这是更新的代码。
答案 0 :(得分:1)
问题是您没有尝试从表单中发送行ID。
在表单中尝试从表单
发送行ID echo '<input type="hidden" name="id" value="$id">'
尝试接收该参数
$id = $_POST['id'];
$con = mysql_connect("host address","mysql_user","mysql_pwd");
$query = "DELETE FROM readbooks WHERE id = $id";
mysql_query($query,$con);
答案 1 :(得分:0)
从评论转移,你实际上并没有在任何地方获得$ id。在表单中添加一个字段:
<input type='hidden' name='id' value='$id'>
然后在你的php中引用它:
$ids = mysqli_real_escape_string($link, $_POST['id']);
答案 2 :(得分:0)
我认为您在传递给PHP代码的ID方面存在问题。尝试使用var_dump($ _ POST)来查看$ _POST变量的内容。正如我所看到的,$ _POST的索引是错误的。
<input type="submit" value="Delete" name="myDelete" id="$id" style = "width:100px" required>';
尝试将其更改为
<input type="submit" name="book_id" value="$id" style = "width:100px" required>';
在你的php中使用这个$ _POST [&#34; book_id&#34;]来获取你发布的book_id的值。
注意:属性&#34; name&#34;输入标记的内容将是$ _POST变量的索引
我知道您希望同时拥有删除和更新按钮。问题是你背后的逻辑。你需要有一个隐藏的字段并将id放入其中。尝试使用它。
echo '<form name="deleteForm" method="post" id="deleteForm" action="index.php">';
echo '<input type="hidden" value="$id" name="book_id" id="myAdd" required>';
echo '<input type="submit" value="Update" name="action" id="myAdd" required>';
echo '<input type="submit" value="Delete" name="action" id="$id" required>';
echo '</form>';
在你的php代码中使用尝试有这样的条件:
$ book_id = $ _POST [&#34; book_id&#34;];
if($_POST["action"] == "delete")
{
//do your deletion code here. use the variable $book_id
}
else{
//do your update code here.use the variable $book_id
}
答案 3 :(得分:0)
由于您现在使用mysqli,请使用预准备语句。不要直接使用您的用户输入查询!例如:
$books = array();
// connection
$con = new mysqli('localhost', 'your_username', 'password_of_username', 'your_database');
if(isset($_POST['myDelete'])) {
$book_id = $_POST['myDelete']; // get the variable id
$stmt = $con->prepare('DELETE FROM readbooks WHERE book_id = ?');
$stmt->bind_param('i', $book_id);
$stmt->execute();
}
$result = mysqli_query($con, 'SELECT * FROM readbooks');
while($row = $result->fetch_assoc()) {
$books[] = $row;
}
?>
<form method="POST">
<table border="1" cellpadding="10">
<tr>
<th>Title</th>
<th>Author</th>
<th>Publisher</th>
<th></th>
</tr>
<?php foreach($books as $book): ?>
<tr>
<td><?php echo $book['title']; ?></td>
<td><?php echo $book['author']; ?></td>
<td><?php echo $book['publisher']; ?></td>
<td><button type="submit" name="myDelete" value="<?php echo $book['book_id']; ?>">Delete</button></td>
</tr>
<?php endforeach; ?>
</table>
</form>