我有一个项目列表: userID , pagoID , cursoID 。
(注意:我现在正在测试这个概念,还没有添加任何安全检查)。
列表以编程方式生成,我从数据库中检索 userID 和 pagoID 。我在每行旁边添加了一个文本输入字段,以便管理员手动添加 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取自我在输入字段中输入的内容):
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
答案 0 :(得分:1)
如果您需要回答问题,请执行以下操作:
$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
ALSO 清理您的INSERT
数据库(由于您的sql可注入代码,不会被错误敏感的开发人员拒绝投票)(:
$verificarPago = "INSERT pagosVerificados SET ";
$verificarPago.= " userID = ".(int)$usuario;
$verificarPago.= ", pagoID = ".(int)$pago;
$verificarPago.= ", cursoID = ".(int)$curso;
答案 1 :(得分:1)
首先,如果您不想显示它(这是您的第一个设计选择),您可以将userID放入隐藏的输入中
<input type="hidden" id='userID' value="<? echo $x['pagoID'];?>"/>
我不确定双重输入,但为什么不使用一个foreach,并为每个输入使用索引,就像你为verificarPago所做的那样 也许你可以替换
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'";
(未测试)
祝你好运