- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个表单,其中包含从表查询的行生成的多行。每行都有文本框和下拉框,它们是从表查询中预先填充的。如有必要,这允许用户在提交之前更改行中的值。但是,只有带有选中的复选框的行才应插入到表中。
那么,如果我有 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>
表单如下所示:
正如您从表单中看到的,所有行都可以由用户修改,并且所有行都将在 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/
我是一名优秀的程序员,十分优秀!