php中的while循环中的foreach循环给出了意外的结果

php中的while循环中的foreach循环给出了意外的结果,php,mysql,for-loop,while-loop,Php,Mysql,For Loop,While Loop,在过去的几个小时里,我一直在尝试这个方法以使其正确。来自数据库的动态复选框。我试图从foreach循环中获取值。有人能帮我吗 $sql_child = "SELECT muploadid, mupload_filename FROM nattachment na LEFT JOIN multipleupload mu ON mu.mupload_id = na.muploadid WHERE na.notetestid = '$id'"; $result_child = mysqli_query

在过去的几个小时里,我一直在尝试这个方法以使其正确。来自数据库的动态复选框。我试图从foreach循环中获取值。有人能帮我吗

$sql_child = "SELECT muploadid, mupload_filename FROM nattachment na LEFT JOIN multipleupload mu ON mu.mupload_id = na.muploadid WHERE na.notetestid = '$id'";
$result_child = mysqli_query($con, $sql_child);

    $childArrayFilename = array();
    while($row_child = mysqli_fetch_assoc($result_child)){
        $childArrayId[] = $row_child['muploadid'];
        $childArrayFilename[] = $row_child['mupload_filename'];
    }

$sql_parent = "SELECT mupload_filename FROM multipleupload";
$result_parent = mysqli_query($con, $sql_parent);
?>

<form action="database/db_update.php" method="POST">
    <?php
    while($row_parent = mysqli_fetch_array($result_parent)) {
        if(in_array($row_parent['mupload_filename'], $childArrayFilename)) {

           // foreach((array)$childArrayFilename as $result) { REMOVED
                echo "<input name='checkbox[]' type='checkbox' value='".$result."'checked='checked'/> ";
                echo "<input name='checkbox_hid[]' type='hidden' value='".$result."'checked='checked'/> ";
           // } REMOVED
        }
        else {
            echo "<input name='checkbox[]' type='checkbox' value='".$row_parent['mupload_filename']."'/> ";
            echo "<input name='checkbox_hid[]' type='hidden' value='".$row_parent['mupload_filename']."'/> ";
        }
        echo $row_parent['mupload_filename'];
        echo "<br>";
    }
    ?>
    <input type="submit" name="fm_submit" value="Update">
</form>
我需要这个

.----------.------------.
|   [✓]    |  ch7.jpg   |
:----------+------------:
|   [ ]    | tutor1.jpg |
:----------+------------:
|   [✓]    | tutor2.jpg |
:----------+------------:
|   [ ]    | ch1.jpg    |
:----------+------------:
|   [ ]    | ch2.jpg    |
:----------+------------:
|   [✓]    | ch3.jpg    |
:----------+------------:
|   [ ]    | ch4.jpg    |
:----------+------------:
| [Submit] |            |
'----------'------------'

在数组中使用$selected=($row\u parent['mupload\u filename',$childArrayFilename);您可以避免if-else循环,因为它不太可读

    $sql_child = "SELECT muploadid, mupload_filename FROM nattachment na LEFT JOIN multipleupload mu ON mu.mupload_id = na.muploadid WHERE na.notetestid = '$id'";
$result_child = mysqli_query($con, $sql_child);

    $childArrayFilename = array();
    while($row_child = mysqli_fetch_assoc($result_child)){
        $childArrayId[] = $row_child['muploadid'];
        $childArrayFilename[] = $row_child['mupload_filename'];
    }

$sql_parent = "SELECT mupload_filename FROM multipleupload";
$result_parent = mysqli_query($con, $sql_parent);
?>

<form action="database/db_update.php" method="POST">
    <?php
    while($row_parent = mysqli_fetch_array($result_parent)) {
        $selected = in_array($row_parent['mupload_filename'], $childArrayFilename);
                echo "<input name='checkbox[]' type='checkbox' value='".$row_parent['mupload_filename']."'". $selected ? "checked='checked'  /> " : " /> ";
               echo "<input name='checkbox_hid[]' type='hidden' value='".$row_parent['mupload_filename']."'". $selected ? "checked='checked'  /> " : " /> ";
        echo $row_parent['mupload_filename'];
        echo "<br>";
    }
    ?>
    <input type="submit" name="fm_submit" value="Update">
</form>
$sql\u child=“从nattachment na中选择muploadd,mupload\u文件名左连接mu.mupload\u id=na.muploadd,其中na.notetestid='$id';
$result\u child=mysqli\u查询($con,$sql\u child);
$childArrayFilename=array();
while($row\u child=mysqli\u fetch\u assoc($result\u child)){
$childArrayId[]=$row_child['muploaid'];
$childArrayFilename[]=$row_child['mupload_filename'];
}
$sql\u parent=“从multipleupload中选择mupload\u文件名”;
$result\u parent=mysqli\u query($con,$sql\u parent);
?>

删除for循环并向其添加父id后,代码将被修复

// foreach((array)$childArrayFilename as $result) { REMOVED
    echo "<input name='checkbox[]' type='checkbox' value='".$row_parent['mupload_id']."'checked='checked'/> ";
    echo "<input name='checkbox_hid[]' type='hidden' value='".$row_parent['mupload_id']."'checked='checked'/> ";
// } REMOVED
//foreach((数组)$childArrayFilename作为$result){已删除
回声“;
回声“;
//}删除

据我所知,您不需要foreach循环与
$row\u parent['mupload\u filename']不一样吗
?请尝试重复这一点,并告诉我它是否有效(很高兴能提供帮助:)请不要使用字符串连接(或变量替换)来构建SQL查询,尤其是当所讨论的变量来自用户输入时。您将面临SQL注入攻击。注意:
mysqli
的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的
mysql\u查询接口混淆。在你对程序性风格投入太多之前,值得换一种。示例:
$db=newmysqli(…)
$db->prepare(“…”)
过程接口是PHP 4时代的产物,当时引入了
mysqli
API,因此不应在新代码中使用。您只是粘贴了一些代码,但没有对一个问题进行任何解释,该问题应以打字错误/无法复制的形式结束……代码是不言自明的。我已经说得很简单了。关于这一点,没有什么是不言自明的。请在发布代码时,始终添加您更改的内容、更改原因或问题所在的备注。它不需要有很多文本,一句话就可以了。
// foreach((array)$childArrayFilename as $result) { REMOVED
    echo "<input name='checkbox[]' type='checkbox' value='".$row_parent['mupload_id']."'checked='checked'/> ";
    echo "<input name='checkbox_hid[]' type='hidden' value='".$row_parent['mupload_id']."'checked='checked'/> ";
// } REMOVED