我一直在创建一个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>";
}
}
我遇到的问题是我想在DELETE这个词的位置放一个提交按钮。这将为每个注释行创建一个按钮,因此如果单击该代码将不知道按下了什么按钮。无论如何都要得到这个,所以每个按钮都有一个单独的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”字样。
答案 0 :(得分:2)
可以为每个评论行使用单独的表单。注释的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
属性中,这样做就必须遍历post变量并解析ID。
使用按钮name
的示例:
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
}
}
}