我有一个包含用户列表的表。每个人都分配了一个复选框。当管理员选择一些复选框时,我的脚本会将一些信息保存到所选用户的数据库中。
现在,我的问题是,除了该复选框,我想要一个文本输入类型,以便管理员也可以为该用户留下评论。因此,当选中复选框并且输入类型包含一些数据时,数据也会被保存。
我的列表是由每个用户的循环生成的:
<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'];
应该在循环中,但只是将其插入其中,让每个拥有所选复选框的用户都有相同的附加信息,它会自行重复。
答案 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']'
";
...
}
我已经保存了你的语法,因为你的工作就是填写准备好的陈述等。