0

当我遇到故障时,我总能在 StackOverflow 上找到答案,但这一次,虽然我确信修复很容易,但我似乎无法正确解决!

基本上,我试图在从我的 mysql 数据库中获取的每一行旁边添加一个“删除”按钮。如果需要,用户应该能够删除特定的帖子。

当我点击删除按钮时,它总是被删除的最新行。所以我猜每一行中传递的值有问题:似乎它们被最新的值覆盖了。

下面是我的代码:

<?php  
$table = query("SELECT post, postid FROM post_list WHERE id = ? ORDER BY 
time DESC LIMIT 15", $_SESSION["id"]);
foreach ($table as $row) 
{ 
      $post = $row["post"];
      $postid = $row["postid"];  
      echo ("<table>");
      echo ("<tr>");
      echo("<td>" . $post . "</td>");
      echo("</td>")?>            
      <div id="posteraser">
       <form action='' method='post'>
          <input type='hidden' name='postid' value='<?php echo $postid?>'>
          <input type='submit' name='posteraser'>Delete</input>
       </form>
      </div>       
     <?php 
     echo ("</td>");
     echo ("</tr>");
     echo ("</table>");
     echo '<hr>';
}  
?>

在同一页面下方,有删除按钮代码:

<?php
if(isset($_POST['posteraser']))
{
    $sql = query("DELETE FROM post_list WHERE postid = '$postid' ");       
    redirect ('home.php');
}
?>

任何帮助/提示将不胜感激!非常感谢 !

4

4 回答 4

3

你必须通过这里$_POST['postid']

if(isset($_POST['posteraser'])){
   $postid = $_POST['postid'];
   $sql = query("DELETE FROM post_list WHERE postid = '$postid' ");       
   redirect ('home.php');
}

作为程序方式

$sql = query("DELETE FROM post_list WHERE postid = ? ",$postid);  
于 2013-06-04T04:43:44.630 回答
0

开发人员应该始终了解他们使用 PHP 代码创建的 HTML代码。
这是必不可少的东西。

事实上,HTML 代码正是我们努力的结果。在浏览器窗口中可以看到不是很好的图片 - 这是浏览器的工作 - 但非常 HTML 代码。

因此,如果您费心查看生成的代码,您会发现一些可以归结为

<input type='hidden' name='postid' value='1'>
<input type='hidden' name='postid' value='3'>
<input type='hidden' name='postid' value='4'>
<input type='hidden' name='postid' value='5'>
<input type='hidden' name='postid' value='9'>

您对为什么只有最后一个值有任何疑问吗?

说到解决方案,你有两个选择

  • 为每一行创建一个单独的表单
  • 用 id 标记非常删除按钮。

    <input type='submit' name='posteraser[<?php echo $postid?>]'>Delete</input>
    

    例如

于 2013-06-04T05:09:04.013 回答
0

让我们检查一下 select 语句的逻辑。您正在选择 postid 并将其分配给隐藏元素,当您按下删除按钮时,隐藏的 id 将发送到服务器。所以在for循环下创建的表单是

<div id="posteraser">
<form action='' method='post'>
  <input type='hidden' name='postid' value='<?php echo $postid?>'>
  <input type='submit' name='posteraser'>Delete</input>
</form>
</div>

但隐藏元素正在为每一行创建相同的名称。所以当你按下删除按钮时。第一个隐藏的 id 被发送到服务器。从您的 select 语句中,这个隐藏的 id 已经是最新的。

那么它的解决方案是什么..要么你应该通过在你的url中附加它来发送postid,这样你就可以确定按下了哪个删除按钮。或创建一个逻辑以仅发送按删除的 id。

于 2013-06-04T05:13:02.780 回答
-1

这看起来不对:

echo ("<tr>");
echo("<td>" . $post . "</td>");
echo("</td>")?>     

尾随</td>不应该在那里。或许还有别的?

另外,你没有展示如何postid进入$_SESSION['id']

于 2013-06-04T04:44:07.507 回答