php - 从带有复选框的表单中提取特定值以在 PHP 中选择行

标签 php mysql checkbox

我有一个表单,其中包含从表查询的行生成的多行。每行都有文本框和下拉框,它们是从表查询中预先填充的。如有必要,这允许用户在提交之前更改行中的值。但是,只有带有选中的复选框的行才应插入到表中。

那么,如果我有 15 行并且仅选择了 10 个复选框,那么如何仅插入带有复选框的 10 行并忽略来自未选择复选框的行的数据的数组值?

WHILE ($row = $query->fetch(PDO::FETCH_ASSOC)) { ?>

<input type="hidden" name="RB_TG_ID[]" value="<? echo $row['RB_TG_ID'] ?>">
<input type="hidden" name="state_id" value="<? echo $state_id ?>">
<input type="hidden" name="rpt_id" value="<? echo $rpt_id ?>">
 <tr>

<td class="normal"><input type="checkbox" name="CB[]" value="1"></td>
<td class="normal"><? echo $row['TG'] ?></td>
<td class="normal">
  <SELECT NAME="TS[]">
    <option SELECTED VALUE="<? echo $row['TS'] ?>"><? echo $row['TS'] ?>
    <option value="1">1</option>
    <option value="2">2</option>
  </select>
</td>
<td class="normal"><? echo $row['assignment'] ?></td>
<td>
  <SELECT NAME="access[]">
    <option SELECTED VALUE="<? echo $row['FP'] ?>"><? echo $row['FP'] ?>     </option>
    <option value="PTT">PTT</option>
    <option value="Full-Time">Full-Time</option>
    <option value="Sched"> Scheduled</option>
   </select>
 </td>
</tr>

表单如下所示:

/image/VF79X.jpg

正如您从表单中看到的,所有行都可以由用户修改,并且所有行都将在 POST 上发送其值,但复选框除外,如果选中,则仅发送值“1”。我只对第一个复选框被选中时感兴趣。所有其他行和信息可以被忽略,并且不会被输入到数据库中。因此,如果我检查前三行和至少一行在中间留下几个空白,我可以在数组上执行 print_r 并得到以下结果:

Variables: 
00
1
CB: Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 1 ) 
TS: Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 2 [4] => 2 [5] => 2 [6] => 2 [7] => 2 ) 
TG: Array ( [0] => 1 [1] => 25 [2] => 7 [3] => 2 [4] => 31 [5] => 38 [6] => 65 [7] => 66 ) 
Access: Array ( [0] => PTT [1] => [2] => [3] => Full-Time [4] => PTT [5] => PTT [6] => PTT [7] => PTT ) 

第一行带有 00 ,第二行带有 1 就可以了,因为它们将在每个插入的行上循环。

但是,如何仅插入与选中我所选行的复选框相关的结果。正如您所看到的,虽然我选中了四个框,并且名为“CB”的变量只显示了四个值,但其余变量显示了 8 个值。如何忽略这些值并使数组指针排队以循环插入 INSERT?复选框似乎是我的问题,因为它仅在选中时发送一个值。所以,我不能对“1”值执行 if/then 操作。我尝试从实际复选框字段之前的隐藏字段发送 CB[] 复选框值,但它只是向数组添加了另一个元素。意思是,如果有 8 个复选框并且我全部选中,我最终会得到 16 个 1 和 0 之间交替的元素。

下面的评论要求提供 MySQL 代码,但除了显示图中示例中的表单之外,我还没有编写任何代码。我不知道如何将数组组织到数据行以输入数据库。我想一旦它一一排列起来,我就会编写一个 FOREACH 循环来运行用户选择的尽可能多的行的插入查询。

最佳答案

您应该首先重构表单。如果将每行分组在一起,您可以轻松匹配每行中的值。一个例子:

$i = 0;
while ($row = ...) :
    ?>
    <tr>
        <td><input type="checkbox" name="data[<?= $i ?>][CB]"></td>
        <td><select name="data[<?= $i ?>][TS]">...</select></td>
        <td><select name="data[<?= $i ?>][access]">...</select></td>
    </tr>
    <?php
    $i++;
endwhile;

或者您可以使用 id 代替计数器 ($i),例如:

<input type="checkbox" name="data[<?= $row['RB_TG_ID'] ?>][CB]">

提交后检查 $_POST['data'] 中的每一行并仅保存选中复选框的记录:

foreach ($_POST['data'] as $row) {
    // If the checkbox is on
    if (isset($row['CB'])) {
        // Sanitize n' save this row
        // $ts = $row['TS'];
        // $access = $row['access'];        
    }
}

关于php - 从带有复选框的表单中提取特定值以在 PHP 中选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41576850/

相关文章:

php - 将两个 MySql 合并为一个查询

mysql - 删除级联不起作用

javascript - 使用 js 切换 html/css 复选框的选中状态

php - 以编程方式从订阅/订单中删除优惠券

php - ZF2 : Dependency Injection, MVC、配置和 Bootstrap

mysql - 谷歌云 SQL - 错误 2003 (HY000) : Can't connect to MySQL

javascript - jquery 添加新的复选框,当点击新的复选框时,它什么也没有发生

java - 无法在框架 'java AWT' 中添加简单的复选框

php - 如何用php从文件中删除一行?

php - 使用 angularjs 从 json 获取值