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";
}
如果我点击按钮“测试”一词从不显示。
可以用每个注释行的单独表单完成。评论的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
}
}
}
感谢MrCode的回复,但是这两种技术看起来非常广泛。有没有办法让按钮具有相同的名称,但具有不同的ID。那么当我们处理按钮的提交时,我可以将ID放入可放大的? –
提交按钮的'id'不会传输给服务器,只有它的'name'和'value',因此对于多个提交按钮,没有Javascript的唯一实际选项就是使用'name'如图所示。记住'value'显示在屏幕上,因此在那里存储ID是不可行的。 – MrCode
好的,谢谢你的回复。我会试一试你的技巧,看看它是如何发展的。如果我使用第二个使用delete_(ID)的示例作为名称,则此方法是处理请求的快速可靠方法? –
为什么不使用commentID专门针对该评论的按钮? – ashley
你能否提供一些示例代码。我曾尝试过这样做,但没有成功。我一定做错了什么。 –
@ashley我已将我试过的代码添加到我的原始帖子中。例如, –