【问题标题】:Accessing HTML table data in PHP在 PHP 中访问 HTML 表格数据
【发布时间】:2019-04-09 05:30:36
【问题描述】:

我正在从 SQL Select 语句生成一个表,但还在每一行上添加一个复选框,以便可以选择行,但我不知道如何遍历这个生成的表的每一行,以便看看有没有勾选。

这可能吗?

我知道如何创建表格、填充表格以及如何检查按钮,但我不知道如何访问每行按钮所在的单元格。

我无法单独创建每个复选框,因为它们是在从我的 SQL SELECT 循环遍历行时与表一起创建的

【问题讨论】:

  • 你试过什么?
  • 这确实取决于数据的排列方式。单选按钮的设计使用户只能选择一个,因此您只需查找哪个被选中。如果您想要多个选择,您可以使用复选框,通过将[] 添加到名称的末尾并将值作为 ID 将它们作为数组链接在一起,然后通过 $_POST['checkbox_name'] 进行 foreach。

标签: php html html-table


【解决方案1】:

如果您想使用单选按钮,通过在名称后添加[] 将输入与数组链接在一起。即<input type="radio" name="foo[]" /> 然后,您可以使用 foreach 循环访问该数组。

如果您想使用 check-框,请在数组中使用 [] 给它们所有相同的名称,并且每个都有不同的 value 属性。即<input type="checkbox" name="foo" value="1" /> 您可以使用foreach 循环访问这些值。

(在这两种情况下,您都需要在每个单选按钮之前的隐藏输入中设置默认值。否则,您的数组无法使用,因为 php 只读取选定的单选按钮。)

【讨论】:

  • 看来我必须使用复选框,我忘了你只能选择一个单选按钮。我遇到的问题是表只是在循环遍历我的 SELECT 语句中的行时生成的,所以我不能单独创建复选框。
  • 您可以添加一个计数器,在每次迭代时加 1。或者使用 SQL 行中的值作为值。
  • 有道理,我可以在每次生成新行时增加一个变量。我不确定如何使用 foreach 循环来访问这些值?
  • 您能发布到目前为止您拥有的相关代码吗?正确回答您的问题要容易得多。
【解决方案2】:

首先,我承认这不是解决此问题的最佳方法,但它可以解决您的问题。

其次,我建议您将 HTML Input 元素更改为 type="checkbox"。为了能够知道哪些已被检查,您需要将代码调整为如下所示:

<!-- HTML part -->
<form action="" method="post">
    <!-- we need the form as the parent to the table so content can be posted to the server -->
    <table ....>
        <thead>
            <tr>
                <th>&nbsp</th> <!-- we'll put our checkboxes in this column of the table -->
                ...
            </tr>
        </thead>
        <tbody>
            <?php
                foreach ($rows as $row) {
            ?>
            <tr>
                <td><input type="checkbox" name="chkSelect[]" value="<?php echo $row['id']; ?>" /></td>
                ....
            </tr>
            <?php
                }
            ?>
        </tbody>
    </table>
    <button type="submit" name="btnDelete" value="">Delete</button> <!-- This is assuming we're trying to delete the selected items -->
</form>
<!-- HTML end -->

此时,我们已经准备好了表单;请注意,复选框名称后面有 [],这允许它在 PHP 端作为数组处理。在 PHP 方面,您只需要像这样进行正常的表单处理:

if (filter_has_var(INPUT_POST, 'btnDelete')) {
    $checkedIds = filter_input(INPUT_POST, 'chkSelect', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
    // if we loop through the array, we can see the selected item ids
    var_dump($checkedIds);
}

【讨论】:

  • 谢谢你解决了我的一些问题。我对您如何处理表单有点不熟悉。据我所知 filter_has_var 类似于 isset? filter_input 在做什么?谢谢:)
  • @fesil filter_has_var 检查在指定的超全局变量中是否存在具有该名称的变量[真的是数组键]。 filter_input 是现在访问超全局变量的首选方式,而不是 $checkedIds = $_POST['chkSelect'];。我提供给filter_input 的其他参数是这样我可以将值作为数组而不是简单类型接收。你可以在这里阅读更多关于filter_input的信息——php.net/manual/en/function.filter-input.php
  • 我刚刚回到这个话题。好的,我明白了这一切,但我不确定我要从这里去哪里。遍历表后,我想将选择的 ID 添加到数组中,然后可以将其存储在数据库中。 $checkedIds 这里是一个数组吗?
猜你喜欢
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2010-09-06
  • 2019-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多