Page 1 sur 1

probleme ajout panier dans boutique php

Posté : 04 juil. 2009, 17:11
par diice
Bonjour à tous,

Je suis en phase terminale d'une boutique en php.

Mais juste un p'tit souci qui vient de je ne sais ou.
J'ai bien regardé dans mon code, et j'avoue que je suis perdu, je sais pas du tout d'ou pourrait venir l'erreur.

quand on arrive sur le site, qu'on veut passer un article dans le panier celui ci ne se fait pas, et me ramene l'erreur de la fonction CreationPanier().
Par contre quand j'actualise la page, il se met dans le panier nikel...

et le soucis c'est que cette erreur n'arrive qu'une fois, uniquement lors de l'arrivée pour la premiere fois sur le site...
apres avoir faire la manip de rafraichir une fois, meme si je vide le panier, je peux sans probleme ajouter un nouvel article sans l'erreur et ce tout le long de ma navigation sur le site.

vous pouvez tester sur le site en test ici : http://www.neverdeadcompany.fr

j'ai essayé de mettre session_start(); sur tout le site, mais ca ne change rien...

je vous met le code de ma fonction :
<?Php
function CreationPanier(){
$ret=false;

if (isset($_SESSION['panier']))
{ $ret = true; }
else
{

  $_SESSION['panier']=array();
  $_SESSION['panier']['idsessProduit'] = array();
  $_SESSION['panier']['libelleProduit'] = array();
  $_SESSION['panier']['tailleProduit'] = array();
  $_SESSION['panier']['qteProduit'] = array();      
  $_SESSION['panier']['prixProduit'] = array();
  $_SESSION['panier']['cDe'] = array();
}
return $ret;
}

function ajouterArticle($idsessProduit,$libelleProduit,$tailleProduit­,$qteProduit,$prixProduit,$cDe){

if (CreationPanier())
{
$positionProduit = array_search($idsessProduit,  $_SESSION['panier']['idsessProduit']);
	
  if ($positionProduit !== false)
  {
   $_SESSION['panier']['qteProduit'][$positionProduit] += $qteProduit ;
  }
  else
  {
   array_push( $_SESSION['panier']['idsessProduit'],$idsessProduit);
   array_push( $_SESSION['panier']['libelleProduit'],$libelleProduit);
   array_push( $_SESSION['panier']['tailleProduit'],$tailleProduit);
   array_push( $_SESSION['panier']['qteProduit'],$qteProduit); 
   array_push( $_SESSION['panier']['prixProduit'],$prixProduit);
   array_push( $_SESSION['panier']['cDe'],$cDe);
  }

}

else {
  echo "<div class='txtorange' style='border:1px solid #74ef00; margin:5px 5px 5px 5px; padding: 5px 5px 5px 5px;'>Un problème est survenu à l'ajout de votre article, <A HREF='#' onclick='document.location.reload();return(false)'><b>rafraichissez la page pour entrer celui ci dans votre panier...</b></a> sinon veuillez contacter l'administrateur du site.</div><br>";
}
}

et vous met le code de mon panier :
<?Php
// SI 'action' EST PASSE EN URL
if (isset($_GET['action']))
{
$erreur=false;
 if (in_array($_GET['action'],array('ajout', 'suppression', 'refresh', 'suppsess')))
 { $action = $_GET['action']; }
 else { $erreur=true; }

 $idl = $_POST['idpro']."-".$_POST['taillepost'];
 $l = $_POST['idpro'];
 $t = $_POST['taillepost'];
 $q = intval($_POST['pnum']);
 $p = $_POST['px'];
 $cmd= $_GET['cde'];

}
// SI 'action' est passé en formulaire
elseif(isset($_POST['action']))
{
 unset($_GET);
 $erreur=false;
	
 if (in_array($_POST['action'],array('ajout', 'suppression', 'refresh', 'suppsess')))
  { $action=$_POST['action']; }
 else { $erreur=true; }
	
 $idl = $_POST['idpro']."-".$_POST['taillepost'];
 $l = $_POST['idpro'];
 $t = $_POST['taillepost'];
 $p = $_POST['px'];
 $cmd= $_GET['cde'];
 $QteArticle = array();



 $i=0;
 foreach ($_POST['QteArticle'] as $contenu)
 {
 $QteArticle[$i++] = intval($contenu);  
 }
	
}




if ($erreur==false){

 switch($action){

  Case "ajout":
  ajouterArticle($idl,$l,$t,$q,$p,$cmd);
  break;

  Case "suppression":
  supprimerArticle($_GET['idl']);
  break;

  Case "refresh" :

  for ($i = 0 ; $i < count($QteArticle) ; $i++)
  {
    modifierQTeArticle($_SESSION['panier']['idsessProduit'][$i],$_SESSION['panier']['libelleProduit'][$i],$_SESSION['panier']['tailleProduit'][$i],round($QteArticle[$i]),$_SESSION['panier']['prixProduit'][$i],$_SESSION['panier']['cDe'][$i]);
  }
  if (!empty($idl)) { $_SESSION['panier']['idsessProduit'][$i]=$idl; }
  break;

  Case "suppsess":
$nbArticles=count($_SESSION['panier']['idsessProduit']);
   
session_unregister("panier");
  break;

  Default:
  break;
      
 }
}

/// DEBUT GRAPHIQUE DU TABLEAU

if (CreationPanier()) 
{
$nbArticles=count($_SESSION['panier']['idsessProduit']);

  if (empty($nbArticles)) {  echo "<tr><td>Votre panier est vide </ td></tr>"; }
  elseif ($_GET['action']=="suppsess") { echo "<tr><td>Votre panier est vide </ td></tr>"; }
  else
  {

$bg=0;
   for ($i=0 ;$i < $nbArticles ; $i++)
   {
$idprod=$_SESSION['panier']['libelleProduit'][$i];

//SUPPRESSION ARTICLE SI MODIFICATION
if (!empty($_GET['mod'])) {	
	if ($_SESSION['panier']['cDe'][$i]==$_GET['mod'])
	{
	supprimerArticle($_SESSION['panier']['idsessProduit'][$i]);
	}
}

$sql = "SELECT *  FROM $table_produit where id_pro='".$idprod."'";
$sql = mysql_db_query($base,$sql);
$site=mysql_fetch_array($sql);

if (empty($site['im_prod'])) { $img="/img/no.gif"; }
else { $img="/photos/$site[im_prod]"; }

if (!empty($_SESSION['panier']['libelleProduit'][$i])) {

/// TABLEAU D'aFFICHAGE DE MES PRODUITS

$bg++;   }
}


les variables sont passée en $_POST en prevance de la page detail.php avec le formulaire suivant :

Code : Tout sélectionner

<form action="<?Php echo $urlsite; ?>/panier.php?action=ajout" method="post" name="checknum" onSubmit="return checkban()"> <select name="pnum" id="pnum" class="form"> <?Php for($z=1; $z<=10; $z++) { echo "<option value='".$z."'>".$z."</option>\r\n"; } ?></select> </td> <td width="30" align="center" valign="middle"><input name="envoyer" type="image" src="/img/ico_pan.png" align="top" title="AJOUTER AU PANIER" alt="AJOUTER AU PANIER" /></td> </tr> <?Php if (!empty($taillearticle)) {?> <input name="taillepost" type="hidden" value="<?Php echo $taillearticle; ?>" /> <?Php } ?> <input name="idpro" type="hidden" value="<?Php echo $idarticle; ?>" /> <input name="px" type="hidden" value="<?Php echo $pxttcfinal; ?>" /> <input name="cde" type="hidden" value="" /> <!-- variable normalement vide, je m'en sers ailleurs en la remplissant, le bug ne vient pas de la ;) --> </form>

voilà ! si vous pouviez m'aider a trouver une coquille, ou je sais pas ce qui pourrait causer ca, ca fait 3 jours que je suis sur le probleme, et j'ai beau le tourner dans tous les sens, je vois pas ! je suis peut-etre trop dedans !

merci d'avance,

Posté : 04 juil. 2009, 17:58
par dunbar
Salut,
:idea: Essaye de placer ta fonction après cette partie + un session_start();
session_start();
if (isset($_SESSION['panier'])) 
{ $ret = true; } 
else 
{ 

  $_SESSION['panier']=array(); 
  $_SESSION['panier']['idsessProduit'] = array(); 
  $_SESSION['panier']['libelleProduit'] = array(); 
  $_SESSION['panier']['tailleProduit'] = array(); 
  $_SESSION['panier']['qteProduit'] = array();       
  $_SESSION['panier']['prixProduit'] = array(); 
  $_SESSION['panier']['cDe'] = array(); 
} 
return $ret; 
} 
et non avant , a mon avis ça va aller beaucoup mieux :wink:
Pourquoi :
Parce que tu essaye d'utiliser une variable que tu déclare après (PHP lie de haut en bas), et pourquoi ça ne le fait qu'une fois et bien parce ta variable est enregistrée en SESSION :wink:

Posté : 04 juil. 2009, 18:46
par diice
merci beaucoup dunbar pour ta reponse,

mais malheuresement, ca me fait la meme chose. alors soit j'ai pas compris ou placer ce que tu m'as mis, soit ca marche pas ! :cry: :?

j'ai donc, comme je l'ai compris fait comme ça :
<?Php
function CreationPanier(){
session_start();
$ret=false;

if (isset($_SESSION['panier']))
{ $ret = true; }
else
{

  $_SESSION['panier']=array();
  $_SESSION['panier']['idsessProduit'] = array();
  $_SESSION['panier']['libelleProduit'] = array();
  $_SESSION['panier']['tailleProduit'] = array();
  $_SESSION['panier']['qteProduit'] = array();      
  $_SESSION['panier']['prixProduit'] = array();
  $_SESSION['panier']['cDe'] = array();
}
return $ret;
}
?>
et ca marchait pas... alors dans ma page panier.php, j'ai mis aussi session_start(); ici :
<?Php
Case "ajout":
session_start();
  ajouterArticle($idl,$l,$t,$q,$p,$cmd);
  break;
?>
mais ca ne marche toujours pas...

par contre je n'ai pas deplacé cette fonction, car j'ai pas compris ou tu me disais de la mettre... enfin si j'ai essayé de la mettre apres la fonction function ajouterArticle(); mais que neni ! ca ne marche pas non plus !

misere !!! :x

Posté : 04 juil. 2009, 19:52
par FuZZyLine
Salut,

session_start servant à initiliser les sessions se met toujours en premiere ligne de code.

Exemple:
<?php

   session_start();
   .
   .
   .
?>
@+ ;)

Posté : 04 juil. 2009, 20:03
par diice
Tout a fait FuzzyLine !

mais le probleme, malheureusement n'est pas là !

merci de ta reponse !

Posté : 04 juil. 2009, 20:11
par dunbar
Essaye comme ceci
session_start(); 
$ret=false; 

if (isset($_SESSION['panier'])) 
{ $ret = true; } 
else 
{ 

  $_SESSION['panier']=array(); 
  $_SESSION['panier']['idsessProduit'] = array(); 
  $_SESSION['panier']['libelleProduit'] = array(); 
  $_SESSION['panier']['tailleProduit'] = array(); 
  $_SESSION['panier']['qteProduit'] = array();       
  $_SESSION['panier']['prixProduit'] = array(); 
  $_SESSION['panier']['cDe'] = array(); 
} 
return $ret; 
} 
function CreationPanier(){ 

?>

Posté : 04 juil. 2009, 20:17
par FuZZyLine
Tout a fait FuzzyLine !
mais le probleme, malheureusement n'est pas là !
merci de ta reponse !
Re,

Si tu as bien mis session_start dans index.php et ce en premiere ligne, ajoute juste après
print_r($_SESSION); et réactualise une fois. Tu verras déja si $_SESSION intègre quelque chose.

@+ ;)

Posté : 04 juil. 2009, 20:28
par diice
malheuresement Dumbar, il me fait la meme chose, ca ne marche pas...

Par contre avec l'idée de FuzzyLine, le fait d'afficher les sessions, il fait des trucs bizarres !!

je ne peux que vous invité a aller voir ca de vous meme :
http://www.neverdeadcompany.fr

quand je suis sur index (avant je n'avais pas de session_start();, je ne la declenchais que sur panier.php) du coup il me met array(), donc, j'ai bien une session vide.

des que je vasi sur panier.php, il me met une session vide j'ai l'impression.

et quand j'ajoute, il m'en met deux ! enfin a priori, je crois ...

qu'en dites vous ???

Posté : 04 juil. 2009, 21:01
par FuZZyLine
J'étais sur le point de déco, je fais vite.
malheuresement Dumbar, il me fait la meme chose, ca ne marche pas...
Par contre avec l'idée de FuzzyLine, le fait d'afficher les sessions, il fait des trucs bizarres !!
je ne peux que vous invité a aller voir ca de vous meme :
http://www.neverdeadcompany.fr
quand je suis sur index (avant je n'avais pas de session_start();, je ne la declenchais que sur panier.php) du coup il me met array(), donc, j'ai bien une session vide.
des que je vasi sur panier.php, il me met une session vide j'ai l'impression.
et quand j'ajoute, il m'en met deux ! enfin a priori, je crois ...
qu'en dites vous ???
Bien, sans vouloir t'offenser, c'est un problème de codage, non de session.

Pour t'en persuader:
<?php

   session_start();

   if (!isset($_SESSION[pannier]))
   {
      $_SESSION[pannier] = Array();
      $_SESSION[pannier][Bidule] = "un";
      $_SESSION[pannier][Bidule] = "deux";
      $_SESSION[pannier][Bidule] = "trois";
      echo "Session vient d'être crée !";
   }
   else echo "Session déja présente !";

   print_r($_SESSION);

   exit(0);
?>
Ecris ca dans index.php, lance puis réactualise. Tu verras que la session est bien présentes.
La nuit portant conseil... on sait jamais ;)

Je sais que ca n'a pas de rapport avec TES propres sessions c'est juste te prouver que ce n'est
pas un problème de session mais de codage @+ ;)

PS: Poste la partie actuelle de la gestion des sessions stp, ca aidra peut-etre un peu plus.

Posté : 04 juil. 2009, 21:03
par diice
merci beaucoup fuzzyline, je vais regarder tout ça et mettrai une reponse !
et t'inquiete, je suis la pour apprendre donc, ne suis pas offensé, du tout ! bien au contraire !!! ;)

merci en tout cas de ton aide... je vais voir tout ça et te tiens au jus !



-------

bon j'ai essayé ce que tu m'as dit, je vois de quoi tu me parles, mais sans le comprendre vraiment..

j'ai l'impression donc, que mon code fais que des sessions se créent pas au bon moment...
enfin, c qu'une impression, je t'avoue que j'y comprends plus rien !!

je vais continuer a faire de la bidouille, et essayer de deplacer mon code, ou de le corriger si je vois ou !

merci en tout cas fuzzline... j'avance c deja ça ! ;)

Posté : 05 juil. 2009, 09:26
par FuZZyLine
Salut,
merci beaucoup fuzzyline, je vais regarder tout ça et mettrai une reponse !
et t'inquiete, je suis la pour apprendre donc, ne suis pas offensé, du tout ! bien au contraire !!! ;)
merci en tout cas de ton aide... je vais voir tout ça et te tiens au jus !
ok ;)
bon j'ai essayé ce que tu m'as dit, je vois de quoi tu me parles, mais sans le comprendre vraiment..
j'ai l'impression donc, que mon code fais que des sessions se créent pas au bon moment...
enfin, c qu'une impression, je t'avoue que j'y comprends plus rien !!
je vais continuer a faire de la bidouille, et essayer de deplacer mon code, ou de le corriger si je vois ou !
merci en tout cas fuzzline... j'avance c deja ça ! ;)
Me suis rendu sur ton site et fais une simulation... bah... Ca à l'air de marcher non?
je me permets d'ajouter quelques points tout de même (hors php):

Tu déclares ta page XHTML mais le résultat donné est une soupe de balises assez indigeste.

- table est deprecated. Son usage est réservé pour des données tabulaires.
- les balises ne doivent contenir d'informations de pagination, les css sont la pour ca
- ...

Pas été controler le validateur W3C mais... ;)

Je présume, au vu de tes fonctions js, que tu utilises DreamR... Ce n'est pas le meilleur des "amis" pour faire un script super propre et désolé, perso je fais tout sous edit.com donc je ne peux t'en indiquer un autre.

Autre points:

Les CGV sont présentes mais, si je ne m'abuse, manque les CGU
J'ai aussi cherché le Siret... T'as oublié de l'indiquer

S'agit pas de flinguer ton site, hein, c'est juste quelques infos que je me permets de passer ;)

Bref, si ton problème est résolut c'est le principal, @+ ;)

Posté : 05 juil. 2009, 12:22
par diice
Me suis rendu sur ton site et fais une simulation... bah... Ca à l'air de marcher non?
non malheuresement, quand tu arrives sur le site pour la premiere fois, ou en ayant vidé cache et session, et en essayant de mettre un des produit a gauche, ou meme de la boutique, le panier fait une erreur... :(
Il faut actualiser la page pour que le produit entre dans le panier...
j'ai cherché un bon bout de la nuit, et j'ai rien trouvé...
je me permets d'ajouter quelques points tout de même (hors php):
et tu fais bien c kler !!! :)
Tu déclares ta page XHTML mais le résultat donné est une soupe de balises assez indigeste.
j'ai gardé l'entete de Dreamweaver, je ne me suis jamais penché sur ce point :( c vrai ! pff... ;)
- table est deprecated. Son usage est réservé pour des données tabulaires.
- les balises ne doivent contenir d'informations de pagination, les css sont la pour ca
- ...

Pas été controler le validateur W3C mais... ;)
Je t'avoue qu'il faudrait que je te racontes l'histoire de ce site, que j'ai commencé depuis une bonne année, stopé, recommencé, restoppé, recommencé... etc ...
a l'epoque, je ne m'etais pas encore fais au css, et ca m'a toujours gonflé de l'actualiser... mais j'ai l'impression qu'il va falloir que j'y passe, parce que si ca bug comme ça.... mais bon, pas mal d'autres sites a faire et le temps me manquait pour m'y repencher... jen'ai fait que rajouter des trucs sans prendre en compte l'acquis...
Je présume, au vu de tes fonctions js, que tu utilises DreamR... Ce n'est pas le meilleur des "amis" pour faire un script super propre et désolé, perso je fais tout sous edit.com donc je ne peux t'en indiquer un autre.
tu presumes bien ;)
je suis en train de m'interesser a joomla, je sais pas encore ce que ca donne....
Autre points:

Les CGV sont présentes mais, si je ne m'abuse, manque les CGU
J'ai aussi cherché le Siret... T'as oublié de l'indiquer
pour le contenu que j'appelerai externe, j'attends toujours des retours de mon pote pour qui je fais le site, mais c vrai que les CGU ne sont pas prevu, ce que je vasi regler de suite !!
pour le siret, je l'indique dans le bon de commande ou la facture, mais c vrai que je me dois de le mettre dans le foot par exemple...

Ca fait du bien d'avoir quelqu'un qui jette un coup d'oeil sur tout ça, parce qu' j'ai personne qui me corrige en regle generale, et c'est pleinde petits trucs comme ça qu'il me manque etant autodidacte ! ;) je te remercie vivement !! sincerement !
S'agit pas de flinguer ton site, hein, c'est juste quelques infos que je me permets de passer ;)
et je t'en remercie grandement !!
Bref, si ton problème est résolut c'est le principal, @+ ;)

malehreusement non toujours pas !!
enfin, a ce que je vois j'ai du boulot sur autre chose en attendant que je trouve ;)

merci beaucoup FuzzY de te pencher a ce point la sur mon probleme !

merci aussi, j'en profite ;) a Dumbar de m'avoir aussi aidé !

maintenant je laisse ce post ouvert au cas ou la reponse saute aux yeux subitement de toi Fuzzy ou de quelqu'un d'autre ;)

Posté : 05 juil. 2009, 13:53
par @rthur
Bonjour,

Déjà tu as une erreur de javascript qu'il faudrait que tu corriges :

Code : Tout sélectionner

Message : 'document.checknum.pnum.value' a la valeur Null ou n'est pas un objet. Ligne : 38 URI : http://www.neverdeadcompany.fr/inc/js/js.js

Posté : 05 juil. 2009, 14:06
par FuZZyLine
maintenant je laisse ce post ouvert au cas ou la reponse saute aux yeux subitement de toi Fuzzy ou de quelqu'un d'autre ;)
Re,

ok et bonne chance pour utiliser un Framework @+ ;)

Posté : 05 juil. 2009, 14:37
par diice
Bonjour,

Déjà tu as une erreur de javascript qu'il faudrait que tu corriges :

Code : Tout sélectionner

Message : 'document.checknum.pnum.value' a la valeur Null ou n'est pas un objet. Ligne : 38 URI : http://www.neverdeadcompany.fr/inc/js/js.js
oui c vrai que ca fait un bail que j'avais pas été sur internet explorer... bef, c reglé, merci beaucoup ;)
mais malheureusement, ca n'arrange pas mon probleme de panier, il me fait la meme !
arf...
ok et bonne chance pour utiliser un Framework @+ Wink
merci ;) il m'en faut de la chance.. euh.. du courage ! ;)
merci encore a toi ! ;)


------------------------------------------------

Ca y est j'ai trouvé !!!

en fait j'ai enlevé les fonction du panier, que j'ai mis dans un include a part... j'ai changé la hiérarchie de mes include, en appelant les autres fonctions generales au site plus bas.
et ca marche !!!
ouf !!

merci a vous qui m'avez mis pas mal sur la voie !

sujet RESOLU !!!