PHP多个提交按钮在表中

时间:2013-02-04 11:56:52

标签: php html mysql form-submit

我一直在创建一个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”字样。

1 个答案:

答案 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
        }
    }
}