我有一個項目列表:userID,pagoID,cursoID。 (注:目前我正在測試這個概念,沒有添加任何安全檢查)。PHP:如何避免在foreach內的foreach重複結果?
通過編程生成列表,在這裏我從數據庫中的用戶ID 檢索和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
使用GROUP BY pagoID,cursoID在你的SELECT查詢 – num8er
你也可以使用DISTINCT。然而,你沒有包括你在SELECT中的位置,所以我們不知道你是否在使用這些選項。 –
**警告**:使用'mysqli'時,您應該使用[參數化查詢](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和['bind_param']( http://php.net/manual/en/mysqli-stmt.bind-param.php)將用戶數據添加到您的查詢中。 **不要**使用字符串插值或連接來完成此操作,因爲您創建了嚴重的[SQL注入漏洞](http://bobby-tables.com/)。 **絕不**將'$ _POST'或'$ _GET'數據直接放入查詢中,如果有人試圖利用您的錯誤,這會非常有害。 – tadman