当我遇到故障时,我总能在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');
}
?>
任何帮助/提示将不胜感激! 非常感谢!
答案 0 :(得分:3)
你必须传递$_POST['postid']
if(isset($_POST['posteraser'])){
$postid = $_POST['postid'];
$sql = query("DELETE FROM post_list WHERE postid = '$postid' ");
redirect ('home.php');
}
OR 作为程序方式
$sql = query("DELETE FROM post_list WHERE postid = ? ",$postid);
答案 1 :(得分: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>
例如
答案 2 :(得分: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被发送到服务器。 这个隐藏的ID已经从你的select语句中最新了。
那么它的解决方案是什么.. 要么你应该发送postid通过将其附加到你的网址,以便你可以识别 按下了删除按钮。 或者创建一个逻辑,只发送按下删除的id。
答案 3 :(得分:-1)
这看起来不对:
echo ("<tr>");
echo("<td>" . $post . "</td>");
echo("</td>")?>
跟踪</td>
不应该在那里。还有别的吗?
此外,您没有显示postid
进入$_SESSION['id']