表中的项目删除按钮?

时间:2009-12-22 20:55:21

标签: html

这是一个简单的html问题,但我想知道正确的做法。

我的页面中有一个表格,包含表格数据,它是数据库中项目的显示。我用php动态构建表,只输出html。

我想在每一行添加一个“删除此条目”列,其中包含一个按钮/链接/图片,当点击它时,我的页面会刷新,并且php知道应该删除哪个itemID。

问题不是关于php,而是关于html部分。

如何使删除按钮符合标准?这是一个不正确的解决方案:

<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>

任何有关良好解决方案的想法?如果可以避免的话,我宁愿不使用太多的javascript。 提前谢谢!

编辑:实际上,我也有一个秘密的第二个问题:如果我想要进行内联编辑(按下“编辑”按钮后),如下所示:使用值包含框的单元格和提交按钮最后一个细胞?

5 个答案:

答案 0 :(得分: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 :(得分:1)

您可以将提交按钮的名称写为事实及其值的集合,例如 name ='set1(fact1:value2,fact2:value2,...)'。然后搜索提交的集合并获取事实值。下面的PHP类 PageFacts 可以执行此操作。您可以使用条件 if(PageFacts :: is('del'))检查是否发布了set,​​并使用语句 $ 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>

使用itemID删除表项的PHP代码示例可以是:

if (PageFacts::is('del')) {
    $itemID = PageFacts::get('del', 'id');
    // Delete $itemID
    deleteTableItem($itemID);
}

// or for multiple facts like del(cid:2,id:0)
if (PageFacts::is('del')) {
    $cartID = PageFacts::get('del', 'cid');
    $itemID = PageFacts::get('del', 'id');

    // Delete $itemID from $cartID
    deleteCartItem($cartID, $itemID);
}

PageFacts PHP代码:

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);
    }
}

答案 2 :(得分:0)

这有点混乱,但是从代理所说的,你可以做这样的事情来获得文本输入:

<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>

答案 3 :(得分:-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>

答案 4 :(得分:-5)

您可以使用简单的经过身份验证的 GET过程,如下所示:

<a href="showResults.php?action=delete&item=112">Delete</a>

请注意网址中的actionitem值。这些将在调用数据库之前进行评估,结果将打印在showResults.php中。您的PHP(在showResults.php上)将以一个逻辑块开始,该逻辑块检查是否请求了任何操作,例如 delete 。如果存在操作,则会检查是否也是如此。然后,我将执行任何必要的身份验证,以确保用户有足够的权限对​​此项执行此操作。

接下来它将查询数据库(现在缺少所述项目,假设删除成功)并重绘页面。链接将在用于创建许多表行的循环中构建:

<?php foreach ($products as $product) { ?>
<tr>
  <td>
    <a href="sr.php?action=delete&item=<?php print $product->id; ?>">Delete</a>
  </td>
  <td>
    <p><?php print $product->title; ?></p>
  </td>
</tr>
<?php } ?>