Eviter une boucle

Eléphanteau du PHP | 18 Messages

11 avr. 2008, 13:32

Salut à tous,

J'ai une liste de produits avec checkbox pour selectionner se que l'on veut.
Dans un tableau

Code : Tout sélectionner

$_SESSION['panier']
j'ai en mémoire les produits choisit auparavent.
J'aimerai visionner ma liste de produits et faire en sorte que les produits contenu dans le tableau Session soit coché.

Voici le code qui affiche la liste de produit:

Code : Tout sélectionner

while($data = mysql_fetch_assoc($request)) { if ($data['final_price_promo'] == '') { $final_price = $data['final_price']; } else { $final_price = $data['final_price_promo']; } echo '<tr> <td class="directbuy" width="90" align="center"><input type="checkbox" name="select[]" value="p' . $data['products_id'] . 'c' . $data['couleur'] . 't' . $data['taille'] . '-' . $data['products_name'] . '-' . $data['taille'] . '-' . $data['couleur'] . '-' . $final_price . '"' . $check . ' /></td> <td class="directbuy_ref" width="50">' . $data['products_ref'] . '</td> <td class="directbuy_nom" width="260">' . $data['products_name'] . '</td> <td class="directbuy" width="130" align="center">' . $data['couleur'] . '</td> <td class="directbuy" width="90" align="center">' .$data['taille'] . '</td> <td class="directbuy_check" width="100" align="center"><input class="quantite" type="text" name="p' . $data['products_id'] . 'c' . $data['couleur'] . 't' . $data['taille'] . '" ' . $quantite . ' /></td> </tr>'; }
Le tableau Session est formé de la sorte dans la page qui récapitule la commande que l'on veut passer

Code : Tout sélectionner

foreach ( $_POST["select"] AS $value ){ $data = explode("-", $value); if ((!empty($_POST[$data[0]])) && ($_POST[$data[0]] != 0)) { $prix= $data[4] * $_POST[$data[0]]; $prix_total += $prix; $prix_unitaire= sprintf("%01.2f", $data[4]); echo '<tr> <td class="main"> <table border="0" cellpadding="0" cellspacing="0"> <tr><td class="main" height="10" width="100%"></td></tr> <tr><td class="main_bold" width="720">' . tep_draw_separator('pixel_trans.gif', '10', '1') . '-&nbsp;' . $data[1] . '<input type="hidden" name="select[]" value="'. $data[1] . '-' . $_POST[$data[0]] . '-' . $data[3] . '-' . $data[2] . '-' . $prix_unitaire . '-' . $prix . '-' . $prix_total . '" /></td></tr> <tr><td class="main" width="720">' . tep_draw_separator('pixel_trans.gif', '30', '1') . 'Quantité : ' . $_POST[$data[0]] . '</td></tr> <tr><td class="main" width="720">' . tep_draw_separator('pixel_trans.gif', '30', '1') . 'Couleur : ' . $data[3] . '</td></tr> <tr><td class="main" width="720">' . tep_draw_separator('pixel_trans.gif', '30', '1') . 'Taille : ' . $data[2] . '</td></tr> <tr><td class="main" width="720">' . tep_draw_separator('pixel_trans.gif', '30', '1') . 'Prix unitaire : ' . $prix_unitaire . ' Euros</td></tr> <tr><td class="main" width="720">' . tep_draw_separator('pixel_trans.gif', '30', '1') . 'Sous-total : ' . $prix . ' Euros</td></tr> </table> </td> </tr>'; //mise en memoire session $_SESSION['panier'][] = array('nom'=>$data[1], 'couleur'=>$data[3], 'taille'=>$data[2], 'quantite'=>$_POST[$data[0]]); } }

Normalement j'ai ma condition qui va permettre de coché ou non les produits concerné mais je n'arrive pas à afficher.
J'ai déjç la boucle qui parcoure le tableau de la requète pour faire la liste, si je fais une boucle pour parcourir le tableau Session, je vais ma liste en double, je ne sais pas comment faire.

Mammouth du PHP | 881 Messages

12 avr. 2008, 03:21

Tu as certainement des Id numériques de tes produits.
Tu pourrais utiliser ces id numériques pour les repérer plus facilement.
Voici le principe que je te propose

Dans ton enregistrement des valeurs $_Session, tu ajoute un élément qui s'appelle 'id' et dans lequel tu mets la valeurs que tu tires de ta base de données.

Dans ta boucle d'affichage de produits, tu fais un petit saut dans ton tableau $_Session['panier'] et y vérifies si $_sessions['panier'][id] y est. Si oui checkbox checked Si non, on passe.
Soyez artisans de paix

Eléphanteau du PHP | 18 Messages

12 avr. 2008, 15:01

Merci pour ta réponse, je viens enfin de trouver une résolution à mon problème:

Voila comment ca a fonctionner:

Code : Tout sélectionner

while($data = mysql_fetch_assoc($request)) { if ($data['final_price_promo'] == '') { $final_price = $data['final_price']; } else { $final_price = $data['final_price_promo']; } $check = ''; $quantite = ''; for($i=0;$i<count($_SESSION['panier'][$data['parent_id']]);$i++) { if(($_SESSION['panier'][$data['parent_id']][$i]['nom'] == $data['products_name']) && ($_SESSION['panier'][$data['parent_id']][$i]['couleur'] == $data['couleur']) && ($_SESSION['panier'][$data['parent_id']][$i]['taille'] == $data['taille'])) { $check = ' checked="checked"'; $quantite = 'value="' . $_SESSION['panier'][$data['parent_id']][$i]['quantite'] . '" '; break; } } echo '<tr> <td class="directbuy" width="90" align="center"><input type="checkbox" name="select[]" value="p' . $data['products_id'] . 'c' . $data['couleur'] . 't' . $data['taille'] . '-' . $data['products_name'] . '-' . $data['taille'] . '-' . $data['couleur'] . '-' . $final_price . '-' . $data['parent_id'] . '"' . $check . ' /></td> <td class="directbuy_ref" width="50">' . $data['products_ref'] . '</td> <td class="directbuy_nom" width="260">' . $data['products_name'] . '</td> <td class="directbuy" width="130" align="center">' . $data['couleur'] . '</td> <td class="directbuy" width="90" align="center">' .$data['taille'] . '</td> <td class="directbuy_check" width="100" align="center"><input class="quantite" type="text" name="p' . $data['products_id'] . 'c' . $data['couleur'] . 't' . $data['taille'] . '" ' . $quantite . ' /></td> </tr>'; }