begin process at 2012 05 31 05:39:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive PHP

 > 

Archives

 > 

AU SECOURS !!!

 > 

Php - foreach pour construire une requête multicritères


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Php - foreach pour construire une requête multicritères

samedi 30 avril 2005 à 03:20:24 | Php - foreach pour construire une requête multicritères

lolo479

Bonjour, j'essai de contruire dynamiquement une requête mais je n'arrive pas à ce que le "AND" s'écrive au bon endroit !!!
Si qq'un à une idée je suis preuneur, çà fait 3 heures que je suis dessus et je n'arrive à rien !
 
<?php

$query
= "SELECT * FROM ".PREFIXE."membres WHERE ";
$and = 'AND ';
$C = 0;
foreach(
$tablo1 as $champ=>$valeur) 
   {
   if(
$valeur != '' && $C != 0 ) { $query .=$champ.'=\''.$valeur.'\''; } 
   elseif(
$valeur != '' && $C != 0 ) { $query .=$and .$champ.'=\''.$valeur.'\''; }
   
$C++;
   
}

?>
samedi 30 avril 2005 à 03:21:52 | Re : Php - foreach pour construire une requête multicritères

lolo479

Un code un peu plus propre, désolé (mon 1er post ici)

<?php

$query = "SELECT * FROM ".PREFIXE."membres WHERE ";
$and = 'AND ';
$C = 0;
foreach($tablo1 as $champ=>$valeur) 
   {
   if($valeur != '' && $C != 0 ) { $query .=$champ.'=\''.$valeur.'\''; } 
   elseif($valeur != '' && $C != 0 ) { $query .=$and .$champ.'=\''.$valeur.'\''; }
   $C++;
   }

?>
samedi 30 avril 2005 à 11:16:41 | Re : Php - foreach pour construire une requête multicritères

malalam

Administrateur CodeS-SourceS
Hello,

tes 2 conditions sont identiques.
samedi 30 avril 2005 à 15:38:56 | Re : Php - foreach pour construire une requête multicritères

Anthomicro

Salut,

<?php

$query = 'SELECT * FROM '.PREFIXE.'membres WHERE ';
$and = 'AND ';
$C = 0;
foreach($tablo1 as $champ=>$valeur) 
{
    if($valeur != '' AND $C !==0)
    {
            $query .=$champ.'=\''.$valeur.'\'';
    } 
   else
    {
        $query .=$and .$champ.'=\''.$valeur.'\'';
    }
   $C++;
}

?>


a +

    samedi 30 avril 2005 à 17:47:49 | Re : Php - foreach pour construire une requête multicritères

    lolo479

    Bonjour etmerci pour vos réponses mais ça ne marche pas non plus !
    Je précise un peu monproblème.
    J'ai un formulaire de recherche avec 22 champs composés de : checkbox, liste déroulante et zone de saisie de texte.
    Ce formulaire sert à "interroger" une table avec tout mes champs, là ou ça coince, vous l'aurez compris, c'est la construction dynamique de la requete !
    (j'ai bien pensé la construire avec de "if" mais avec 22 champs l'idée n'est pas bonne : trop de possibilité !)

    L'utilisateur doit pouvoir, en effet, cocher ou choisir la ou les conditions et avoir un résultat de sa recherche. Le gros soucis et donc la gestion du "AND"
    J'ai commencé avec ça, en pensant "découper" la requête puis la concaténer ... Mais je bloque !

    <?php
    // déclaration des tableaux en fonction du type de champ récupéré          
        // Les checkbox et les listes déroulantes qui retournent rien si elles ne sont pas choisi (13)
    $tablo1
    = array(
    'certif'=>$_POST['certif'],'blacklist'=>$_POST['blacklist'],'chrc'=>$_POST['chrc'],'chrcfbi'=>$_POST['chrcfbi'],'chrchbi'=>$_POST['chrchbi'
    ],
    'chrcles2bi'=>$_POST['chrcles2bi'],'chrf'=>$_POST['chrf'],'chrfbi'=>$_POST['chrfbi'],'chrfh'=>$_POST['chrfh'],'chrh'=>$_POST['chrh'],'chrhbi'=>$_POST['chrhbi'
    ],
    'chrhh'=>$_POST['chrhh'],'chrtrans'=>$_POST['chrtrans'],'sexe'=>$_POST['sexe'],'pays'=>$_POST['pays'],'region'=>$_POST['region'],'location'=>$_POST['location'
    ],
    'mobilite'=>$_POST['mobilite'
    ]);
        
    // Les listes déroulantes pour les tranches d'âge (2)
    $tablo2
    = array(
    'age1'=>$_POST['age1'
    ],
    'age2'=>$_POST['age2'
    ]);  
    // Construction de la requête
        // On parcourt tablo1 et on gére l'opérateur AND
    $query = "SELECT * FROM ".PREFIXE."membres WHERE "
    ;
    $C = 0
    ;
    $and = 'AND '
    ;
    foreach(
    $tablo1 as $champ=>$valeur
    )
        {
        
    $C
    ++;
        if (
    $C == 18) { $and = ''
    ; }
        if (
    $valeur != ''
    )
            {
    $query .= $champ.'=\''.$valeur.'\' '.$and
    ; }
        }
        
    // Cas particulier des tranches d'âge
    foreach($tablo2 as $champ=>$valeur
    )
        {
        if (
    $valeur != ''
    )
            {
            if (
    $valeur == 1){$query .= ' AND '.$champ.' BETWEEN 18 AND 25'
    ; }
            if (
    $valeur == 2){$query .= ' AND '.$champ.' BETWEEN 25 AND 30'
    ; }
            if (
    $valeur == 3){$query .= ' AND '.$champ.' BETWEEN 30 AND 40'
    ; }
            if (
    $valeur == 4){$query .= ' AND '.$champ.' BETWEEN 40 AND 50'
    ; }        
            if (
    $valeur == 5){$query .= ' AND '.$champ.' >50'
    ; }
            }
        }
        
    // Cas particulier du pseudo %LIKE%
    if ($_POST['pseudo'] != ''
    )
     {
    $query .= ' AND pseudo LIKE \'%'.$_POST['pseudo'].'%\''
    ; }
        
    // Cas particulier de la photo (si la case est cochée le champ doit avoir un enregistrement)
    if ($_POST['photo1'] != ''
    )
     {
    $query .= ' AND photo1 IS NOT NULL'
    ; }                    
    // On exécute la requête   
    echo"$query"
    ;
    $requete = mysql_query($query) or die ("Requête invalide"
    );
    ?>




    dimanche 1 mai 2005 à 04:55:56 | Re : Php - foreach pour construire une requête multicritères

    lolo479

    Réponse acceptée !
    4.48 du matin j'ai trouvé ! Plus d'une semaine sur ce truc !
    Bon pour ceux que ça interresse voilà comment je m'en suis tiré, pas sur que ça soit rigoureux ou optimal mais ça marche !
    L'astuce est de ce souvenir que "1=1" renvoi tjrs "TRUE", je m'en suis servit pour la clause "WHERE" puis géré le "AND" dans le "foreach".


    <?php
    // déclaration des tableaux en fonction du type de champ récupéré
    // Les checkbox et les listes déroulantes qui retournent rien si elles ne sont pas choisi (18)
    $tablo1 = array(
    'certif'=>$_POST['certif'],'blacklist'=>$_POST['blacklist'],'chrc'=>$_POST['chrc'],'chrcfbi'=>$_POST['chrcfbi'],'chrchbi'=>$_POST['chrchbi'],'chrcles2bi'=>$_POST['chrcles2bi'],'chrf'=>$_POST['chrf'],'chrfbi'=>$_POST['chrfbi'],'chrfh'=>$_POST['chrfh'],'chrh'=>$_POST['chrh'],'chrhbi'=>$_POST['chrhbi'],'chrhh'=>$_POST['chrhh'],'chrtrans'=>$_POST['chrtrans'],'sexe'=>$_POST['sexe'],'pays'=>$_POST['pays'],'region'=>$_POST['region'],'location'=>$_POST['location'],'mobilite'=>$_POST['mobilite']);
    // Les listes déroulantes pour les tranches d'âge (2) ( 0->Tous, 1->18-25ans, 2->25-30ans ...) (2)
    $tablo2 = array(
    'age1'=>$_POST['age1'],
    'age2'=>$_POST['age2']);
    // Construction de la requête
    // On initalise la requête et on valide le "WHERE" avec 1=1 qui renvoi tjrs "TRUE"
    $query = "SELECT * FROM ".PREFIXE."membres WHERE 1=1 ";
    $and = ' AND ';
    // On parcourt le tableau
    foreach($tablo1 as $champ=>$valeur)
    {
    if ( $valeur != '' ) { $query .=$and .$champ.'=\''.$valeur.'\''; }
    // Cas particulier des tranches d'âge
    foreach($tablo2 as $champ=>$valeur)
    {
    if ($valeur != '')
    {
    if ($valeur == 1){$query .= ' AND '.$champ.' BETWEEN 18 AND 25'; }
    if ($valeur == 2){$query .= ' AND '.$champ.' BETWEEN 25 AND 30'; }
    if ($valeur == 3){$query .= ' AND '.$champ.' BETWEEN 30 AND 40'; }
    if ($valeur == 4){$query .= ' AND '.$champ.' BETWEEN 40 AND 50'; }
    if ($valeur == 5){$query .= ' AND '.$champ.' >50'; }
    }
    }
    // Cas particulier du pseudo %LIKE%
    if ($_POST['pseudo'] != '')
    { $query .= ' AND pseudo LIKE \'%'.$_POST['pseudo'].'%\''; }
    // Cas particulier de la photo (si la case est cochée le champ doit avoir un enregistrement)
    if ($_POST['photo1'] != '')
    { $query .= ' AND photo1 !=\'\''; }
    // On exécute la requête
    $requete = mysql_query($query) or die ("Requête invalide");
    ?>


    Cette discussion est classée dans : valeur, and, requête, query, foreach


    Répondre à ce message

    Sujets en rapport avec ce message

    Toujours probleme foreach... [ par Clonk ] Mais un peu différent:j'ai trouvé une parade, voilà mon code:foreach($lines as $line) { $line = trim($line); if ($line!="" AND $line!="Nom problème de requête [ par brice57 ] Bonjour, j'ai un problème avec la requête suivante que je ne parviens pas à exécuter sur une base Mysql:$query = "DELETE FROM Defi WHERE Passteam=".$p poste d'un formulaire [ par damien174 ] bonjour, j'ai un soucis, voici ce que je dois faire :- un formulaire est posté avec des renseignement divers et en le postant ajoute unenregistrement toujours un pb de foreach... [ par arnold002 ] Bonjour à tous,J'ai toujours un pb d'update de bdd lorsque j'utilise l'argument foreach. foreach ($annee <FON Problème avec pagination php de résultats de requete sql [ par dieusurterre ] J'ai tenté d'appliquer le code donné dans le tuto sur la pagination... mais j'ai une erreur qui me revient concernant la ligne en rouge [$nb_enreg = m réccupérer une valeur dans une base de donnée et la modifier [ par wokba ] bonjour, J'ai un petit probleme: J'essaye de réccupérer une valeur d'une donnée enregistrée dans ma base de donnée, et ensuite j'aimerais faire cett Tester le résultat d'une requête MySQL avant fetch [ par Evangun ] Bonsoir à tous ! j'espérais faire qqch du genre : $query = mysql_query("select * FROM `table` where car = '0'"); if(!empty($query)){         echo 'I recuperer valeur menu deroulant en php mysql [ par pisse ] bonjour je voudrais recuperer dans generic.php la valeur du menu deroulant choisi mé j'y arrive pas si kelkun peut m'aider merci voici le code       & Problème foreach [ par nougitch ] Bonsoir,Je souhaites updater ma table en fonction de 3 variables, à savoir la ligne, la colonne et la cellule.J'ai suivi ce que m'a dit Anthomicro ave Additionner les valeurs d'une requete [ par babatt92 ] bonjour,Je n'arrive pas à additionner les valeurs de ma requete.$query = "SELECT PVVente As CoteFROM Para_Vente WHERE ProduitID1 = ";If (empty($PID))


    Nos sponsors


    Sondage...

    Comparez les prix

    CalendriCode

    Mai 2012
    LMMJVSD
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   

    Consulter la suite du CalendriCode

    Photothèque

    A découvrir



     
    Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
    CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
    CodeS-SourceS.com© est une marque déposée tous droits réservés

    Google Coop CodeS-SourceS Google Coop CodeS-SourceS
    Temps d'éxécution de la page : 0,608 sec (3)

    Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales