1

我一直在创建一个允许用户向系统内的图像添加评论的 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";
}

如果我单击一个按钮,则永远不会显示“测试”一词。

4

1 回答 1

3

可以使用每个评论行的单独表格来完成。评论的 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。

使用按钮的示例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
        }
    }
}
于 2013-02-04T12:08:01.967 回答