[Résolu]if qui ne fonctionne pas

if qui ne fonctionne pas [Résolu] - PHP - Programmation

Marsh Posté le 15-01-2007 à 11:48:02    

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
Reply

Marsh Posté le 15-01-2007 à 11:48:02   

Reply

Marsh Posté le 15-01-2007 à 11:52:32    

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 )

Reply

Marsh Posté le 15-01-2007 à 12:02:49    

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?  :(

Reply

Marsh Posté le 15-01-2007 à 12:11:39    

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
Reply

Marsh Posté le 15-01-2007 à 12:15:54    

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
Reply

Marsh Posté le 15-01-2007 à 12:31:57    

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ù?

Reply

Marsh Posté le 15-01-2007 à 12:48:48    

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.

Reply

Marsh Posté le 15-01-2007 à 13:03:15    

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

Reply

Marsh Posté le 15-01-2007 à 13:06:59    

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

Reply

Marsh Posté le 15-01-2007 à 13:27:41    

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:

Reply

Marsh Posté le 15-01-2007 à 13:27:41   

Reply

Marsh Posté le 15-01-2007 à 13:41:58    

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(...) "
 

Reply

Marsh Posté le 15-01-2007 à 13:49:18    

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)...

Reply

Marsh Posté le 15-01-2007 à 13:50:24    

Faut la faire bosser un peu cette BDD :D

Reply

Marsh Posté le 15-01-2007 à 13:55:29    

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

Reply

Marsh Posté le 16-01-2007 à 11:16:24    

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:

Reply

Marsh Posté le 16-01-2007 à 11:20:54    

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...

Reply

Marsh Posté le 16-01-2007 à 11:32:07    

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. ?>

Reply

Marsh Posté le 16-01-2007 à 11:37:42    

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:

Reply

Marsh Posté le 16-01-2007 à 11:40:50    

Voila qui me parait plus conventionnel ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed