gpt4 book ai didi

PHP:如何避免 foreach 中的重复结果?

转载 作者:行者123 更新时间:2023-11-29 06:10:20 25 4
gpt4 key购买 nike

我有一个项目列表:userIDpagoIDcursoID

(注意:我目前正在测试这个概念,还没有添加任何安全检查)。

该列表以编程方式生成,我从数据库中检索 userIDpagoID。我在每行旁边添加了一个文本输入字段,供管理员手动添加 cursoID

为了列出列表,我做了一个 while 循环:

while($x=mysqli_fetch_array($mostrarPagos)){
echo $x['pagoID'];
echo $x['userID'];
echo '<input name="verificarPago['.$x['pagoID'].']" type="text">';
};

我已经添加了一个提交按钮,当它被提交时,循环应该向数据库中插入一条包含这三个信息的新记录。问题是我不知道如何检索 userID,因为 $x['userID'] 将仅存在于创建表的 while 循环中。

所以我尝试将 userId 放入输入文本中,并将其设置为只读字段。然后在另一个 foreach 循环中执行一个 foreach 循环。

while($x=mysqli_fetch_array($mostrarPagos)){
echo $x['pagoID'];
echo '<input name="userID['.$x['userID'].']" value="'.$x['userID'].'" type="text">';
echo '<input name="verificarPago['.$x['pagoID'].']" type="text">';
};

if(isset($_POST['submit'])) {
$verificar = $_POST['verificarPago'];
foreach ($verificar as $pago => $curso) {
$userID = $_POST['userID'];
foreach ($userID as $usuario) {
$verificarPago = "INSERT pagosVerificados SET userID = '$usuario', pagoID = '$pago', cursoID = '$curso'";
$cargarPago = mysqli_query($conectar, $verificarPago);
}
if ($verificarPago && $cargarPago) {

}
}

表格中有两行包含此信息(cursoID 取 self 在输入字段中键入的内容):

userID. 17 pagoID. 4 cursoID. 18
userID. 18 pagoID. 5 cursoID. 15

点击提交后的结果是这样的:

userID. 17 pagoID. 4 cursoID. 18
userID. 18 pagoID. 4 cursoID. 18
userID. 17 pagoID. 5 cursoID. 15
userID. 18 pagoID. 5 cursoID. 15

这是我的查询:

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">';
};


但是从技术上讲,最好在迭代之前就已经拥有唯一的数据,所以只需将其放在 SELECT 查询的末尾:GROUP BY pagoID, cursoID

将您的 INSERT 清理到数据库(以免因为您的 sql 可注入(inject)代码而被对错误敏感的开发人员否决)(:

$verificarPago = "INSERT pagosVerificados SET ";
$verificarPago.= " userID = ".(int)$usuario;
$verificarPago.= ", pagoID = ".(int)$pago;
$verificarPago.= ", cursoID = ".(int)$curso;

关于PHP:如何避免 foreach 中的重复结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38622986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com