Récupérer par session

Signaler
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009
-
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009
-
Bonjour,

J'ai posé une question sur un forum on l'on pas mal avancé, mais on est resté bloqué sur un petit problème, peut être pourriez vous me filer un coup de main.
Je m'explique, je suis en train de créer un site oscommerce, et je me suis fais une partie commande express.
C'est asser simple, les revendeur après identification peuvent avoir accès la partie commande express qui leur affiche la liste complète des produits par catégorie (j'ai une page destiné à la collection homme, une autre pour collection femme...).

Il peut donc selectionner ces produits à l'aide d'une checkbox et mettre les quantités.
Une fois son choix fais, il a le choix entre cliquer sur visionner sa commande envoyer la commande ou bien, aller sur la page d'une autre collection et choisir d'autre produits.

Mon problème est que j'aimerai garder en mémoire les produits déjà coché dans les différentes collection.
Par exemple:
  - Je choisis 2 produits dans la collection homme
  - Je clique sur visionner ma commande, mais je me rent compte que j'ai oublié quelque chose
  - Je clique sur retour et je rajoute 1 article de la collection homme toute en verifiant que les produits que j'ai déjà selectionnés sont bien cochés
  - Je vais également dans la collection femme pour choisir 2 articles
  - Je re-clique sur visionner ma commande et la j'ai mes 5 produits qui sont biens présents.

J'ai voulu utilisé la session, se qui me parrait le mieu car pas d'accès à la base pour stocker les produits selectionnés.
J'arrive à récupéré les produits séléctionnés, à les mettre en mémoire session, mais mon soucis et au moment du retour sur la page du listing produits, je n'arrive à récupérer les produits coché ou bien ma liste s'affiche en double...

Voici la partie de la page viosionner ma commande qui récupère les produits selectionné et les place en session:

$prix_total=0;
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">
            ----
,
       ----
' . tep_draw_separator('pixel_trans.gif', '10', '1') . '-&nbsp;' . $data[1] . ',
       ----
' . tep_draw_separator('pixel_trans.gif', '30', '1') . 'Quantité : ' . $_POST[$data[0]] . ',
       ----
' . tep_draw_separator('pixel_trans.gif', '30', '1') . 'Couleur : ' . $data[3] . ',
       ----
' . tep_draw_separator('pixel_trans.gif', '30', '1') . 'Taille : ' . $data[2] . ',
       ----
' . tep_draw_separator('pixel_trans.gif', '30', '1') . 'Prix unitaire : ' . $prix_unitaire . ' Euros,
       ----
' . tep_draw_separator('pixel_trans.gif', '30', '1') . 'Sous-total : ' . $prix . ' Euros,
     

      </td>
    </tr>';
  
  //mise en memoire session
    $_SESSION['panier'][] = array('nom'=>$data[1],
         'couleur'=>$data[3],
         'taille'=>$data[2],
         'quantite'=>$_POST[$data[0]]);
 


 }


Avec la personne sur l'autre forum, on a essayer ce script sur la page qui liste les produits d'une collection et qui devrait coché les produits selectionnés ultérieurement (page appelé lorsqu'on clique sur retour de la page visionner ma commande):

for($i=0;$i<count($_SESSION['panier']);$i++) {
              $data[]= array('nom'=>$_SESSION['panier'][$i]['nom'],
                                    'couleur'=>$_SESSION['panier'][$i]['couleur'],
                                    'taille'=>$_SESSION['panier'][$i]['taille'],
                                    'quantite'=>$_SESSION['panier'][$i]['quantite']); 
                                   
   }


   $count = count($data);


   foreach(range(0, $count) as $number) {
                $num.= $data[$number];
              }


              echo $num;

Voila sauf qu'on a aucun resultat sur le $num
J'ai fais un print_r($data); j'ai bien les les produits listé.
Quelqu'un aurait-il une idée??

7 réponses

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Hello,

tu n'oublies pas de mettre session_start() dans tes pages, avant toute autre chose ?
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009

Non non c'est site oscommerce pour revendeur et pour rentré dans la partie boutique, on est obligé de rentré un login mdp.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Ca n'a pas de rapport : pour utiliser les sessions, tu dois obligatoirement les initialiser via un session_start() accessible par toutes yes pages. Je te conseille d'aller lire la doc sur les sessions sur php.net.
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009

Non mais c'est sur que ma session est démarrer, j'ai fait en sorte que si la personne n'est pas loger il est redirigé vers la page principal avec demande de rentrer le login mot de passe.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Bon, comme tu veux.
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009

Pour être sur, j'ai tout de même vérifié, chacune de smes pages comporte un include qui va chercher un fichier ou il y a bien un session_start().

De toute manière si la session n'était pas démarrer, si je fais un print_r($_SESSION) je devrais rien avoir non? Or j'ai tout les renseignement sur la personne loger.

Aussi j'ai vérifier par un print_r($_SESSION['panier']) il me ressort bien les produits les produits selectionné auparavent.

En fait à la base, mon souci est que je ne sait pas comment eviter une boucle, j'ai ce script pour faire ma liste de produits et j'avais essayer le foreach pour lire le tableau qui contient les produits déjà choisit mais il me double ma liste de produit.

Voici le code qui crée la liste ainsi que le foreach:

$request = tep_db_query("SELECT c.parent_id, pd.products_id, pd.products_name, p.products_ref, p.products_price, s.specials_new_products_price, taille.products_options_values_id, couleur.products_options_values_id, couleur.products_options_values_name AS couleur, taille.products_options_values_name AS taille, pa.options_values_price, (
pa.options_values_price + p.products_price ) AS final_price, (pa.options_values_price + s.specials_new_products_price ) AS final_price_promo
FROM products_stock ps, products_description pd LEFT JOIN specials s USING(products_id), products_options_values couleur, products_options_values taille, products_attributes pa, products p, products_to_categories p2c, categories c
WHERE pd.products_id = ps.products_id
AND pd.products_id = pa.products_id
AND pd.products_id = p.products_id
AND p2c.products_id = pd.products_id
AND p2c.categories_id = c.categories_id
AND c.parent_id = 4
AND SUBSTRING( ps.products_stock_attributes FROM 3 FOR 2 ) = couleur.products_options_values_id
AND SUBSTRING( ps.products_stock_attributes FROM 8 FOR 2 ) = taille.products_options_values_id
AND pa.options_values_id = taille.products_options_values_id
ORDER BY pd.products_name, couleur.products_options_values_id, taille.products_options_values_id ");
                
while($data = mysql_fetch_assoc($request)) 
  { 
            if ($data['final_price_promo'] == '') {
                $final_price = $data['final_price'];
            } else { 
                $final_price = $data['final_price_promo'];
            }
            
            foreach ($_SESSION["select"] AS  $value ){
            $data_table = explode("-", $value);
                
                if(($data_table[1] == $data['products_name']) && ($data_table[3] == $data['couleur']) && ($data_table[2] == $data['taille'])) {
                    $check = ' checked="checked"';
                    $quantite = 'value="' . $_SESSION[$data_table[0]] . '" ';
                } else {
                    $check = '';
                    $quantite = '';
                }
            
            
            echo '<tr>
            <td class="directbuy" width="90" align="center">. $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">. $data['products_id'] . 'c' . $data['couleur'] . 't' . $data['taille'] . '" ' . $quantite . ' /></td>
            </tr>';
            
            }
    }

A la place du foreach j'ai egalement essayer avec un FOR mais j'ai le même résultat.
J'ai donc poster sur un forum et un gars sympa a essayer de m'aider en evitant le foreach et en passant par le code comme expliqué plus haut mais on arrive pas à avoir de bon résultats...

J'espère trouvé sur ceux forum quelqu'un qui pourrait m'aider, cette commande express commence vraiment à me sortir des yeux ca fait un petit moment que je suis dessus et tout seul j'ai du mal à avancer.
Si vous arriveriez à m'aider se serai vraiment vraiment sympa.
Messages postés
116
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
10 mars 2009

Personne aurait une idée??


Si c'est dur à comprendre dites le moi, j'essai de mieu expliquer, je vous donne plus d'infos si necessaire.


Faut vraiment que j'arrive à finir ce script je suis pas loin à mon avis, faut juste me donner une astuce pour avancé dans ce script. J'ai essayer pas mal de truc mais tout seul je n'y arriverai pas je n'ai pas asser de connaissance.