我一直在创建一个 php 网站,允许用户向系统内的图像添加评论。
我的代码当前的工作方式是获取该图像的所有注释,并使用 while 循环将它们放入表中:
$commResult = mysql_query("SELECT u.userID, u.USERNAME, c.COMMENT, c.DATE_ADDED, c.ACTIVE, c.id FROM USERS u, COMMENTS c WHERE u.id = c.user_id and c.box_id = $boxId ORDER BY c.DATE_ADDED DESC");
while ($row = mysql_fetch_array($commResult))
{
if ($row[4] != 0)
{
echo "<tr><td><a href='User.php?uid=$row[0]'>$row[1]</a></td>";
echo "<td style='text-align:right;'>" . date("d M y g:iA", strtotime($row[3])) ;
if (isLoggedIn())
echo " - DELETE";
echo "</td></tr>";
echo "<tr><td colspan='2'>" . $row[2] . "</td></tr>";
}
}
我遇到的问题是我想在“删除”一词所在的位置放置一个提交按钮。这将为每个注释行创建一个按钮,因此如果单击,代码将不知道按下了哪个按钮。无论如何,有没有办法解决这个问题,让每个按钮都有一个单独的 ID,这样当提交代码时,它就知道评论的 ID 是什么,因此我能够在数据库表上处理该评论 ID 的删除。
我尝试在单词 DELETE 所在的位置添加这段代码:
if (isLoggedIn())
echo " - <button type='submit' name='delCom_sub' value='$row[5]' >X</button>";
但是,当我尝试使用以下代码处理按钮单击时:
if (!empty($_POST['delCom_sub']))
{
echo "test";
}
如果我单击按钮,则永远不会显示“test”一词。
最佳答案
可以为每个评论行使用单独的表单来完成。评论的 ID 存储在隐藏字段中。使用此方法,您需要删除任何父表单以防止嵌套表单。
if (isLoggedIn())
{
echo '<form action="delete.php" method="post">
<input type="hidden" name="id" value="' . (int)$row['id'] . '" />
<input type="submit" value="Delete" />
</form>';
}
在您发布的页面上,即delete.php
:
if(isset($_POST['id']) && isLoggedIn())
{
// do the delete with $_POST['id']
}
除此之外,您还可以使用 Javascript 通过在单击按钮时填充隐藏字段来完成此操作。另一种选择是将评论 ID 存储在提交按钮的 name
属性中,这样做时您必须循环遍历帖子变量并解析出 ID。
使用按钮名称
的示例:
if (isLoggedIn())
echo " - <input type='submit' name='delete_" . (int)$row['id'] . "' value='Delete' />";
在接收页面:
if($_SERVER['REQUEST_METHOD'] == 'POST' && isLoggedIn())
{
foreach($_POST as $key => $value)
{
if(strpos($key, 'delete_') === 0)
{
$id = substr($key, 7);
// do the delete for $id
}
}
}
关于PHP表格中的多个提交按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14686257/