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

  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu]if qui ne fonctionne pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu]if qui ne fonctionne pas

n°1503001
fgiuliano
Posté le 15-01-2007 à 11:48:02  profilanswer
 

Bonjour à tous,  
Je suis en train de tourner en rond et je ne vois pas que faire pour m'en sortir...
 
J'ai un formulaire qui me permet de sélectionner des choix avec des checkbox et j'aimerai que si tel ou tel choix est sélectionné, la somme totale s'incrémente.
 
Pour cela, je fais un if qui vérifie si le $choix est égal à une valeur de mon tableau et si oui, j'incrémente ma somme...
 
Mais malheureusement  :( , on entre jamais dans mon if...
 
Voilà mon code:
 

Code :
  1. <?php
  2. include("secure.php" );
  3. include("pcdb.php" );
  4. $connexion = mysql_connect($hote, $utilisateur, $mdp);
  5. $choix_base = mysql_select_db($data_base, $connexion)or die("Impossible d'ouvrir le fichier de comptes" );
  6. if(isset($Total)) // nom du bouton d'envoi de mon formulaire
  7. {
  8.  $somme = 0.00;
  9.  foreach ($commande as $choix)
  10.  {
  11.   $sql = "SELECT libelle, prix FROM prix, produit WHERE produit.idproduit = prix.idproduit";
  12.   $req = mysql_query($sql) or die (mysql_error());
  13.   while ($data = mysql_fetch_array($req))
  14.   {
  15.    $libelle = $data['libelle'];
  16.    if($libelle == $choix)
  17.    {
  18.     $somme = $somme + $data['prix'];
  19.    }
  20.   }
  21.  }
  22. }
  23. ?>


 
si je fais un echo de $libelle et $choix, c'est exactement la même chose...
 
Est-ce que qqn peut me venir en aide? Merci d'avance!  :)


Message édité par fgiuliano le 16-01-2007 à 11:18:06
mood
Publicité
Posté le 15-01-2007 à 11:48:02  profilanswer
 

n°1503007
anapajari
s/travail/glanding on hfr/gs;
Posté le 15-01-2007 à 11:52:32  profilanswer
 

je parie sur un register_global à off.
De toute façon autant prendre de bonnes habitudes et utiliser les tableaux $_GET et $_POST ( voir la doc )

n°1503012
fgiuliano
Posté le 15-01-2007 à 12:02:49  profilanswer
 

anapajari a écrit :

je parie sur un register_global à off.
De toute façon autant prendre de bonnes habitudes et utiliser les tableaux $_GET et $_POST ( voir la doc )


 
C'est-à-dire?  :(

n°1503022
rufo
Pas me confondre avec Lycos!
Posté le 15-01-2007 à 12:11:39  profilanswer
 

dans le php.ini, faut mettre la variable register_globals à off.
Quand c'est à "on", toutes les variables globales ($_SESSION, $_POST, $_GET...) sont accessibles avec l'écriture $NomVariable
 
ex : $_POST['choix'] est aussi accessible via la variable $choix et ça, c'est pas une bonne chose...
 
Suivant comme est configuré le serveur, ton script peut ne plus fonctionner correctement. Dans ton cas, tu utilises l'écriture autorisée par register_globals à "on". Mais si dans on php.ini, cetet variable est à off, alors ta variable $choix n'est pas initialisée et ne contient pas le contenu de ton formulaire posté...

Message cité 1 fois
Message édité par rufo le 15-01-2007 à 12:14:07
n°1503027
fgiuliano
Posté le 15-01-2007 à 12:15:54  profilanswer
 

rufo a écrit :

dans le php.ini, faut mettre la variable register_globals à off.
Quand c'est à "on", toutes les variables globales ($_SESSION, $_POST, $_GET...) sont accessibles avec l'écriture $NomVariable
 
ex : $_POST['choix'] est aussi accessible via la variable $choix et ça, c'est pas une bonne chose...
 
Suivant comme est configuré le serveur, ton script peut ne plus fonctionner correctement. Dans ton cas, tu utilises l'écriture autorisée par register_globals à "on". Mais si dans on php.ini, cetet variable est à off, alors ta variable $choix n'est pas initialisée et ne contient pas le contenu de ton formulaire posté...


 
Ok, alors ça, je commence à comprendre, je crois...  :)  
Je suis allée lire la documentation que l'on m'a donnée et modifé mon code en conséquence!
 
Par contre, je ne vois pas pourquoi ça continue à ne pas fonctionner...  :(
 
Enfin, je sais pas si j'ai fait toutes les modifications en fait...
J'ai simplement déclaré ma variable $choix:

Code :
  1. $choix = $_POST['choix']


 
Mais est-ce que je dois faire pareil pour commande? Si oui, comment?


Message édité par fgiuliano le 15-01-2007 à 12:24:17
n°1503050
rufo
Pas me confondre avec Lycos!
Posté le 15-01-2007 à 12:31:57  profilanswer
 

faudrait nous montrer ton code html. Parce que je doute que $libelle puisse avoir la valeur demandée. Ta variable $commande, elle sort d'où?

n°1503072
fgiuliano
Posté le 15-01-2007 à 12:48:48  profilanswer
 

rufo a écrit :

faudrait nous montrer ton code html. Parce que je doute que $libelle puisse avoir la valeur demandée. Ta variable $commande, elle sort d'où?


 
alors voilà mon code html:

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
  3. <head>
  4.    <title>LOGEM SOFTWARE ENGINEERING SA - Achat licence</title>
  5.    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  6.    <meta name="description" content="LOGEM SOFTWARE ENGINEERING SA" />
  7.    <meta name="keywords" content="aide à la planification" />
  8. </head>
  9. <body>
  10.    <form action="<?$PHP_SELF;?>" method="post">
  11.    <?php
  12.  $sql = "SELECT produit.idproduit, libelle, prix FROM prix, produit WHERE produit.idproduit = prix.idproduit";
  13.  $req = mysql_query($sql) or die(mysql_error());
  14.  while ($data = mysql_fetch_array($req))
  15.  {
  16. ?>
  17.  <div>
  18.   <span><input type="checkbox" name="commande[]" value=" <?php echo $data['libelle'];?>"><?php echo $data['libelle'];?></span>
  19.   <span>Prix:</span>
  20.   <span><?php echo $data['prix'];?></span>
  21.  </div>
  22. <?php
  23.  }
  24.  mysql_close();
  25. ?>
  26.  <div><strong>Total: </strong><?php echo $somme; ?></div>
  27.  <div>
  28.   <span><input type="reset" name="Effacer" value="Effacer"></span>
  29.   <span><input type="submit" name="Total" value="Total"></span>
  30.   <span><input type="submit" name="Commander" value="Commander" /></span>
  31.  </div>
  32. </form>
  33. </body>
  34. </html>


 
commande est le nom de mon tableau de checkbox.

n°1503079
rufo
Pas me confondre avec Lycos!
Posté le 15-01-2007 à 13:03:15  profilanswer
 

ben ton pb il est là :  
c'est $commande = $_POST['commande']; qu'il faut faire, et non pas $choix = $_POST['choix'];

n°1503082
ixemul
Nan mais sans blague ! ⚡
Posté le 15-01-2007 à 13:06:59  profilanswer
 

[:mlc2] la requete à chaque iteration de boucle  :cry:

n°1503092
fgiuliano
Posté le 15-01-2007 à 13:27:41  profilanswer
 

ixemul a écrit :

[:mlc2] la requete à chaque iteration de boucle  :cry:


 
 :(  Désolée... J'ai modifié cela...
 
Et j'ai tenu compte des corrections de rufo mais ça ne fonctionne toujours pas...
Qu'est-ce que je fais faux?  :pt1cable:

mood
Publicité
Posté le 15-01-2007 à 13:27:41  profilanswer
 

n°1503095
ixemul
Nan mais sans blague ! ⚡
Posté le 15-01-2007 à 13:41:58  profilanswer
 

fgiuliano a écrit :

:(  Désolée... J'ai modifié cela...
 
Et j'ai tenu compte des corrections de rufo mais ça ne fonctionne toujours pas...
Qu'est-ce que je fais faux?  :pt1cable:


 
Sans rentrer dans le detail du code php, il serait même plus judicieux de faire un aggregat sur la somme des prix directement en SQL, genre :
 
"SELECT SUM(prix) FROM prix, produit WHERE produit.idproduit = prix.idproduit AND produit.libelle IN(...) "
 

n°1503102
rufo
Pas me confondre avec Lycos!
Posté le 15-01-2007 à 13:49:18  profilanswer
 

perso, dans le value des checkbox, j'aurais plutôt mis les ID des produits puis une fois le formulaire posté, un coup de requête sql qui un SUM() de ce qui a été coché. Pas besoin de boucle, bref, ce que propose ixemul, masi en utilisant les ID et non les libellés (travailler avec les chaînes de caractères, c'est toujours un peu hasardeux, en php comme en SQL, encore plus quand on s'en sert pour une jointure)...

n°1503103
ixemul
Nan mais sans blague ! ⚡
Posté le 15-01-2007 à 13:50:24  profilanswer
 

Faut la faire bosser un peu cette BDD :D

n°1503110
fgiuliano
Posté le 15-01-2007 à 13:55:29  profilanswer
 

Ok, alors je vais tenter ça...
Et si je m'en sors pas... Ben je reviendrais vous demander de l'aide! ;)

n°1503536
fgiuliano
Posté le 16-01-2007 à 11:16:24  profilanswer
 

Voilà, alors, je ne sais pas si c'est la meilleure façon de procéder, mais en tout cas, ça fonctionne!  :)  
 

Code :
  1. <?php
  2. include("secure.php" );
  3. include("pcdb.php" );
  4. $connexion = mysql_connect($hote, $utilisateur, $mdp);
  5. $choix_base = mysql_select_db($data_base, $connexion)or die("Impossible d'ouvrir le fichier de comptes" );
  6. if(isset($_POST['Total']))
  7. {
  8.  if(!empty($_POST['commande']))
  9.  {
  10.   $liste = implode(',',$_POST['commande']);
  11.   $sql = "SELECT * FROM prix, produit WHERE produit.idproduit = prix.idproduit AND produit.idproduit IN($liste)";
  12.   $req = mysql_query($sql) or die (mysql_error());
  13.   while($data = mysql_fetch_array($req))
  14.   {
  15.    $somme = $somme + $data[prix];
  16.   }
  17.  }
  18. }
  19. ?>


 
Merci pour votre aide!!  :hello:

n°1503539
rufo
Pas me confondre avec Lycos!
Posté le 16-01-2007 à 11:20:54  profilanswer
 

T'as plus qu'à remplacer ton SELECT * par SELECT SUM(prix) as Total et c'est bon. Comme ça, t'as plus besoin de ton while...

n°1503543
fgiuliano
Posté le 16-01-2007 à 11:32:07  profilanswer
 

rufo a écrit :

T'as plus qu'à remplacer ton SELECT * par SELECT SUM(prix) as Total et c'est bon. Comme ça, t'as plus besoin de ton while...


 
Ok, mais en faisant cela, ça m'affiche Resource id #5... Pourquoi?  
 

Code :
  1. <?php
  2. include("secure.php" );
  3. include("pcdb.php" );
  4. $connexion = mysql_connect($hote, $utilisateur, $mdp);
  5. $choix_base = mysql_select_db($data_base, $connexion)or die("Impossible d'ouvrir le fichier de comptes" );
  6. if(isset($_POST['Total']))
  7. {
  8.  if(!empty($_POST['commande']))
  9.  {
  10.   $liste = implode(',',$_POST['commande']);
  11.   $sql = "SELECT SUM(prix) AS Total FROM prix, produit WHERE produit.idproduit = prix.idproduit AND produit.idproduit IN($liste)";
  12.   $somme = mysql_query($sql) or die (mysql_error());
  13.  }
  14. }
  15. ?>

n°1503546
fgiuliano
Posté le 16-01-2007 à 11:37:42  profilanswer
 

C'est tout bon!!!  :)  
 
Trop vite...
 

Code :
  1. <?php
  2. include("secure.php" );
  3. include("pcdb.php" );
  4. $connexion = mysql_connect($hote, $utilisateur, $mdp);
  5. $choix_base = mysql_select_db($data_base, $connexion)or die("Impossible d'ouvrir le fichier de comptes" );
  6. if(isset($_POST['Total']))
  7. {
  8.  if(!empty($_POST['commande']))
  9.  {
  10.   $liste = implode(',',$_POST['commande']);
  11.   $sql = "SELECT SUM(prix) AS Total FROM prix, produit WHERE produit.idproduit = prix.idproduit AND produit.idproduit IN($liste)";
  12.   $req = mysql_query($sql) or die (mysql_error());
  13.   $res = mysql_fetch_assoc($req);
  14.   $somme = $res['Total'];
  15.  }
  16. }
  17. ?>


 
Merci beaucoup!  :hello:

n°1503548
ixemul
Nan mais sans blague ! ⚡
Posté le 16-01-2007 à 11:40:50  profilanswer
 

Voila qui me parait plus conventionnel ;)


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

  [Résolu]if qui ne fonctionne pas

 

Sujets relatifs
[RESOLU]Problème d'execution : NoClassDefFoundError :([Résolu] Matrice et fonctions
[Javascript] document.forms[0].submit(); [résolu][resolu] Plugin Visual Editor ne fonctionne pas.
[VBS] (résolu) copy overwrite fonctionne pas.. pourquoi?[Résolu] distinct? order by? mais ca ne fonctionne pas
[resolu] Cree une liste deroulante sous access ki fonctionne?[ASP.Net] selectedindex dans une class ne fonctionne pas ! [résolu]
[RESOLU]Ma commande SQL INSERT INTO ne fonctionne plus ![RESOLU][ALGO]Comment fonctionne le tracking par mail ?
Plus de sujets relatifs à : [Résolu]if qui ne fonctionne pas


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