如何在单个foreach循环中更新多个字段?

时间:2016-08-21 15:09:56

标签: php loops checkbox foreach

我有一个包含用户列表的表。每个人都分配了一个复选框。当管理员选择一些复选框时,我的脚本会将一些信息保存到所选用户的数据库中。

现在,我的问题是,除了该复选框,我想要一个文本输入类型,以便管理员也可以为该用户留下评论。因此,当选中复选框并且输入类型包含一些数据时,数据也会被保存。

这是我到目前为止所做的事情(除了明显的安全问题,我还没有考虑过):

我的列表是由每个用户的循环生成的:

<input type=text name="infoAdicional" value="'.$x['infoAdicional'].'">
<input name="enviar['.$x['userID'].']" type="checkbox" value="'.$x['userEmail'].'">

我已经获取了该信息并为该复选框生成了一个foreach循环,但无法从文本字段中获取其他信息以进行保存(它确实更新了其他值:

        $userID = $_POST['enviar']; 
        $infoAdicional = $_POST['infoAdicional'];
        foreach ($userID as $id => $email) {
            $sql = "UPDATE cursosUsuarios 
                    SET estadoCertificado = 'pending', 
                    infoAdicional='$infoAdicional'
                    WHERE userID = '$id'
                    AND email = '$email'
                    ";
            ... 
        }

我认为这是因为$infoAdicional = $_POST['infoAdicional'];应该在循环中,但只是将其插入其中,让每个拥有所选复选框的用户都有相同的附加信息,它会自行重复。

2 个答案:

答案 0 :(得分:2)

如果将变量$infoAdicional放入循环中,则无关紧要。问题是具有名称的最后一个输入字段将覆盖所有字段,因此您将只记录最后一个用户的注释。您需要更改的是,使用[]名称语法,就像使用复选框一样。

因此,备注字段的名称属性看起来像name="infoAdicional['.$x['userID'].']",在循环中,您可以将infoAdicional[USERID]分配给$infoAdicional

所以你的代码看起来像这样

$userID = $_POST['enviar']; 
foreach ($userID as $id => $email) {
      $infoAdicional = $_POST['infoAdicional'][$id];
      $sql = "UPDATE cursosUsuarios 
                SET estadoCertificado = 'pending', 
                infoAdicional='$infoAdicional'
                WHERE userID = '$id'
                AND email = '$email'
                ";
      ... 
}

您的HTML代码

<input type=text name="infoAdicional['.$x['userID'].']" value="'.$x['infoAdicional'].'">
<input name="enviar['.$x['userID'].']" type="checkbox" value="'.$x['userEmail'].'">

答案 1 :(得分:2)

将输入参数更改为:

<input type=text name="enviar['.$x['userID'].']['infoAdicional']" value="'.$x['infoAdicional'].'"> 
<input name="enviar['.$x['userID'].']['email']" type="checkbox" value="'.$x['userEmail'].'">

因此您的数据将坚持特定用户。然后你的循环将是这样的:

$userInfo = $_POST['enviar']; //Info here, right?
foreach ($userInfo as $userId => $info) {
$sql = "UPDATE cursosUsuarios 
        SET estadoCertificado = 'pending', 
        infoAdicional='$info['infoAdicional']'
        WHERE userID = '$userId '
        AND email = '$info['email']'
        ";
   ... 
}

我已经保存了你的语法,因为你的工作就是填写准备好的陈述等。