【问题标题】:Use Delete Button to Delete Record from Database使用删除按钮从数据库中删除记录
【发布时间】:2014-07-04 02:40:04
【问题描述】:

我有一个包含书籍的数据库。在页面上,我有循环打印数据库中的每条记录,其中每本书的标题、作者、出版商、日期和评级。我想在每条记录的底部使用一个删除按钮来删除它。

当我点击删除按钮时,页面被更新,但记录没有被删除。

我试图找到解决这个问题的方法,但还没有找到。我尝试使用数据库表中的 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();   

  } 
}

这是更新后的代码。

【问题讨论】:

  • 什么不起作用,缩小问题所在
  • 当我点击删除按钮时,页面刷新了,但记录没有被删除。
  • 表单输入的 value 不是其 id 发送的,因此您在 $_POST['myDelete'] 中得到“删除”而不是您想要的 id
  • 您是否在表单中从数据库中获取您的行?如果没有,那就做吧。除了$id = htmlspecialchars($row['book_id'], ENT_QUOTES, 'UTF-8'); 没有while,我没有看到任何类似的东西。
  • 在您的 php 中,您正在寻找无效的 $_POST['$id']。应该是$_POST['myDelete'] .. 其实等等。这还不够。我没有在您的表单中看到您设置名称为“id”的输入的任何地方..可以尝试:&lt;input type='hidden' name='id' value='$id'&gt;,然后使用$_POST['id']

标签: php mysql database button delete-row


【解决方案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);

【讨论】:

  • 我试过了,但是没有用。与我上面的帖子中所述相同的事情发生。
  • 你只需要发送id,替换这一行 echo ''; @with $id = $row['id']; echo '';希望它会有所帮助。
【解决方案2】:

从评论开始,您实际上并没有在任何地方获得 $id 。在表单中添加一个字段:

<input type='hidden' name='id' value='$id'>

然后在你的 php 中引用它:

$ids = mysqli_real_escape_string($link, $_POST['id']); 

【讨论】:

  • 确实有道理。现在,让我们看看 OP 是否会说“万岁”;-)
  • 那我可以用它来识别每条记录吗?
  • 删除每个循环内的按钮?
  • 是的,每条记录都有一个删除按钮。
  • 如果每个按钮不同,值是多少?
【解决方案3】:

由于您现在使用 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>

【讨论】:

    【解决方案4】:

    我认为您传递给 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["book_id"] 来获取你发布的 book_id 的值。

    注意:输入标签的属性“名称”将是您的 $_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["book_id"];

    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  
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      • 2011-07-12
      相关资源
      最近更新 更多