Boucles imbriquées sur résultat d'un SELECT
Bonsoir à tous,
Je poste ici car je pense que mon soucis est plus liée à la synthax.
Contexte :
J'ai un formulaire où les visiteur vont choisir un nombre de titre et des options
Le nombre de titre se gère avec un liste déroulante, mais les options c'est des case à coché.
Ensuite au vue de cette structure, je n'utilise pas de panier car il n'y a pas en soit de catalogue et c'est juste un choix de deux critères.
Le problème:
C'est surtout liée aux checkbox que pourtant mon foreach arrive à récupérer.
Et ma requête marche, mais le soucis c'est que le foreach ne marche pas quand je remplace mon echo par ma requête.
En faites à l'affichage du résultat plus bas dans ma page seul la dernière options choisi est affichable et la requête ne semble pas ce faire à chaque itération.
Les codes :
Le formulaire, je met que les checkbox car peut être lié au soucis:
Code:
1 2 3
| <input type = "checkbox" name="options[]" value="OMA01" id="master_cd" /> <label for="master_cd">Master CD</label>
<input type="checkbox" name="options[]" value="OMA02" id="reference_cd" /> <label for="reference_cd">Référence CD d'écoute</label>
<input type="checkbox" name="options[]" value="OMA03" id="stems" /> <label for="stems">Stems</label> |
Ensuite ma page traitement, du moins les zones en question :
d'abord la récupération du form (testé, tous est bien récupérer)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
// .....les test formulaire précédent
$options = $_POST['options'];
if (sizeof($options) != 0) {
foreach ($options as $valeur){// Requête si des options sont cochées (au moins 1) en utilisant une boucle pour gérer plusieur option
$devis_opt = sqlquery("SELECT prestations.ref_prestation,
prestations.cat_prestation,
prestations.qte_prestation,
prestations.label_prestation,
prestations.tarif_prestation,
categories.id,
categories.label_categorie
FROM prestations
LEFT JOIN categories
ON prestations.cat_prestation = categories.id
WHERE categories.id = '".$opt_cat."' AND prestations.ref_prestation = '".$valeur."'", 1);
//echo $result = $valeur.' ';
} // on ajoute la requête pour les titres avec "1" car seul 1 résultat sera retourné
echo $result = count($devis_opt);
$devis_track = sqlquery("SELECT prestations.ref_prestation,
prestations.cat_prestation,
prestations.qte_prestation,
prestations.label_prestation,
prestations.tarif_prestation,
categories.id,
categories.label_categorie
FROM prestations
LEFT JOIN categories
ON prestations.cat_prestation = categories.id
WHERE categories.id = '".$cat."' AND prestations.ref_prestation = '".$nb_titre."'", 1);
} // Aucune option de cochée, requête uniquement sur les nbrs de titre.
else {
$devis_track = sqlquery("SELECT prestations.ref_prestation,
prestations.cat_prestation,
prestations.qte_prestation,
prestations.label_prestation,
prestations.tarif_prestation,
categories.id,
categories.label_categorie
FROM prestations
LEFT JOIN categories
ON prestations.cat_prestation = categories.id
WHERE categories.id = ".$cat." AND prestations.qte_prestation = ".$nb_titre, 1);
} |
Donc le foreach est semble t-il correct, la requête le semble aussi et pourtant elle marche que sur la dernière.
Alors que le test d'echo lui marche bien.
C'est la que j'en suis à rien comprendre depuis avant hier soir.
Et pour l'affichage :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| echo '<tr><br />';
echo '<td>'.$devis_track['ref_prestation'].'</td><br />';
echo '<td>'.$devis_track['qte_prestation'].'</td><br />';
echo '<td>'.$devis_track['label_prestation'].'</td><br />';
echo '<td>'.$devis_track['label_categorie'].'</td><br />';
echo '<td>'.$devis_track['tarif_prestation'].'</td><br />';
echo '</tr>';
//$row++;
//}
if (sizeof($options) != 0)
{
// Boucle pour l'affichage des options choisi sur le devis.
//while ($row = mysql_fetch_assoc($devis_opt)) {
for ($i = 0; $i < count($devis_opt); $i++){
echo '<tr><br />';
echo '<td>'.$row = $devis_opt['ref_prestation'].'</td><br/>';
echo '<td>'.$row = $devis_opt['qte_prestation'].'</td><br/>';
echo '<td>'.$row = $devis_opt['label_prestation'].'</td><br/>';
echo '<td>'.$row = $devis_opt['label_categorie'].'</td><br/>';
echo '<td>'.$row = $devis_opt['tarif_prestation'].'</td><br/>';
echo '</tr><br />';
//$row++;
}
}
?>
</table>
</div>
<!-- Tableau pour le total -->
<div id="">
<table>
<tr>
<td>TOTAL:</td>
<td><?php
$tarif = '0';
if (!count($row['tarif_prestations']) > 0) {
$tarif = $devis_track['tarif_prestation'];
echo $tarif;
}
else {
$tarif = $devis_track['tarif_prestation'];
for ($i = 0; $i < count($row['tarif_prestations']); $i++) {
$tarif += $row['tarif_prestation'];
}
echo $tarif.'<br/>';
echo $row['tarif_prestation'];
}
?></td>
</tr>
</table> |
Donc actuellement j'ai bien les données du nombre de titre, car là j'ai directement en BDD une Rows par quantité possible de titres.
Mais pour les options donc le foreach, là y a rien à faire il m'affiche que la dernière options.:aie::calim2:
Donc ma question ou je ne trouve aucune réponse c'est :
Pour quoi le foreach ne se fait pas avec ma requête ?
Ou alors, Quels erreurs de synthax ais-je fais ?
Car là je sèche totalement, sa me dépasse à dire vrai.:aie:
Je vous remercie de votre aide, et des pistes que vous pourrez m'apporter.
Si une explication n'est pas précise ou clair n'hésite pas à me demandé.
Encore Merci.
PS : pour les requête sqlquery est une fonction que j'utilise, donc au besoin je peux vous la montré ou sinon remettre mon code avec mysql_query, car même avec la fonction native de php j'ai le même problème.