Eviter une boucle

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Eviter une boucle

par bibo341 » 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>'; }

par Patriboom » 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.

Eviter une boucle

par bibo341 » 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.