Requetes avec des ifs

Résolu
valery54 Messages postés 4 Date d'inscription mercredi 13 août 2008 Statut Membre Dernière intervention 22 septembre 2008 - 22 sept. 2008 à 11:56
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 22 sept. 2008 à 19:46
Bonjour
j'ai un formulaire avec 4 champs. Lorsqu'on le valide, les champs sais permettent de renvoyer les resutals d'une ou plusieur table suivant les cas.
Ca signifie pour moi que dans chaque cas ou les champs du formulaire sot remplis, je dois avoir une requette particulière, donc une infinité de if.

Voici une partie.

$nom1= substr($_POST['sql_nom'],0,3);
$prenom1= substr($_POST['sql_prenom'],0,3);
$paysres1= $_POST['sql_pays'];

if ($nom1)
      { 
    if ($prenom1)
             { if ($paysres1)
               {
                 $req = reqmysql("select nom, prenom, paysr, titre, date_naissance from users, agenda_anniv
                                                                           where nom like '$nom1%'
                                                                          and prenom like '$prenom1%'
                                                                          and paysr = '$payres1'
                                                                          and users.id = agenda_anniv.id_mbr");
               }
              else
              {
              $req = reqmysql("select nom, prenom, paysr, titre, date_naissance from users, agenda_anniv
                                                                          where nom like '$nom1%'
                                                                          and prenom like '$prenom1%'
                                                                          and users.id = agenda_anniv.id_mbr");
              
             
              }
            
             }
            
    else if ($paysres1)
           {
             $req = reqmysql("select nom, prenom, paysr, titre, date_naissance from users, agenda_anniv
                                                                     where nom like '$nom1%'
                                                                     and paysr like '$prenom1%'
                                                                     and users.id = agenda_anniv.id_mbr");
          
          
           }
           else
           {
           $req = reqmysql("select nom, prenom, paysr, titre, date_naissance from users, agenda_anniv
                                                                      where nom like '$nom1%'
                                                                      and users.id = agenda_anniv.id_mbr");
      
Est ce que je peux gérer tout ça avec une seule requete? si oui, laquelle?

Merci  à vous.

c'est bien celà

5 réponses

valery54 Messages postés 4 Date d'inscription mercredi 13 août 2008 Statut Membre Dernière intervention 22 septembre 2008
22 sept. 2008 à 17:47
Partant de ce que tu m'as propsé, voilà ce que j'ai fait et qui fonctionne.

$sql = "select nom, prenom, paysr, titre, date_naissance from users, agenda_anniv
        where 1=1 and users.id=agenda_anniv.id_mbr" ;


if ($nom)
{
$sql1 = " AND users.nom like '$nom%'";


};
if ($prenom)
{
$sql2 = " AND users.prenom like '$prenom%'";


};
if ($paysres)
{
$sql3 = " AND users.paysr like '$paysres%'";


};
   $conditions="$sql1 $sql2 $sql3";
  
                
   $request = "$sql $conditions" ;
   
            
    $req = reqmysql("$request");
 }
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
22 sept. 2008 à 13:41
Salut

Tu peux factoriser la premiere partie de la requete
comme
$sql = "select nom, prenom, paysr, titre, date_naissance from users, agenda_anniv
                                                                     where 1=1 " //1==1  renvoie  toutes les  données et permet de gerer plus facilement les AND ;-)

ensuite tu fais tes tests
if ($nom1)
{
$sql += " AND nom like '$nom1%'"
}
if ($prenom1) {
.....
}
if(.....){...}
.....

//
Et pour finir
$req = reqmysql($sql,"agenda_anniv.id_mbr")

Apres tu peux faire une fonction pour concatener l'ordre SQL si tu as 50 if
(tu place les champs dans un tableau et tu le parcoures)

--> plus propre et plus maintenable
0
valery54 Messages postés 4 Date d'inscription mercredi 13 août 2008 Statut Membre Dernière intervention 22 septembre 2008
22 sept. 2008 à 14:08
ça parait logique, sauf que je pense que tu veux dire
pour les test,
if ($nom1)
{
$sql += " AND nom like '$nom1%'";
$sql1 =$ql+
}
if ($prenom1) {
.$sql += " AND nom like '$prenom1%'";
$sql = $sql+}
if(........

pour pouvoir concatener dans une boucle for...
J'essaie et je vois ce que ça donne.

c'est bien celà
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
22 sept. 2008 à 15:02
Je ne comprends pas trop
les lignes :
$sql1 =$ql+
et
$sql = $sql+

Nouvelle variables ou autres ??
Je ne développes pas souvent en PHP

Je concaténais tout dans $sql pour montrer le type d'algo
mais il y a surement plus sur avec des requetes parametrees contre l'injection SQL
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
22 sept. 2008 à 19:46
Cool que ca marche.

J'avais oublié que la concatenation en php c'est .= ou .

Et j'avais oublié la form que tu proposes elle est peut être meilleure je ne sais pas.

N'oublies pas de valider la source ;-)
0
Rejoignez-nous