Accueil > Forum > > > > Php - foreach pour construire une requête multicritères
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
|
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))
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|