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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème d'inbricatation avec mes if

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème d'inbricatation avec mes if

n°1880909
sinifer
Posté le 05-05-2009 à 08:16:52  profilanswer
 

Bonjours,
 
Voilà j'ai un petit problème avec mon imbrication de if de plus mon code n'est pas des plus logique donc si quelqu'un pourrait me guider ver une solution plus efficace ce serait gentille.
 
Mon problème est le suivant je veu créer un formulaire ou l'on met deux dates on peu aussi en mettre qu'une ( date_du && date_au) si je mets juste date_du sa va m'affiché tou les renseignement après cette date, et si je me date_au sa me donne les resultats d'après. et si je mets les deu dates sa m'affiche ce qu'il y a entre c'est ce que j'ai fai mais j'ai toujours des problème si quelqu'un voit l'erreur ce serai gentille ou si quelqu'un pourrai me guidé ver une autre solution je le remerci  
 
je vous donne mon code qui est :
 

Code :
  1. <?php
  2. if (isset($date_du) && isset($date_au))
  3. {
  4.  $query_vg = mysql_query("SELECT IF(customers_from LIKE '1st%','1rst',customers_from) AS Origin,
  5.           COUNT(*) AS effectif_vg
  6.         FROM customers  inner join relances_gratuites on customers.customers_id=relances_gratuites.customers_id
  7.         WHERE customers_client='0'
  8.         AND customers_emv='0'
  9.         AND customers_seance ='0'
  10.         AND relances_gratuites_inscription_date>='" . $date_du . "' and  relances_gratuites_inscription_date<='" . $date_au . "'
  11.         GROUP BY Origin " );
  12.      $query = mysql_query("SELECT IF(cu.customers_from LIKE '1st%','1rst',cu.customers_from) AS Origin,
  13.          COUNT(DISTINCT cu.customers_id) AS effectif, count(co.commandes_status) AS command,
  14.          AVG(co.commandes_montant) AS Mmc
  15.        FROM customers cu
  16.        INNER JOIN commandes co
  17.        ON cu.customers_id=co.customers_id
  18.        INNER JOIN relances_gratuites rg
  19.        ON cu.customers_id=rg.customers_id 
  20.        WHERE co.commandes_status='1'
  21.        AND rg.relances_gratuites_inscription_date>='" . $date_du . "' AND  rg.relances_gratuites_inscription_date<='" . $date_au . "' 
  22.        GROUP BY Origin ";
  23.  else if (isset($date_du) && $date_du != '')
  24.  {
  25.   $query_vg = mysql_query("SELECT IF(customers_from LIKE '1st%','1rst',customers_from) AS Origin,
  26.            COUNT(*) AS effectif_vg
  27.          FROM customers  inner join relances_gratuites on customers.customers_id=relances_gratuites.customers_id
  28.          WHERE customers_client='0'
  29.          AND customers_emv='0'
  30.          AND customers_seance ='0'
  31.          AND relances_gratuites_inscription_date>='" . $date_du . "'
  32.          GROUP BY Origin " );
  33.   $query = mysql_query("SELECT IF(cu.customers_from LIKE '1st%','1rst',cu.customers_from) AS Origin,
  34.           COUNT(DISTINCT cu.customers_id) AS effectif, count(co.commandes_status) AS command,
  35.           AVG(co.commandes_montant) AS Mmc
  36.         FROM customers cu
  37.         INNER JOIN commandes co
  38.         ON cu.customers_id=co.customers_id
  39.         INNER JOIN relances_gratuites rg
  40.         ON cu.customers_id=rg.customers_id 
  41.         WHERE co.commandes_status='1'
  42.         AND rg.relances_gratuites_inscription_date>='" . $date_du . "' 
  43.         GROUP BY Origin" );
  44.  }
  45.  else (isset($date_au) && $date_au != '')
  46.  {
  47.   $query_vg = mysql_query("SELECT IF(customers_from LIKE '1st%','1rst',customers_from) AS Origin,
  48.            COUNT(*) AS effectif_vg
  49.          FROM customers  inner join relances_gratuites on customers.customers_id=relances_gratuites.customers_id
  50.          WHERE customers_client='0'
  51.          AND customers_emv='0'
  52.          AND customers_seance ='0'
  53.          AND relances_gratuites_inscription_date<='" . $date_au . "'
  54.          GROUP BY Origin " );
  55.   $query = mysql_query("SELECT IF(cu.customers_from LIKE '1st%','1rst',cu.customers_from) AS Origin,
  56.           COUNT(DISTINCT cu.customers_id) AS effectif, count(co.commandes_status) AS command,
  57.           AVG(co.commandes_montant) AS Mmc
  58.         FROM customers cu
  59.         INNER JOIN commandes co
  60.         ON cu.customers_id=co.customers_id
  61.         INNER JOIN relances_gratuites rg
  62.         ON cu.customers_id=rg.customers_id 
  63.         WHERE co.commandes_status='1'
  64.         AND rg.relances_gratuites_inscription_date<='" . $date_au . "' 
  65.         GROUP BY Origin" );
  66.  }
  67. }
  68. ?>

mood
Publicité
Posté le 05-05-2009 à 08:16:52  profilanswer
 

n°1880933
sinifer
Posté le 05-05-2009 à 09:35:43  profilanswer
 

je vien de remarqué que si j'enlève les else if et else sa m'enlève des messages d'erreur je comprend pas pourquoi??? normalement quant on fai des imbrication on met else if non???

n°1880936
olivthill
Posté le 05-05-2009 à 09:41:53  profilanswer
 

Sur le plan de la logique :
 
Il y a deux critères, donc 2 x 2 cas = 4 cas. Mais votre programme n'a que 3 if. Je ne sais pas si c'est normal de laisser tomber le quatrième cas.
 
Les deux critères sont testés en même temps. Il serait peut-être plus simple de les tester séparément :

if (isset($date_du)) {
  if (isset($date_au)) {
  }
  else {
  }
}
else {
  if (isset($date_au)) {
  }
  else {
  }
}

En regardant le code, on s'aperçoit qu'il y a au moins un autre critère, if ($date_au != ''), et je suppose que l'on devrait aussi avoir if ($date_au != ''). Donc, il faudrait en fait avoir ceci :

if (isset($date_du) && $date_du != '') {
  if (isset($date_au)  && $date_au != '') {
  }
  else {
  }
}
else {
  if (isset($date_au)  && $date_au != '') {
  }
  else {
  }
}


n°1880968
sinifer
Posté le 05-05-2009 à 10:16:03  profilanswer
 

Merci pour tes éclaircissements, je suis dessus, mais je voulais comprendre pour le quatrième cas vue que mon premier cas est:  
date_du (à) date_au,  
mon deuxième est:
plus grand que date_du,
et mon troisième est:  
plus petit que date_au.
 
personnellement je vois pas la quatrième??

n°1880973
sinifer
Posté le 05-05-2009 à 10:33:57  profilanswer
 

voilà j'a retouché mon code comme celà mais c'est la quatrième condition qui me pose problème
 

Code :
  1. if (isset($date_du) && $date_du != '') {
  2.  if (isset($date_au)  && $date_au != '') {
  3.  $query_vg = mysql_query("SELECT IF(customers_from LIKE '1st%','1rst',customers_from) AS Origin,
  4.           COUNT(*) AS effectif_vg
  5.         FROM customers  inner join relances_gratuites on customers.customers_id=relances_gratuites.customers_id
  6.         WHERE customers_client='0'
  7.         AND customers_emv='0'
  8.         AND customers_seance ='0'
  9.         AND relances_gratuites_inscription_date>='" . $date_du . "' and  relances_gratuites_inscription_date<='" . $date_au . "'
  10.         GROUP BY Origin " );
  11.      $query = mysql_query("SELECT IF(cu.customers_from LIKE '1st%','1rst',cu.customers_from) AS Origin,
  12.          COUNT(DISTINCT cu.customers_id) AS effectif, count(co.commandes_status) AS command,
  13.          AVG(co.commandes_montant) AS Mmc
  14.        FROM customers cu
  15.        INNER JOIN commandes co
  16.        ON cu.customers_id=co.customers_id
  17.        INNER JOIN relances_gratuites rg
  18.        ON cu.customers_id=rg.customers_id 
  19.        WHERE co.commandes_status='1'
  20.        AND rg.relances_gratuites_inscription_date>='" . $date_du . "' AND  rg.relances_gratuites_inscription_date<='" . $date_au . "' 
  21.        GROUP BY Origin " );
  22.  }
  23.  else {
  24.   $query_vg = mysql_query("SELECT IF(customers_from LIKE '1st%','1rst',customers_from) AS Origin,
  25.            COUNT(*) AS effectif_vg
  26.          FROM customers  inner join relances_gratuites on customers.customers_id=relances_gratuites.customers_id
  27.          WHERE customers_client='0'
  28.          AND customers_emv='0'
  29.          AND customers_seance ='0'
  30.          AND relances_gratuites_inscription_date>='" . $date_du . "'
  31.          GROUP BY Origin " );
  32.   $query = mysql_query("SELECT IF(cu.customers_from LIKE '1st%','1rst',cu.customers_from) AS Origin,
  33.           COUNT(DISTINCT cu.customers_id) AS effectif, count(co.commandes_status) AS command,
  34.           AVG(co.commandes_montant) AS Mmc
  35.         FROM customers cu
  36.         INNER JOIN commandes co
  37.         ON cu.customers_id=co.customers_id
  38.         INNER JOIN relances_gratuites rg
  39.         ON cu.customers_id=rg.customers_id 
  40.         WHERE co.commandes_status='1'
  41.         AND rg.relances_gratuites_inscription_date>='" . $date_du . "' 
  42.         GROUP BY Origin" );
  43.  }
  44. }
  45.  else {
  46.   if (isset($date_au)  && $date_au != '') {
  47.  
  48.   $query_vg = mysql_query("SELECT IF(customers_from LIKE '1st%','1rst',customers_from) AS Origin,
  49.            COUNT(*) AS effectif_vg
  50.          FROM customers  inner join relances_gratuites on customers.customers_id=relances_gratuites.customers_id
  51.          WHERE customers_client='0'
  52.          AND customers_emv='0'
  53.          AND customers_seance ='0'
  54.          AND relances_gratuites_inscription_date<='" . $date_au . "'
  55.          GROUP BY Origin " );
  56.   $query = mysql_query("SELECT IF(cu.customers_from LIKE '1st%','1rst',cu.customers_from) AS Origin,
  57.           COUNT(DISTINCT cu.customers_id) AS effectif, count(co.commandes_status) AS command,
  58.           AVG(co.commandes_montant) AS Mmc
  59.         FROM customers cu
  60.         INNER JOIN commandes co
  61.         ON cu.customers_id=co.customers_id
  62.         INNER JOIN relances_gratuites rg
  63.         ON cu.customers_id=rg.customers_id 
  64.         WHERE co.commandes_status='1'
  65.         AND rg.relances_gratuites_inscription_date<='" . $date_au . "' 
  66.         GROUP BY Origin" );
  67.            }
  68.      else {
  69.      
  70.      
  71.      
  72.         }
  73. }

n°1880998
sinifer
Posté le 05-05-2009 à 11:07:04  profilanswer
 

pour le dernier else j'ai mis : echo "Veuillez insérer une date valide";
 
c'est la seul chose qui ma paru logique, Merci de votre aide mais pourrai-je avoir la confirmation svp

n°1880999
olivthill
Posté le 05-05-2009 à 11:08:07  profilanswer
 

Le quatrième cas est celui où aucune date n'est renseignée, donc où il ne faudrait pas faire de restriction sur le dates dans la requête, pas de test sur les dates dans la clause Where. Mais peut-être que cela retournerait trop de lignes et qu'il ne faudrait pas avoir ce cas. Je ne sais pas.
Edit : Oui, le message est très bien.


Message édité par olivthill le 05-05-2009 à 11:08:35
n°1881001
kao98
...
Posté le 05-05-2009 à 11:10:00  profilanswer
 

Et quelquechose comme ça :

Code :
  1. $condition = "";
  2. if (isset($date_du) && !empty($date_du)) {
  3.    $condition .= " AND rg.relances_gratuites_inscription_date>='" . $date_du . "' ";
  4. }
  5. if (isset($date_au) && !empty($date_au)) {
  6.    $condition .= " AND rg.relances_gratuites_inscription_date<='" . $date_au . "' ";
  7. }
  8. $query_vg = mysql_query("SELECT IF(customers_from LIKE '1st%','1rst',customers_from) AS Origin,
  9.                       COUNT(*) AS effectif_vg
  10.                        FROM customers c inner join relances_gratuites rg on c.customers_id=rg.customers_id
  11.                        WHERE customers_client='0'
  12.                        AND customers_emv='0'
  13.                        AND customers_seance ='0'
  14.                        " . $condition . "                        
  15.                        GROUP BY Origin " );
  16.  
  17. $query = mysql_query("SELECT IF(cu.customers_from LIKE '1st%','1rst',cu.customers_from) AS Origin,
  18.                       COUNT(DISTINCT cu.customers_id) AS effectif, count(co.commandes_status) AS command,
  19.                       AVG(co.commandes_montant) AS Mmc
  20.                        FROM customers cu
  21.                        INNER JOIN commandes co
  22.                        ON cu.customers_id=co.customers_id
  23.                        INNER JOIN relances_gratuites rg
  24.                        ON cu.customers_id=rg.customers_id
  25.                        WHERE co.commandes_status='1'
  26.                        " . $condition . "
  27.                        GROUP BY Origin " );


 
Ce ne serait pas plus simple !?
(Et encore, il est possible de faire, je suis allé vite :o)


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1881010
sinifer
Posté le 05-05-2009 à 11:25:39  profilanswer
 

Merci kao98,
 
tu dis qu'il est possible de faire mieu moi perso sa me va j'ai ce que je voulais et grace a toi j'ai découvert une façon très agréable et bien plus pratique qui me permet d'avoir les deux date ou juste une si elle est renseigné merci mille fois


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème d'inbricatation avec mes if

 

Sujets relatifs
problème de rechercheProblème d'incrémentation de variable!
[SQL] Problème création BDD SQLProblème changement fenêtre
[RESOLU] Probleme Application FileDialogprobléme lors du download de zip en php
Petit probleme en javaProblème sur un programme VBA lorsqu'on ouvre 2 fichiers excel
Problème redirection automatique et méthode POSTProblème d'affichage double boucle (mysql_fetch_array)
Plus de sujets relatifs à : Problème d'inbricatation avec mes if


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