Html 表中的项目删除按钮?
这是一个简单的html问题,但我想知道正确的方法 我的页面中有一个表格,其中包含表格数据,它是数据库中项目的显示。我用php动态构建表,只输出html 我想添加一个列“删除此条目”,每行上都有一个按钮/链接/图片,当它被单击时,我的页面会刷新,php知道应该删除哪个itemID 问题不在于php,而在于html部分 如何使“删除”按钮符合标准?这里有一个不正确的解决方案:Html 表中的项目删除按钮?,html,Html,这是一个简单的html问题,但我想知道正确的方法 我的页面中有一个表格,其中包含表格数据,它是数据库中项目的显示。我用php动态构建表,只输出html 我想添加一个列“删除此条目”,每行上都有一个按钮/链接/图片,当它被单击时,我的页面会刷新,php知道应该删除哪个itemID 问题不在于php,而在于html部分 如何使“删除”按钮符合标准?这里有一个不正确的解决方案: <table> <form action='#' method='post'> <tr>
<table>
<form action='#' method='post'>
<tr>
<td>Item 1</td>
<td><input type='hidden' name='id' value='1'><input type='submit' value='X'></td>
</tr>
</form>
<form action='#' method='post'>
<tr>
<td>Item 2</td>
<td><input type='hidden' name='id' value='2'><input type='submit' value='X'></td>
</tr>
</form>
</table>
项目1
项目2
有人有好的解决方案吗?如果可以避免的话,我宁愿不使用太多javascript。
提前谢谢
编辑:事实上,我还有一个秘密的第二个问题:如果我想进行内联编辑(在按下编辑按钮后),比如:使具有值的单元格包含框,并在最后一个单元格中包含提交按钮,该怎么办?您可以使用一个简单的验证的获取过程,如下所示:
<a href="showResults.php?action=delete&item=112">Delete</a>
您可以使用一个简单的认证的获取过程,如下所示:
<a href="showResults.php?action=delete&item=112">Delete</a>
向每个表单添加一个提交按钮,并将要执行的操作作为每个按钮的值属性发送
<table>
<form action='#' method='post'>
<tr>
<td>Item 1</td>
<td><input type='hidden' name='id' value='1'><input type='submit' value='X'></td>
<td><button type="submit" value="remove" name="op">Remove</button></td>
<td><button type="submit" value="edit" name="op">Edit</button></td>
</tr>
</form>
</table>
项目1
去除
编辑
向每个表单添加一个提交按钮,并将要执行的操作作为每个按钮的值属性发送
<table>
<form action='#' method='post'>
<tr>
<td>Item 1</td>
<td><input type='hidden' name='id' value='1'><input type='submit' value='X'></td>
<td><button type="submit" value="remove" name="op">Remove</button></td>
<td><button type="submit" value="edit" name="op">Edit</button></td>
</tr>
</form>
</table>
项目1
去除
编辑
为什么不隔离表单并将ID传递到操作页面
<table>
<tr>
<td>Item 1</td>
<td><form action='action.php?id=1' method='post'><input type='submit' value='X'></form></td>
</tr>
<tr>
<td>Item 2</td>
<td><form action='action.php?id=2' method='post'><input type='submit' value='X'></form></td>
</tr>
</table>
项目1
项目2
为什么不隔离表单并将ID传递到操作页面
<table>
<tr>
<td>Item 1</td>
<td><form action='action.php?id=1' method='post'><input type='submit' value='X'></form></td>
</tr>
<tr>
<td>Item 2</td>
<td><form action='action.php?id=2' method='post'><input type='submit' value='X'></form></td>
</tr>
</table>
项目1
项目2
这有点乱,但如果不按照代理所说的,您也可以这样做以获得文本输入:
<form action='action.php?id=1' method='POST'>
<table>
<tr>
<td>Item 1</td>
<td><input type="text" value="" /></td>
<td><input type='submit' value='X'></td>
</tr>
</table>
</form>
<form action='action.php?id=2' method='POST'>
<table>
<tr>
<td>Item 2</td>
<td><input type="text" value="" /></td>
<td><input type='submit' value='X'></td>
</tr>
</table>
</form>
项目1
项目2
这有点乱,但如果不按照代理所说的,您也可以这样做以获得文本输入:
<form action='action.php?id=1' method='POST'>
<table>
<tr>
<td>Item 1</td>
<td><input type="text" value="" /></td>
<td><input type='submit' value='X'></td>
</tr>
</table>
</form>
<form action='action.php?id=2' method='POST'>
<table>
<tr>
<td>Item 2</td>
<td><input type="text" value="" /></td>
<td><input type='submit' value='X'></td>
</tr>
</table>
</form>
项目1
项目2
您可以将提交按钮的名称写为一组事实及其值,例如name='set1(fact1:value2,fact2:value2,…')。然后搜索提交的集合并获取事实值。下面的PHP类PageFacts可以做到这一点。您可以使用条件if(PageFacts::is('del'))检查集合是否已过帐,并使用语句$itemID=PageFacts::get('del',id')获取事实值。
带有提交按钮的表单可以如下所示:
<form method="post">
... item [0] text/input
<input type="submit" name="del(id:0)" value="Del">
... item [1] text/input
<input type="submit" name="del(id:1)" value="Del">
... item [2] text/input
<input type="submit" name="del(id:2)" value="Del">
...
...
<input type="submit" name="chng" value="Chng">
</form>
PageFactsPHP代码:
class PageFacts {
// Gets fact value from posted set
// $s ... name of a set
// $f ... name of a fact
// returns - value of fact $f in set $s
// - TRUE if set $s exists but fact $f doesn't exist
// - FALSE if set $s doesn't exist
public static function get($s, $f = NULL) {
// Regex pattern to search for set $s
$ps = "/^\s*$s\s*\((.*)\)\s*$/";
// Search POSTed names (variable $v is not used)
foreach ($_POST as $key => $v) {
$ok = preg_match($ps, $key, $matches);
if ($ok && isset($matches[1])) {
// If $f is not passed return TRUE, means set $s exists regardless of fact $f
if (!isset($f)) {
return TRUE;
}
// Otherwise return value of fact $f
// use regex pattern to search in list of fact:value items separated by a comma
$pf = "/^\s*$f\s*\:\s*(.+)\s*$/";
foreach (explode(',', $matches[1]) as $fv) {
$ok = preg_match($pf, $fv, $matches);
if ($ok && isset($matches[1])) {
return $matches[1];
}
}
}
}
return FALSE;
}
// Checks if set $s is posted
public static function is($s) {
return self::get($s);
}
}
您可以将提交按钮的名称写为一组事实及其值,例如name='set1(fact1:value2,fact2:value2,…')。然后搜索提交的集合并获取事实值。下面的PHP类PageFacts可以做到这一点。您可以使用条件if(PageFacts::is('del'))检查集合是否已过帐,并使用语句$itemID=PageFacts::get('del',id')获取事实值。 带有提交按钮的表单可以如下所示:
<form method="post">
... item [0] text/input
<input type="submit" name="del(id:0)" value="Del">
... item [1] text/input
<input type="submit" name="del(id:1)" value="Del">
... item [2] text/input
<input type="submit" name="del(id:2)" value="Del">
...
...
<input type="submit" name="chng" value="Chng">
</form>
PageFactsPHP代码:
class PageFacts {
// Gets fact value from posted set
// $s ... name of a set
// $f ... name of a fact
// returns - value of fact $f in set $s
// - TRUE if set $s exists but fact $f doesn't exist
// - FALSE if set $s doesn't exist
public static function get($s, $f = NULL) {
// Regex pattern to search for set $s
$ps = "/^\s*$s\s*\((.*)\)\s*$/";
// Search POSTed names (variable $v is not used)
foreach ($_POST as $key => $v) {
$ok = preg_match($ps, $key, $matches);
if ($ok && isset($matches[1])) {
// If $f is not passed return TRUE, means set $s exists regardless of fact $f
if (!isset($f)) {
return TRUE;
}
// Otherwise return value of fact $f
// use regex pattern to search in list of fact:value items separated by a comma
$pf = "/^\s*$f\s*\:\s*(.+)\s*$/";
foreach (explode(',', $matches[1]) as $fv) {
$ok = preg_match($pf, $fv, $matches);
if ($ok && isset($matches[1])) {
return $matches[1];
}
}
}
}
return FALSE;
}
// Checks if set $s is posted
public static function is($s) {
return self::get($s);
}
}
是的,我可以,但那很糟糕,因为谷歌在抓取链接时会访问该链接。我承认它可能不会刮取动态页面,但在我看来,它仍然不是一个好的解决方案。Tominator,除非用户浏览经过身份验证,否则不会显示链接。在这种情况下,GET方法的缺点是GET请求意味着浏览器可以访问,而delete请求会更改状态。。这意味着它不应该被缓存!请不要在GET请求中删除某些内容。无论您是否在HTML中包含该链接(在某些情况下,某些机器人会通过发送GET请求找到地址并删除所有内容),这都无关紧要。使用DELETE或(即,在仅支持GET和POST的HTML表单中)POST作为后备方法。没有机器人会向您的地址发送HTTP POST/PUT/DELETE。@Jonathan Sampson:让它成为“不应该”。我知道你的意思,你是对的,但我仍然不会滥用GET来修改数据(GET方法应该是const),因为这是不对的。任何HTTP客户端都可以向任何资源发送大量GET请求。如果它不是一个谷歌机器人,它可能是某个正在进行预取的浏览器插件,它预取了一个删除数据库中某些内容的页面。我知道这在普通PHP中不像在某些PerlWeb框架中那么简单,但作为删除的替代方法,使用POST;是的,我可以,但那很糟糕,因为谷歌在抓取链接时会访问该链接。我承认它可能不会刮取动态页面,但在我看来,它仍然不是一个好的解决方案。Tominator,除非用户浏览经过身份验证,否则不会显示链接。在这种情况下,GET方法的缺点是GET请求意味着浏览器可以访问,而delete请求会更改状态。。这意味着它不应该被缓存!请不要在GET请求中删除某些内容。无论您是否在HTML中包含该链接(在某些情况下,某些机器人会通过发送GET请求找到地址并删除所有内容),这都无关紧要。使用DELETE或(即,在仅支持GET和POST的HTML表单中)POST作为后备方法。没有机器人会向您的地址发送HTTP POST/PUT/DELETE。@Jonathan Sampson:让它成为“不应该”。我知道你的意思,你是对的,但我仍然不会滥用GET来修改数据(GET方法应该是const),因为这是不对的。任何HTTP客户端都可以向任何资源发送大量GET请求。如果它不是一个谷歌机器人,它可能是某个正在进行预取的浏览器插件,它预取了一个删除数据库中某些内容的页面。我知道