【问题标题】:combined arrays in foreach loop with if statement and query partially failingforeach 循环中的组合数组与 if 语句和查询部分失败
【发布时间】:2015-09-25 22:07:59
【问题描述】:

我有一个页面,其中包含从 mysql 表中提取的项目的简单列表。每个项目都属于两个类别之一。在数据库中,我有“状态”列。项目处于状态 1 或状态 0。每组一个。

在页面上的每个项目上,我都为表格中的行添加了一个带有主键的复选框。在页面上给定类别的每个项目中。我还有一个隐藏字段,其中 $_POST['Status'] 设置为对应于它当前所在的组。使用下面的代码,我将 Status 数组和 check_list (这是主键)正确合并到键和值中对。

我希望人们能够检查两个组中的复选框并通过单击一个按钮来更改状态,这实际上是将项目从一个组移动到另一个组。我有三个项目,我一直在两组之间跳来跳去。

第 1 组中的一切正常。我可以一次移动一个项目,直到它为空,一次两个项目,一次所有三个都没有问题。第 0 组不工作。我可以一次移动三个项目没有问题,我可以同时移动两个项目没有问题,但我一次只能移动一个项目。第二次来了,什么都没有。如果我选择该组中剩余的两个项目,则只有第一个会移动。

这是非常奇怪的行为。我认为这与foreach循环中if语句的执行方式有关,但我不确定如何解决。

function combine_arr($a, $b) { 
    $acount = count($a); 
    $bcount = count($b); 
    $size = ($acount > $bcount) ? $bcount : $acount; 
    $a = array_slice($a, 0, $size); 
    $b = array_slice($b, 0, $size); 
    return array_combine($a, $b); 
} 
if(isset($_POST['Move'])) {
    if(!empty($_POST['check_list'])) {
        $combined = combine_arr($_POST['check_list'], $_POST['Status']);
        foreach ($combined as $key => $value) {
            if($value == 1) {
                mysqli_query($con, "UPDATE items SET Status=0 WHERE ID=$key");
            }
            if($value == 0) {
                mysqli_query($con, "UPDATE items SET Status=1 WHERE ID=$key");
            }
        }
    }
}

这是页面上的相关 HTML,从启动操作的按钮开始...

<form action="index.php" method="post" id="itemCheck">
    <button form="itemCheck" class="button_Blue" type="submit" name="Move" value="Move">Move<span>selected</span></button>
</form>

...然后是第一组中的一个复选框...

<input type="hidden" form="itemCheck" name='Status[]' value='1'>
<input type="checkbox" form="itemCheck"name="check_list[]" value="<?php echo $row['ID']; ?>">

...最后是第二组中的一个复选框,除了隐藏字段的值之外,它是相同的。

<input type="hidden" form="itemCheck" name='Status[]' value='0'>
<input type="checkbox" form="itemCheck"name="check_list[]" value="<?php echo $row['ID']; ?>">

【问题讨论】:

  • 如果复选框是互斥的,为什么不使用单选按钮呢?
  • 我无法理解您的描述。请将 HTML 添加到问题中。

标签: php arrays if-statement foreach


【解决方案1】:

组合两个参数数组的方式行不通。仅提交选中的框,因此$_POST['check_list'][$n] 不对应于$_POST['Status'][$n]。您应该更改 HTML,以便 Status 输入的名称包含行 ID:

<input type="hidden" form="itemCheck" name="Status[<?php echo $row['ID']; ?>" value="0">

然后你可以像这样组合它们:

function combine_arr($a, $b) {
    $result = array();
    foreach ($a as $val) {
        $result[$val] = $b[$val];
    }
    return $result;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多