begin process at 2012 05 31 02:29:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

Problème Session et array


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème Session et array

lundi 16 mars 2009 à 14:52:30 | Problème Session et array

taxitat

Bonjour à tous,

J'essaye de créer un panier d'achat. J'en suis au stade expérimental et pour ne pas me casser la tête, à ce stade je "remplis" mon panier à travers un formulaire.
Pour faire plus simple, je vous écris et vous commente mon code:

<?php
session_start();                                //démarrage de la session

$ref = $_POST['item'];    //Je recupère les données de mon formulaire
$qte = $_POST['qte'];

//Création du caddie
if (!empty($_SESSION['panier'])){}     //Si le 'panier' n'est pas vide, ne rien faire
else               //Par contre, si le 'panier' n'existe pas, je le crée
{
  $_SESSION['panier']=array(
  'refProduit' => $ref,
  'qteProduit' => $qte);
}

//je cherche dans le 'panier' si le produit est déjà dedans
$positionProduit = array_search($ref, $_SESSION['panier']);

//On reagarde si l'article existe déjà si oui on augmente sa qantité dans le panier
if ($positionProduit !== false){
$_SESSION['panier'][$positionProduit] += $qteProduit ;
}
//sinon on l'ajoute
else {
array_push( $_SESSION['panier']['refProduit'],$ref);
array_push( $_SESSION['panier']['qteProduit'],$qte);
}

//je visualise mon panier pour vérifier que mon code marche
  echo '<pre>';
  print_r($_SESSION['panier']);
  echo '</pre>';
 
//J'ai une petite sortie pour voir ce que j'ai envoyé
echo $ref. ' j\'en veux '. $qte; 
?>

A ce stade, voilà que j'ai deux problèmes:
1. print_r  m'affiche refProduit=>0 (quand ça devrait être toute autre chose) et ce, même si je mets un simple $ref ='Un test';
2. Si je renvois mon formulaire, la dernière ligne m'envoie bien ce que j'ai posté, mais print_r ne m'affiche que la 1e entrée Donc, je crois que ça n'enregistre rien dans mon array.

Pouvez-vous m'aider, svp?

Merci à tous de votre aide!

lundi 16 mars 2009 à 16:22:54 | Re : Problème Session et array

mike1310

ton $_POST['item'] est un tableau ou pas ? Comment est-il généré depuis l'html ? Fais voir ton code html pour voir ...
lundi 16 mars 2009 à 16:31:29 | Re : Problème Session et array

taxitat

Merci de ta réponse.

Voici mon code html:

    $reponse = mysql_query("SELECT * FROM favors WHERE id='.$id.') or die(mysql_error());
    while ($donnees = mysql_fetch_array($reponse) )
     {
 $name=$donnees[name];
};

echo '<form action="ajoutcaddie.html" method="post" id="formulaire">';
echo '<select name="qte">',"\n";
  for($i=1; $i<=50; $i++)  {
  echo '<option name ="qte" value="' .$i. '">' .$i. '</option>';
  }
  echo '</select>',"\n";

echo '<input type="hidden" name="item" value="'.$name.'">';
echo '<a href="javascript:document.getElementById(\'formulaire\').submit()">ajouter au panier</a></form>';

J'ai mon catalogue dans une bdd "favors" où je choisis une réf ("$id")
Bref, pour l'instant c'est sommaire mais je suis de l'avis d'y aller pas à pas et que si ça marche à ce stade ça marcher plus tard.
Ce que je ne comprends pas c'est que la dernière ligne de mon code php (echo $ref et $qte j'obtiens bien ce que j'avais rentré mais visiblement ça ne s'enregistre pas dans mon array. :(

lundi 16 mars 2009 à 16:44:35 | Re : Problème Session et array

mike1310

Réponse acceptée !
Alors je pense qu'il y a confusion entre les array et les valeur ... Deja pour commencer tu peux enlever le name ="qte" sur les options de ton select ... ça fait conflit avec le select actuellement.

Ensuite, ici :

if (!empty($_SESSION['panier'])){}     //Si le 'panier' n'est pas vide, ne rien faire
else               //Par contre, si le 'panier' n'existe pas, je le crée
{
  $_SESSION['panier']=array(
  'refProduit' => $ref,
  'qteProduit' => $qte);
}

$_SESSION['panier']['refProduit'] est une string ... et plus loin dans ton code tu fais ça :

array_push( $_SESSION['panier']['refProduit'],$ref);
ce qui signifierait que ton $_SESSION['panier']['refproduit'] est un array ... Il y a donc un conflit dans les données ...
De plus, quand tu fais ça :
$positionProduit = array_search($ref, $_SESSION['panier']);

Il ne me semble pas que le array_serach est récursif (c'est à dire qu'il n'ira pas regarder dans chacun de tes array contenu dans ta session panier .. IL ne lira que dans le panier et non pas dans panier => refProduit et panier => qteProduit).

Je te suggère donc de revoir la déclaration de tes variables de session lors de la création de ton 'caddie'
lundi 16 mars 2009 à 17:15:02 | Re : Problème Session et array

taxitat

Merci bcp pour tes conseils!

J'ai modifié mon formulaire comme suit:
echo '<form action="ajoutcaddie.html" method="post" id="formulaire">';
echo '<select name="qteProduit">',"\n";
  for($i=1; $i<=50; $i++)  {
  echo '<option name ="qte" value="' .$i. '">' .$i. '</option>';
  }
  echo '</select>',"\n";

echo '<input type="hidden" name="item" value="'.$name.'">';
echo '<a href="javascript:document.getElementById(\'formulaire\').submit()">
ajouter au panier</a></form>';

Je pense qu'il n'y a plus de conflit.

et ma page php:
<?php
session_start();                                //démarrage de la session

$ref = $_POST['item'];
$qte = $_POST['qteProduit'];

//Création du caddie
if (!empty($_SESSION['panier'])){}
else
{
  $_SESSION['panier']=array();
  $_SESSION['panier']['refProduit']=array();
  $_SESSION['panier']['qteProduit']=array();
}
//A présent, je crois que ce sont des arrays

//Je cherche dans le tableau session si le produit existe déjà
$positionProduit = array_search($ref, $_SESSION['panier']);
//Si je mets $_SESSION['panier']['refProduit'] ça me donne une erreur "wrong data type for second argument"

//On reagarde si l'article existe déjà si oui on augmente sa qantité dans le panier
if ($positionProduit !== false){
$_SESSION['panier'][$positionProduit] += $qteProduit ;
}
//sinon on l'ajoute
else { //array_push() empile un ou plusieur éléments à la fin d'un tableau
array_push( $_SESSION['panier']['refProduit'],$ref);
array_push( $_SESSION['panier']['qteProduit'],$qte);
}
//Dans les deux cas, j'obtiens un message: First argument should be an array (je croyais que c'était fait plus haut (!)

  echo '<pre>';
  print_r($_SESSION['panier']);
  echo '</pre>';
 
echo $ref. ' j\'en veux '. $qte;
?>

Bref, après avoir jetté un coup d'oeil au manuel, je me demande si avec un if(in_array) ce ne serait pas plus simple...
Qu'en penses-tu?

Merci encore de tes conseils!

lundi 16 mars 2009 à 17:32:43 | Re : Problème Session et array

taxitat

J'ai modifié mon code comme ça:
if (in_array ($ref, $_SESSION['panier']['refProduit']{
$_SESSION['panier']['qteProduit'] += $qte
}
else {
 array_push($_SESSION['panier']['refProduit'],$ref);
 array_push($_SESSION['panier']['qteProduit'],$qte);
 }

J'ai supprimé le array_search et ce qui venait par la suite.

En revanche, j'ai un message unexpected T_ELSE
Une petite idée d'où cela peut venir?

Merci encore de votre aide!
lundi 16 mars 2009 à 17:39:22 | Re : Problème Session et array

taxitat

Bref, je n'ai rien dit, je n'avais pas fermé les accolades

if (in_array ($ref, $_SESSION['panier']['refProduit'])){
$_SESSION['panier']['qteProduit'] += $qte;
}
else {
 array_push($_SESSION['panier']['refProduit'],$ref);
 array_push($_SESSION['panier']['qteProduit'],$qte);
 }

Cela dit, j'ai jrs le message array_push (...) First argument should in an array

Des idées?

Merci bcp
mardi 17 mars 2009 à 10:26:09 | Re : Problème Session et array

mike1310

Réponse acceptée !
C'est parce que $_SESSION['panier']['refProduit'] n'est pas un array :D

Cela vient surement du fait que ton test d'initialisation de ton panier n'est pas bon ... Essai de remplacer :
if (!empty($_SESSION['panier'])){}
else
{
  $_SESSION['panier']=array();
  $_SESSION['panier']['refProduit']=array();
  $_SESSION['panier']['qteProduit']=array();
}

par

if (isset($_SESSION['panier'] && isset($_SESSION['panier']['refProduit']) && isset($_SESSION['panier']['qteProduit']) && !empty($_SESSION['panier']['refProduit'])){}
else
{
  $_SESSION['panier']=array();
  $_SESSION['panier']['refProduit']=array();
  $_SESSION['panier']['qteProduit']=array();
}
mardi 17 mars 2009 à 10:59:48 | Re : Problème Session et array

taxitat

Mike1310, Merci bcp de ta réponse. J'avais modifié mon code comme suit:

<?php
session_start();                                //démarrage de la session

$ref = $_POST['item'];     //récupération des données postées
$qte = $_POST['qteProduit'];

//Création du caddie
if (!empty($_SESSION['panier'])){}
else
{
  $_SESSION['panier']=array();
  $_SESSION['panier']['refProduit']=array();
  $_SESSION['panier']['qteProduit']=array();
}

//Ajout nouveau produit
if (in_array ($ref, $_SESSION['panier']['refProduit'])){     //Si l' produit existe déjà => augmenter la quantité
$_SESSION['panier']['refProduit'][$ref] += $qte;
}
else {     //S'il n'existe pas => ajouter la nouvelle entrée
 array_push($_SESSION['panier']['refProduit'],$ref);
 array_push($_SESSION['panier']['qteProduit'],$qte);
 }

  echo '<pre>';     //On visualise le tableau
  print_r($_SESSION['panier']);
  echo '</pre>';
?>

Cela a l'air de bien marcher dans le cas d'un nouvel ajout mais pas dans le cas de vouloir rajouter des indices à un produit déjà existent.

Je pense que là je commence quand même la phase 2, à savoir, pouvoir modifier et/ou supprimer un article. Je crois que ce n'est plus qu'un problème de arrays à présent. ça a peut être l'air facile pour certains, mais vu que c'est des tableaux à 2 dimensions, je galère un peu (dsl, je suis debutant)

Cependant ton array isset me plait bien aussi (c'est à dire, si ça existe ok, sinon, crée-le)

Encore merci de m'éclairer avec ton avis. C'est tjrs sympa d'avoir une 2e opinion et une autre façon de voir les choses.

mardi 17 mars 2009 à 11:15:29 | Re : Problème Session et array

taxitat

Bon, mon code avance!

Je n'arrivais pas à ajouter une qté à un article déjà existant. J'ai fait ceci:

//Ajout nouveau produit
$positionProduit = array_search($ref, $_SESSION['panier']['refProduit']);
if (in_array ($ref, $_SESSION['panier']['refProduit'])){     //Si l' produit existe déjà => augmenter la quantité
$_SESSION['panier']['qteProduit'][$positionProduit] += $qte;
}
else {     //S'il n'existe pas => ajouter la nouvelle entrée
 array_push($_SESSION['panier']['refProduit'],$ref);
 array_push($_SESSION['panier']['qteProduit'],$qte);
 }

et à prsent ça marche!!

Bref, passons à la "phase 2" (supprimer ou modifier des quantités)

1 2 3

Cette discussion est classée dans : session, array, ref, panier, qte


Répondre à ce message

Sujets en rapport avec ce message

panier et gestion couleurs [ par titeuf974 ] Bonjour!Voila, actuellement je dévelloppe un panier en php utilisant les sessions. Ce dernier fonctionne très bien. Ajout, suppression, modification. probleme d'array (panier) [ par lyoan ] Bonjour à tous, Je viens de commencer la création d'un panier et j'avoue rencontrer quelques problèmes. Voici mon code, dites moi si vous voyez des ch POST et Get différent lors de l'envoi d'un formulaire (dans une boucle For) [ par Const4ntine ] Bonjour,Après avoir passé près de 4h dessus, et avoir fait des tests de tout les cotés, je demande de l'aide ;)J'ai un panier qui se charge par rappor Panier : Pb de quantité [ par Fo0Zie ] Bonjour à tous les codeurs !Voilà mon problème que j'arrive en vain à résoudre. J'utilise un panier pour un mini site de vente, il fonctionne très bie tableau array et session panier? [ par newlc ] Salut à tous,je cherche à pouvoir ajouter une valeur a chaque fois que l'utilisateur entre une info dans un champs de saisie simple mais apres chaque suppression d'un élément dans un tableau (caddie/panier) [ par davyboy ] Hello, j'ai récupéré le code d'un panier PHP sur le JDN , http://www.journaldunet.com/developpeur/client-web/tu balise div et select [ par yop59 ] bonjour j'ai un gros souci,, cea fait 2jours que j'essai dans une table de type div contenant un article, un qte de modifier la qte avec un select et Probleme de session [ par pam006 ] Bonjour, Je désirerai créer un panier virtuel en php 5. J'ai trouver un super tuto : http://jcrozier.developpez.com/articles/web/panier/ Sauf que, q Array et session [ par Astroma ] Bonjour, Avant de vous poser mon problème, je voulais vous remercier pour toutes les informations et les conseils que j'ai pu trouver sur ce forum. Warning: mysql_fetch_array() [ par Denzel68 ] Bonjour voila je faix un petit bloc de login mais je un petit problème pour récupéré les donnes de l'avatar: Warning: mysql_fetch_array(): supplied ar


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales