PHP:如何避免foreach中foreach的重复结果?
我有一个项目列表:userID、pagoID、cursoroid 注意:我正在测试这个概念,还没有添加任何安全检查 列表是通过编程生成的,我从数据库中检索userID和pagoID。我在每行旁边添加了一个文本输入字段,以便管理员手动添加光标 我做了一个while循环,以便列出:PHP:如何避免foreach中foreach的重复结果?,php,mysql,loops,foreach,Php,Mysql,Loops,Foreach,我有一个项目列表:userID、pagoID、cursoroid 注意:我正在测试这个概念,还没有添加任何安全检查 列表是通过编程生成的,我从数据库中检索userID和pagoID。我在每行旁边添加了一个文本输入字段,以便管理员手动添加光标 我做了一个while循环,以便列出: while($x=mysqli_fetch_array($mostrarPagos)){ echo $x['pagoID']; echo $x['userID']; echo '<input name="verif
while($x=mysqli_fetch_array($mostrarPagos)){
echo $x['pagoID'];
echo $x['userID'];
echo '<input name="verificarPago['.$x['pagoID'].']" type="text">';
};
表中有两行包含此信息,光标取自我在输入字段中键入的内容:
当我点击提交时,结果如下:
这是我的疑问:
SELECT DISTINCT pagos.pagoID, pagos.userID, pagos.pagoMonto, pagos.pagoFecha,
pagos.pagoMedioUtilizado, pagos.pagoCuentaOrigen, pagos.pagoSucursal,
pagos.pagoCodigo,
usuarios.userID, usuarios.userEmail,
GROUP_CONCAT(DISTINCT cursos.nombreCurso, ' cid:', cursosUsuarios.cursoID ORDER BY cursosUsuarios.cursoID SEPARATOR '<br>') AS 'cursos'
FROM pagos LEFT JOIN usuarios
ON pagos.userID = usuarios.userID
LEFT JOIN cursosUsuarios
ON usuarios.userID = cursosUsuarios.userID
LEFT JOIN cursos
ON cursosUsuarios.cursoID = cursos.cursoID
AND cursos.estadoCurso = 'abierto'
JOIN pagosVerificados
WHERE pagos.pagoID NOT IN (SELECT pagoID FROM pagosVerificados)
GROUP BY pagos.pagoID
如果您需要问题的答案,请执行以下操作:
$alreadyHave = array();
while($x=mysqli_fetch_array($mostrarPagos)){
if(in_array($x['pagoID'].'-'.$x['cursoID'], $alreadyHave)) {
continue;
}
echo $x['pagoID'];
echo '<input name="userID['.$x['userID'].']" value="'.$x['userID'].'"type="text">';
echo '<input name="verificarPago['.$x['pagoID'].']" type="text">';
};
首先,如果您不想显示userID(这是您的第一个设计选择),您可以将其放入隐藏的输入中
<input type="hidden" id='userID' value="<? echo $x['pagoID'];?>"/>
没有测试
祝您好运在您的选择查询中使用“按页码分组”、“按光标分组”您也可以使用DISTINCT。但是,您没有包括您选择的位置,因此我们不知道您是否正在使用其中任何一个。警告:在使用mysqli时,您应该使用和将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。千万不要将$\u POST或$\u GET数据直接放入查询中,如果有人试图利用您的错误,这可能是非常有害的。
SELECT DISTINCT pagos.pagoID, pagos.userID, pagos.pagoMonto, pagos.pagoFecha,
pagos.pagoMedioUtilizado, pagos.pagoCuentaOrigen, pagos.pagoSucursal,
pagos.pagoCodigo,
usuarios.userID, usuarios.userEmail,
GROUP_CONCAT(DISTINCT cursos.nombreCurso, ' cid:', cursosUsuarios.cursoID ORDER BY cursosUsuarios.cursoID SEPARATOR '<br>') AS 'cursos'
FROM pagos LEFT JOIN usuarios
ON pagos.userID = usuarios.userID
LEFT JOIN cursosUsuarios
ON usuarios.userID = cursosUsuarios.userID
LEFT JOIN cursos
ON cursosUsuarios.cursoID = cursos.cursoID
AND cursos.estadoCurso = 'abierto'
JOIN pagosVerificados
WHERE pagos.pagoID NOT IN (SELECT pagoID FROM pagosVerificados)
GROUP BY pagos.pagoID
$alreadyHave = array();
while($x=mysqli_fetch_array($mostrarPagos)){
if(in_array($x['pagoID'].'-'.$x['cursoID'], $alreadyHave)) {
continue;
}
echo $x['pagoID'];
echo '<input name="userID['.$x['userID'].']" value="'.$x['userID'].'"type="text">';
echo '<input name="verificarPago['.$x['pagoID'].']" type="text">';
};
$verificarPago = "INSERT pagosVerificados SET ";
$verificarPago.= " userID = ".(int)$usuario;
$verificarPago.= ", pagoID = ".(int)$pago;
$verificarPago.= ", cursoID = ".(int)$curso;
<input type="hidden" id='userID' value="<? echo $x['pagoID'];?>"/>
echo '<input name="userID['.$x['userID'].']" value="'.$x['userID'].'" type="text">
echo '<input name="userID['.$x['pagoID'].']" value="'.$x['userID'].'" type="text">
$userID = $_POST['userID'];
//foreach ($userID as $usuario) {
$verificarPago = "INSERT pagosVerificados SET userID = '$userID[$pago]', pagoID = '$pago', cursoID = '$curso'";