【发布时间】:2015-08-23 16:24:46
【问题描述】:
所以,我的网页有一个 html 表格,它显示包含一项 pr 的行。行包括列中有关该项目的各种数据。
使用 mysqli 调用 db 填充该表。到目前为止一切顺利。
表格的摘录如下所示(我试图只显示代码的“重要”部分以避免混乱 - 每个项目还有 8 个类似于“nytAntalGangeUdfoert”的文本字段)
<td><input type="text" name="nytAntalGangeUdfoert[]" value="<?php echo $antalGangeUdfoert ?>"></td>
<?php if ($aktivStatus == 1) { ?>
<td><input type="checkbox" name="nyAktivStatus[]" value="<?php echo $aktivStatus ?>" checked="checked"/></td>
<?php } else { ?>
<td><input type="checkbox" name="nyAktivStatus[]" value="<?php echo $aktivStatus ?>" /></td>
文本字段在各个方面都可以正常工作。
对于复选框,if-else 部分根据我的 db-table 中的值(1 或 0)决定复选框是否应显示为已选中(活动或不活动)这工作正常。
然后我有“重复”隐藏字段来记录复选框的原始状态,以便在发布后进行比较:
<td><input type="hidden" name="antalGangeUdfoert[]" value="<?php echo $antalGangeUdfoert ?>"></td>
<td><input type="hidden" name="aktivStatus[]" value="<?php echo $aktivStatus ?>"></td>
所有这些都发布到另一个页面,并按如下方式处理(同样,仅是完整表格的摘录)。 'aktivstatus' 是来自 db 的旧状态,而 'nyaktivstatus' 是发布的状态(即用户通过复选框选择的状态 - 当然可以与原始状态相同)
if(isset($_POST['submit']))
{
$antalGangeUdfoert = $_POST["antalGangeUdfoert"];
$nytAntalGangeUdfoert = $_POST["nytAntalGangeUdfoert"];
$aktivStatus = $_POST["aktivStatus"];
foreach( $navn as $n => $n )
{
if(isset($_POST["nyAktivStatus"][$n])) {
$nyAktivStatus[$n] = 1;
} else {
$nyAktivStatus[$n] = 0;
}
if( $antalGangeUdfoert[$n] <> $nytantalGangeUdfoert[$n] || $aktivStatus[$n] <> $nyAktivStatus[$n]) {
//run function to update items where a change has been made by the user)
如前所述,上述方法适用于所有文本字段,但在某些情况下,复选框的新状态显然是为错误的项目保存的(对文本字段的更改无论如何都会正确保存在 db 中)
以下示例:
行---获取时的状态---用户输入---另存为
Row1: 1-->0-->1 ERROR
Row2: 1-->1-->1 OK
Row3: 1-->1-->0 ERROR
Row1: 1-->1-->1 OK
Row2: 1-->1-->1 OK
Row3: 0-->1-->1 OK
Row1: 1-->0-->0 OK
Row2: 1-->0-->0 OK
Row3: 1-->0-->0 OK
Row1: 0-->1-->1 OK
Row2: 0-->1-->1 OK
Row3: 0-->1-->1 OK
Row1: 1-->0-->1 ERROR
Row2: 1-->0-->0 OK
Row3: 1-->1-->0 ERROR
仅供参考,我将复选框更改为文本字段并手动输入 1 或 0,这很好用...不是理想的解决方案,但...
所以,我猜在发布/分配“nyaktivstatus”(用户输入状态)时出了点问题
谁能在我的代码中发现问题?或者发现我没有看到的模式?
谢谢!
【问题讨论】:
-
它是因为只发送选中的复选框的值。在这里阅读答案。 stackoverflow.com/questions/11424037/…它可能会帮助你理解这个概念