Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1162 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  probleme avec une variable de session

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme avec une variable de session

n°865294
attentio
Posté le 05-10-2004 à 16:05:58  profilanswer
 

bonjour !
voila j'ai de grosses difficultés avec une variable de session
$_SESSION['prix_general'];
elle permet d'additionner le somme d'un caddie avec les frais de livraison.
mais voila a l'affichage tout ce passe bien grace a la fonction affiche_somme_total dans laquelle il n'y a qu'un echo  $_SESSION['prix_general'];
et dans le print_r($_SESSION); de la page recap.php il recuperere bien  'prix_general'
ex :
Array ( [caddy] => Array ( [1] => 1 ) [produits] => 1 [prix_total] => 200000000 [prix_general] => 200000119 )

Code :
  1. //recap.php
  2. <?php
  3.   session_start();
  4.   $nom = $_POST['nom'];
  5.   $prenom = $_POST['prenom'];
  6.   $test = $_SESSION['prix_general'];
  7.   // si le formulaire est rempli
  8.   if($_SESSION['caddy']&&$nom&&$prenom&&$test)
  9.   {
  10.     // on peut inserer les données dans la base de donnée
  11.     if( inserer_commande($_POST)!=false )
  12.     {
  13. $livraison = calculer_livraison($_SESSION['caddy'], $id_pays );
  14. afficher_livraison($livraison);
  15. $_SESSION['prix_general']=$livraison+$_SESSION['prix_total'];
  16. affiche_somme_total();
  17. //echo print_r($_SESSION);
  18. }}
  19. ?>


mais si je veux inserer inserer la commande dans ma base de donnée, tout fonctionne sauf pour $test qui est egal a $_SESSION['prix_general'];, il iinsere comme valeur 0.00

Code :
  1. <?php
  2. function inserer_commande($commande_details)
  3. {
  4.   extract($commande_details);
  5.   $query = "insert into commandes values
  6.             ('', $client_id, ".$_SESSION['prix_general'].", '$test', '$nom', '$prenom')";
  7.   $result = mysql_query($query);
  8.   if (!$result)
  9.     return false;
  10.   $query = "select commande_id from commandes where
  11.                client_id = $client_id and
  12.                calcul > ".$_SESSION['prix_general']."-.001 and calcul < ".$_SESSION['prix_general']."+.001 and
  13.                calcul_livraison = '$test' and
  14.                nom = '$nom' and prenom = '$prenom' ";
  15.   $result = mysql_query($query);
  16.   if(mysql_numrows($result)>0)
  17.     $commande_id = mysql_result($result, 0, 'commande_id');
  18.   else
  19.     return false;
  20. ?>


0.00 qu'on retrouve dans le caddie parce que si je ne declare pas $_SESSION['prix_general'] ='0.00'; alors  ma fonction affiche_somme_total ne marche pas
j'ai un Undefined index: prix_general a la ligne $test = $_SESSION['prix_general']; de la page recap.php
et ne peut donc pas le recuperer exemple :
Array ( [caddy] => Array ( [1] => 1 ) [produits] => 1 [prix_total] => 200000000 )
 

Code :
  1. //caddie.php
  2. <?php
  3.   session_start();
  4.   @ $new = $_GET['new'];
  5. if($new)
  6.   {
  7.     if(!isset($_SESSION['caddy']))
  8.     {
  9.       $_SESSION['caddy'] = array();
  10.       $_SESSION['produits'] = 0;
  11.       $_SESSION['prix_total'] ='0.00';
  12.       $_SESSION['prix_general'] ='0.00';
  13.     }
  14.     if(isset($_SESSION['caddy'][$new]))
  15.       $_SESSION['caddy'][$new]++;
  16.     else
  17.     $_SESSION['caddy'][$new] = 1;)
  18.     $_SESSION['prix_total'] = calculer_prix($_SESSION['caddy']);
  19.     $_SESSION['produits'] = calculer_produits($_SESSION['caddy']);
  20.   }
  21.   if(isset($_POST['save']))
  22.   { 
  23.     foreach ($_SESSION['caddy'] as $ref => $quantite)
  24.     {
  25.       if($_POST['referenceno'.$ref]=='0')
  26.         unset($_SESSION['caddy'][$ref]);
  27.       else
  28.         $_SESSION['caddy'][$ref] = $_POST['referenceno'.$ref];
  29.     }
  30.     $_SESSION['prix_total'] = calculer_prix($_SESSION['caddy']);
  31.     $_SESSION['produits'] = calculer_produits($_SESSION['caddy']);
  32.   }
  33.   if($_SESSION['caddy']&&array_count_values($_SESSION['caddy']))
  34.     afficher_caddy($_SESSION['caddy']);
  35. ?>


 
voila j'espere avoir ete clair, je n'arrive pas du tout a trouver mon erreur ... merci de votre aide
 
ps : si vous avez besoin d'infos complementaires n'hesitez pas !
 
merci


Message édité par attentio le 24-03-2005 à 21:09:43

---------------
L'ordinateur a de la mémoire mais aucun souvenir ...
mood
Publicité
Posté le 05-10-2004 à 16:05:58  profilanswer
 

n°865348
naceroth
Posté le 05-10-2004 à 17:30:30  profilanswer
 

Bon, là, faudrait quand même que tu lises les réponses qu'on te donne à tes (nombreux) autres topics concernant le même problème :
 
Comment veux tu que php utilise $_SESSION['prix_général'] à la ligne 12 alors qu'il ne sera défini qu'à la ligne 16 de recap.php ? Si tu as toujours pas compris où est le problème, sérieux, on peut absolument rien pour toi.

n°865385
attentio
Posté le 05-10-2004 à 18:05:30  profilanswer
 

je suis desolé .. je les ai lu  :ouch: ... mais moi etre debutant donc moi pas toujours comprendre  du premier coup:(  
 
alors si je comprends a peu pret :
cela signifie que je dois metre prix_general avant le if, non???
ce qui donne :

Code :
  1. $_SESSION['prix_general']=$livraison+$_SESSION
  2. if( inserer_commande($_POST)!=false )
  3.     {
  4. [...]
  5.     }


mais si je fais ca j'ai un Undefined variable: test dans la fonction inserer_commande et le calcul ne se fait donc plus dans affiche_somme_total();  
 
...(mais qu'il est bete!!!...mais qu'il est bete!!!)
 
voila, donc explique moi precisemment ce que je dois faire(tu me l'a sans doute deja expliqué)mais ne comprends  pas  ( rassure toi : G tous les neuronnes ! :pt1cable: )
 
merci encore a toi de ta patience

n°865443
naceroth
Posté le 05-10-2004 à 19:15:42  profilanswer
 

Non, mais c'est la logique même de ton script qui est boiteux,  ça ira presque plus vite de le recommencer que de le corriger :)
 
Regarde :
1. Tu insères ta commande en utilisant $_SESSION['prix_general'] mais tu ne définis celui çi qu'après l'insertion
2. En calculant $_SESSION['prix_general'] comme tu le fais dans ta réponse, tu utilises $livraison qui ne sera lui aussi défini que plus tard
3. Ton $test ne sert strictement à rien dans ta fonction, il est normal que php ne le trouve pas, tu ne le passes ni en argument, ni comme variable globale.
4. Pas la peine de passer $_POST comme argument d'une fonction, c'est un tableau global :)
5. C'est plus rapide de faire if(inserer_commande()) que if(inserer_commande()!=false)
6. print_r est une instruction provoquant un affichage, mettre un echo juste devant ne sert pas à grand chose :)
 
Bref, reprends les choses depuis une page blanche et fait les choses dans l'ordre :
a)De quoi as-tu besoin pour l'insertion dans la db ?
b)Qu'est ce que tu as déjà au début du script et que dois-tu calculer ? As-tu les infos qu'il te faut pour les calculs ?
c)Au moment de l'insertion, as-tu toutes les données que tu as listée en a ?
 
Et en y allant étape par étape, tu comprendras mieux ce que tu fais, pourquoi tu dois le faire (et ce sera bien mieux pour le futur que si je te donne une solution toute faite :))

n°865489
attentio
Posté le 05-10-2004 à 20:16:46  profilanswer
 

MERCI ... C vraiment gentil !!! :D  
 
bilan des choses (dis moi ce qu'il va pas):  
 1 - en ce qui concerne la page recap.php
J'ai fait

Code :
  1. <?
  2.   if($_SESSION['caddy']&&$nom&&$prenom)
  3.   {
  4.   $livraison = calculer_livraison($_SESSION['caddy'], $id_pays );
  5.   $_SESSION['prix_general']=$livraison+$_SESSION['prix_total'];
  6.     if( inserer_commande())
  7.     {
  8. afficher_caddy($_SESSION['caddy'], false, 1);
  9. afficher_livraison($livraison);
  10. affiche_somme_total();
  11.     }
  12. else
  13. echo'ca marche pas';
  14. }


...bien entendu ca m'ecrit "ca marche pas" :fou: .j'ai poutant mis les choses a plat comme tu m'as conseillé(j'ai meme parlé a voix haute  :pt1cable: )
rien a faire!!!
 
2 - en ce qui concerne print_r, je savais pas ...merci!
3 - j'ai viré mon $test qui en effet ne servait a rien
 
 ....  etc etc
merci encore de ton aide
 
ps : dis moi tout :sol:  

n°865528
naceroth
Posté le 05-10-2004 à 20:57:07  profilanswer
 

7. utilise mysql_insert_id à la place du select et du test dans la fonction inserer_commande (j'imagines que tu veux récupérer l'id de la ligne que tu viens d'ajouter ? :))
 
Bon, pour ton problème, est ce que ton enregistrement est bien inséré dans ta db ? si non, fait un echo du $query d'insertion pour vérifier que la requête est correcte, si oui, euh, le remplacement suggéré en 7 devrait résoudre le problème :)

n°865565
attentio
Posté le 05-10-2004 à 21:34:25  profilanswer
 

... et bien en faite mon enregistrement ne peut etre inséré comme c'est des l'ouverture de la page recap.php (celle qui affiche le recapitulatif de la commande)que ca bug ... chose que je n'avait pas avant quand tout etait dans le if( inserer_commande($_POST))  ... je vois pas :??:

n°865579
attentio
Posté le 05-10-2004 à 21:49:10  profilanswer
 

et si je remplace le select par mysql_insert_id j'ai un
Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource

n°865600
naceroth
Posté le 05-10-2004 à 22:10:01  profilanswer
 

attentio a écrit :

... et bien en faite mon enregistrement ne peut etre inséré comme c'est des l'ouverture de la page recap.php (celle qui affiche le recapitulatif de la commande)que ca bug ...  


 
Oui, bon, et le echo de la requête il donne quoi ? :)
 

Citation :

et si je remplace le select par mysql_insert_id j'ai un
Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource


 
RTFM
mysql_insert_id remplace TOUTE ta structure select + test
 
Là, à l'heure actuelle, ton code devrait être

Code :
  1. /**
  2. * Insère la commande dans la db
  3. * Retourne l'id de la commande si ok
  4. * Retourne false sinon
  5. */
  6. function inserer_commande($commande_details)
  7. {
  8.   extract($commande_details); // j'aime pas cette manière de faire :)
  9.   $query = "insert into commandes values
  10.             ('', $client_id, ".$_SESSION['prix_general'].", '$test', '$nom', '$prenom')";
  11.   echo $query;
  12.   $result = mysql_query($query);
  13.   if (!$result){
  14.     return false;
  15.   }
  16.   if($commande_id = mysql_insert_id()){
  17.     return $commande_id;
  18.   } else {
  19.     return false;
  20.   }
  21. }


Message édité par naceroth le 05-10-2004 à 22:10:58
n°865617
attentio
Posté le 05-10-2004 à 22:31:34  profilanswer
 

et bien en fait je ne vois pas vraiment de koi tu parles quand tu me kose de test etant donné que je l'ai viré comme elle servait a rien :sarcastic:  
ma fonction est un peu plus complexe que ca, la voici dans son integralité (avec des selects) :pt1cable:  :pt1cable:  :pt1cable:  :pt1cable:  :pt1cable:  :pt1cable:  :pt1cable:  :pt1cable:  

Code :
  1. <?
  2. function inserer_commande($commande_details)
  3. {
  4. extract($commande_details);
  5.   //si l'adresse de livraison est la meme que l'adresse de facturation
  6.   if(!$nom_livraison&&!$prenom_livraison&&!$adresse_livraison&&!$mail_livraison&&!$telephone_livraison&&!$civile_livraison&&!$ville_livraison&&!$etat_livraison&&!$cp_livraison&&!$pays_livraison)
  7.   {
  8.     $nom_livraison = $nom;
  9. $prenom_livraison = $prenom;
  10.     $adresse_livraison = $adresse;
  11. $mail_livraison = $mail;
  12. $telephone_livraison = $telephone;
  13. $civile_livraison = $civile;
  14.     $ville_livraison = $ville;
  15.     $etat_livraison = $etat;
  16.     $cp_livraison = $cp;
  17.     $pays_livraison = $pays;
  18.   }
  19.   $conn = db_connect();
  20.   //inserer l'adresse d'un client
  21.   $query = "select client_id from clients where 
  22.             nom = '$nom' and prenom = '$prenom' and adresse = '$adresse' and mail = '$mail' and telephone = '$telephone' and civile = '$civile'
  23.             and ville = '$ville' and etat = '$etat'
  24.             and cp = '$cp' and pays = '$pays'";
  25.   $result = mysql_query($query);
  26.   if(mysql_numrows($result)>0)
  27.   {
  28.     $client_id = mysql_result($result, 0, 'client_id');
  29.   }
  30.   else
  31.   {
  32.     $query = "insert into clients values
  33.             ('', '$nom','$prenom','$adresse','$mail','$telephone','$civile','$ville','$etat','$cp','$pays')";
  34.     $result = mysql_query($query);
  35.     if (!$result)
  36.        return false;
  37.   }
  38.   $query = "select client_id from clients where 
  39.             nom = '$nom' and prenom = '$prenom' and adresse = '$adresse' and mail = '$mail' and telephone = '$telephone' and civile = '$civile'
  40.             and ville = '$ville' and etat = '$etat'
  41.             and cp = '$cp' and pays = '$pays'";
  42.   $result = mysql_query($query);
  43.   if(mysql_numrows($result)>0)
  44.     $client_id = mysql_result($result, 0, 'client_id');
  45.   else
  46.     return false;
  47.   $date = date('Y-m-d');
  48.   $query = "insert into commandes values
  49.             ('', $client_id, ".$_SESSION['prix_total'].", ".$_SESSION['prix_general'].",'$date', 'PARTIAL', '$nom_livraison','$prenom_livraison',
  50.              '$adresse_livraison','$mail_livraison','$telephone_livraison','$civile_livraison','$ville_livraison','$etat_livraison','$cp_livraison',
  51.               '$pays_livraison')";
  52.   $result = mysql_query($query);
  53.   if (!$result)
  54.     return false;
  55.   $query = "select commande_id from commandes where
  56.                client_id = $client_id and
  57.                calcul > ".$_SESSION['prix_total']."-.001 and
  58.                calcul < ".$_SESSION['prix_total']."+.001 and
  59.                calcul_livraison > ".$_SESSION['prix_general']."-.001 and
  60.                calcul_livraison < ".$_SESSION['prix_general']."+.001 and
  61.              
  62.        
  63.        
  64.                date = '$date' and
  65.                etat = 'PARTIAL' and
  66.                nom_livraison = '$nom_livraison' and
  67.      prenom_livraison = '$prenom_livraison' and
  68.                adresse_livraison = '$adresse_livraison' and
  69.      mail_livraison = '$mail_livraison' and
  70.      telephone_livraison = '$telephone_livraison' and
  71.      civile_livraison = '$civile_livraison' and
  72.                ville_livraison = '$ville_livraison' and
  73.                etat_livraison = '$etat_livraison' and
  74.                cp_livraison = '$cp_livraison' and
  75.                pays_livraison = '$pays_livraison'";
  76.   $result = mysql_query($query);
  77.   if(mysql_numrows($result)>0)
  78.     $commande_id = mysql_result($result, 0, 'commande_id');
  79.   else
  80.     return false;
  81.   // insere chaque article
  82.   foreach($_SESSION['caddy'] as $ref => $quantite)
  83.   {
  84.     $detail = recuperer_article_details($ref);
  85.     $query = "delete from commande_articles where 
  86.               commande_id = '$commande_id' and ref =  '$ref'";
  87.     $result = mysql_query($query);
  88.     $query = "insert into commande_articles values
  89.               ('$commande_id', '$ref', ".$detail['prix'].", $quantite)";
  90.     $result = mysql_query($query);
  91.     if(!$result)
  92.       return false;
  93.   }
  94.   return $commande_id;
  95. }
  96. ?>


 

mood
Publicité
Posté le 05-10-2004 à 22:31:34  profilanswer
 

n°865681
naceroth
Posté le 05-10-2004 à 23:01:56  profilanswer
 

Non mais là, ça devient n'importe quoi, je veux bien aider, mais faudrait voir à pas te foutre du monde non plus, on ne va pas deviner les infos que tu juges pas utile de donner...
 
Et tu peux garder ce genre de commentaire :

Citation :


et bien en fait je ne vois pas vraiment de koi tu parles quand tu me kose de test etant donné que je l'ai viré comme elle servait a rien


 
parce que mon ami, je te kosais du test (oui, un IF c'est à ça que ça sert...), pas d'une variable $test...

n°865716
attentio
Posté le 06-10-2004 à 00:09:25  profilanswer
 

je suis vraiment désolé  :( ...je pensais bien faire en ne mettant pas toute la fonction(15 km de code ca peut effrayer) quant au test on s'est mal compris ... excuse moi ...


Message édité par attentio le 06-10-2004 à 01:22:17
n°865736
attentio
Posté le 06-10-2004 à 02:04:17  profilanswer
 

...pour en revenir a mon probleme (si tu est bien daccord pour m'aider,STP :ange: )je ne pense pas que ca vienne de inserer_commande mais plutot de cette foutue variable prix_general:
avant j'avais :

Code :
  1. //
  2. //page recap.php
  3. //
  4. <?
  5.     if( inserer_commande($_POST))
  6.     {
  7. afficher_caddy($HTTP_SESSION_VARS['caddy'], false, 0);
  8. afficher_livraison(calculer_livraison());
  9.     }
  10. ?>
  11. //
  12. //fonction inserer_commande
  13. //
  14. <?
  15. ...
  16.   $query = "select commande_id from commandes where
  17. client_id = $client_id and
  18. calcul > ".$HTTP_SESSION_VARS['prix_total']."-.001 and
  19. calcul < ".$HTTP_SESSION_VARS['prix_total']."+.001 and
  20. calcul_livraison> ".$HTTP_SESSION_VARS['prix_total']."-.001 and
  21. calcul_livraison < ".$HTTP_SESSION_VARS['prix_total']."+.001 and ...
  22. ?>


...tout marchait, sauf qu'il ne m'inserais que la somme du caddie
 
 
donc maintenant G un truc du genre

Code :
  1. //
  2. //page recap.php
  3. //
  4. <?
  5. ...
  6. $livraison = calculer_livraison($_SESSION['caddy'], $id_pays );
  7. $_SESSION['prix_general']=$livraison+$_SESSION['prix_total'];
  8.     if( inserer_commande($_POST))
  9.     {
  10. afficher_caddy($_SESSION['caddy'], false, 1);
  11. afficher_livraison($livraison);
  12. affiche_somme_total();
  13.     }
  14. ?>
  15. //
  16. //fonction inserer_commande
  17. //
  18. <?
  19. ...
  20.   $query = "select commande_id from commandes where
  21. client_id = $client_id and
  22. calcul > ".$HTTP_SESSION_VARS['prix_total']."-.001 and
  23. calcul < ".$HTTP_SESSION_VARS['prix_total']."+.001 and
  24. calcul_livraison> ".$HTTP_SESSION_VARS['prix_general']."-.001 and
  25. calcul_livraison < ".$HTTP_SESSION_VARS['prix_general']."+.001 and ...
  26. ?>


... et il me fait un sale coup  :fou:  
 
donc petite reflexion de ma part,  :??:  est ce que ca ne peut pas venir des arguments passés dans la fonction? parce que $_post recupere actuellement les donnees qui ont ete precedament passé dans un formulaire  
 
ancien code complet de la page recap.php

Code :
  1. <?
  2.   session_start();
  3.   $nom = $HTTP_POST_VARS['nom'];
  4.   $adresse = $HTTP_POST_VARS['adresse'];
  5.   $ville = $HTTP_POST_VARS['ville'];
  6.   $cp = $HTTP_POST_VARS['cp'];
  7.   $pays = $HTTP_POST_VARS['pays'];
  8.   if($HTTP_SESSION_VARS['caddy']&&$nom&&$adresse&&$ville&&$cp&&$pays)
  9.   {
  10.     if( inserer_commande($HTTP_POST_VARS)!=false )
  11.     {
  12.       afficher_caddy($HTTP_SESSION_VARS['caddy'], false, 0);
  13.       afficher_livraison(calculer_livraison()); 
  14.     }
  15.     else
  16.     {
  17.       echo 'ya pb avec inserer commande';
  18.     }
  19.   }
  20.   else
  21.   {
  22.     echo 'ya pb';
  23.   }
  24. ?>


 
merci encore mille fois


Message édité par attentio le 06-10-2004 à 02:07:52
n°865743
attentio
Posté le 06-10-2004 à 03:08:01  profilanswer
 

INFORMATION POSITIVE !!!!
en fesant :

Code :
  1. <?
  2. $livraison = calculer_livraison($_SESSION['caddy'], $id_pays );
  3. $_SESSION['prix_general']=$livraison+$_SESSION['prix_total'];
  4. // si le formulaire est rempli
  5.   if($_SESSION['caddy']&&$nom&&$prenom&&$adresse&&$mail&&$telephone&&$civile&&$ville&&$cp&&$pays)
  6.   {
  7. // on peut inserer les données dans la base de donnée
  8.     if( inserer_commande($_POST))
  9.     {
  10.    afficher_caddy($_SESSION['caddy'], false, 1);
  11.       afficher_livraison($livraison);
  12.       affiche_somme_total();
  13.     }
  14.     else
  15.     {
  16.       echo 'probleme avec inserer_commander';
  17. }
  18.   }
  19. else
  20.   {
  21. echo 'ca marche pas';
  22.   }


j'arrive a inserer une commande ...mais par contre il m'affiche toujours
'probleme avec inserer_commander'.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  probleme avec une variable de session

 

Sujets relatifs
Alimentation Variable() as stringProblème déformation de tableau
session qui se détruit après un certain tempspb de session
session java avec un firewallVariable Remote_User et Acces IIS anonyme
Problème sur une requete de date[ASP.NET] Problème pour accéder à une variable Session
probleme avec variable de session (sou oracle)[PHP] Probleme pour supprimer une variable de session
Plus de sujets relatifs à : probleme avec une variable de session


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR