PHP中的多个提交按钮

问题描述:

我一直在创建一个php网站,允许用户添加评论到系统中的图像。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的删除。

我曾尝试加入这段代码这里所说的删除是:

if (isLoggedIn()) 
       echo " - <button type='submit' name='delCom_sub' value='$row[5]' >X</button>"; 

然而,当我尝试使用下面的代码来处理按钮点击:

if (!empty($_POST['delCom_sub'])) 
{ 
    echo "test"; 
} 

如果我点击按钮“测试”一词从不显示。

+0

为什么不使用commentID专门针对该评论的按钮? – ashley

+0

你能否提供一些示例代码。我曾尝试过这样做,但没有成功。我一定做错了什么。 –

+0

@ashley我已将我试过的代码添加到我的原始帖子中。例如, –

可以用每个注释行的单独表单完成。评论的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 
     } 
    } 
} 
+0

感谢MrCode的回复,但是这两种技术看起来非常广泛。有没有办法让按钮具有相同的名称,但具有不同的ID。那么当我们处理按钮的提交时,我可以将ID放入可放大的? –

+0

提交按钮的'id'不会传输给服务器,只有它的'name'和'value',因此对于多个提交按钮,没有Javascript的唯一实际选项就是使用'name'如图所示。记住'value'显示在屏幕上,因此在那里存储ID是不可行的。 – MrCode

+0

好的,谢谢你的回复。我会试一试你的技巧,看看它是如何发展的。如果我使用第二个使用delete_(ID)的示例作为名称,则此方法是处理请求的快速可靠方法? –