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:
Ensuite ma page traitement, du moins les zones en question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
d'abord la récupération du form (testé, tous est bien récupérer)
Donc le foreach est semble t-il correct, la requête le semble aussi et pourtant elle marche que sur la dernière.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Mais pour les options donc le foreach, là y a rien à faire il m'affiche que la dernière options.
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.
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.
Partager