Probleme pour une requete.
Résolu/Fermé
drlecteur
Messages postés
36
Date d'inscription
vendredi 6 juillet 2012
Statut
Membre
Dernière intervention
24 octobre 2012
-
17 août 2012 à 09:43
drlecteur Messages postés 36 Date d'inscription vendredi 6 juillet 2012 Statut Membre Dernière intervention 24 octobre 2012 - 21 août 2012 à 11:53
drlecteur Messages postés 36 Date d'inscription vendredi 6 juillet 2012 Statut Membre Dernière intervention 24 octobre 2012 - 21 août 2012 à 11:53
A voir également:
- Probleme pour une requete.
- Il y a eu un problème avec cette requête. nous travaillons à sa résolution aussi vite que nous le pouvons. - Forum Facebook
- Requête sql pix - Forum Python
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de pomme mais pas de pomme de terre ? - Forum Minecraft
- Erreur de requete facebook rencontre - Forum Facebook
- Phpmyadmin historique requete - Forum Linux / Unix
10 réponses
flokocha
Messages postés
1510
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
10 octobre 2015
280
Modifié par flokocha le 17/08/2012 à 10:16
Modifié par flokocha le 17/08/2012 à 10:16
Salut,
Tu dois créer ta requête par l'intermédiaire d'une variable que tu concatèneras en fonction des résultats transmis. Ex :
Etc.
Tu dois créer ta requête par l'intermédiaire d'une variable que tu concatèneras en fonction des résultats transmis. Ex :
$select = "SELECT * FROM CV WHERE 1=1"; // Condition non restrictive, qui te permettra ensuite de concaténer n'importe quelle autre condition en la précédant d'un 'AND'. if (!empty($nom)) $select .= " AND Nom = :Nom"; if (!empty($prenom)) $select .= " AND Prenom = :Prenom";
Etc.
drlecteur
Messages postés
36
Date d'inscription
vendredi 6 juillet 2012
Statut
Membre
Dernière intervention
24 octobre 2012
17 août 2012 à 10:17
17 août 2012 à 10:17
Salut, merci de ton aide mais je n'ai pas compris. Peux tu essayer d'etre plus claire pour un amateur stp ? :)
flokocha
Messages postés
1510
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
10 octobre 2015
280
17 août 2012 à 10:26
17 août 2012 à 10:26
Désolé :)
Je vais essayer :
- Tu crées une requête de base : $select = "SELECT * FROM CV WHERE 1=1";
Le 1=1 sera toujours vrai, donc sa présence n'a aucune incidence sur ta requête. Il te permet simplement par la suite de pouvoir ajouter "AND xxx = xxx ", sans avoir à te soucier s'il s'agit de la première condition ou non.
- Tu vérifies pour chacune de tes variables si elle n'est pas vide, en utilisant la fonction empty() (https://www.php.net/manual/fr/function.empty.php !empty(xxx) est une sorte de raccourci syntaxique équivalent à empty(xxx) == false.
- Si ta variable n'est effectivement pas vide, alors tu peux concaténer la clause concernée dans ta requête : $select .= " AND xxx = xxx";
.= est également une sorte de raccourci syntaxique équivalent à $select = $select . 'xxx'
Et tu auras au final une requête complète et dépendante des variables qui t'auront été transmises, contenue dans ta variable $select que tu pourras utiliser à la place de ta précédente requête : $req = $bdd->prepare($select);
Je vais essayer :
- Tu crées une requête de base : $select = "SELECT * FROM CV WHERE 1=1";
Le 1=1 sera toujours vrai, donc sa présence n'a aucune incidence sur ta requête. Il te permet simplement par la suite de pouvoir ajouter "AND xxx = xxx ", sans avoir à te soucier s'il s'agit de la première condition ou non.
- Tu vérifies pour chacune de tes variables si elle n'est pas vide, en utilisant la fonction empty() (https://www.php.net/manual/fr/function.empty.php !empty(xxx) est une sorte de raccourci syntaxique équivalent à empty(xxx) == false.
- Si ta variable n'est effectivement pas vide, alors tu peux concaténer la clause concernée dans ta requête : $select .= " AND xxx = xxx";
.= est également une sorte de raccourci syntaxique équivalent à $select = $select . 'xxx'
Et tu auras au final une requête complète et dépendante des variables qui t'auront été transmises, contenue dans ta variable $select que tu pourras utiliser à la place de ta précédente requête : $req = $bdd->prepare($select);
drlecteur
Messages postés
36
Date d'inscription
vendredi 6 juillet 2012
Statut
Membre
Dernière intervention
24 octobre 2012
17 août 2012 à 10:41
17 août 2012 à 10:41
Ok j'ai mieux saisi :) . Je vais essayer si je m'en sort pas je reviendrais vous questionner :d. Merci :)
Utilisateur anonyme
17 août 2012 à 11:13
17 août 2012 à 11:13
Bonjour
Puisque tu utilises de paramètres nommés, il faut de plus construire en parallèle l'array qui te servira pour l'execute :
Et il faut aussi corriger le fetch :
Puisque tu utilises de paramètres nommés, il faut de plus construire en parallèle l'array qui te servira pour l'execute :
$arexec=array(); if (!empty($nom)) { $select .= " AND Nom = :Nom"; $arexec[':Nom'] = $nom; } if (!empty($prenom)){ $select .= " AND Prenom = :Prenom"; $arexec[':Prenom'] = $prenom; } ... $req->execute($arexec);
Et il faut aussi corriger le fetch :
while ($donnees = $req->fetch())
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
drlecteur
Messages postés
36
Date d'inscription
vendredi 6 juillet 2012
Statut
Membre
Dernière intervention
24 octobre 2012
17 août 2012 à 11:20
17 août 2012 à 11:20
Ca fait beaucoup d'un coup ^^. Je vais me pencher sur sa mais je suis pas sur de tout saisir :d
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
18 août 2012 à 14:13
18 août 2012 à 14:13
voila une solution, pas testée, il peut subsister des erreurs de frappe ou de copier coller:
<!DOCTYPE > <html> <head> <title>Identifiaction</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <?php $prenom = htmlspecialchars($_POST['prenom']); $nom = htmlspecialchars($_POST['nom']); $Salaire = htmlspecialchars($_POST['Salaire']); $Niveau_detude = htmlspecialchars($_POST['Niveau_detude']); $Niveau_de_poste = htmlspecialchars($_POST['Niveau_de_poste']); $region = htmlspecialchars($_POST['region']); $departement = htmlspecialchars($_POST['departement']); $fonction = htmlspecialchars($_POST['fonction']); $ville = htmlspecialchars($_POST['ville']); //on va empiler les saisies des champs non vides dans un array de recherche et l'array d'execution , ainsi seuls ceux remplis seront pris en compte dans la requette // ATTENTION le nom entre [' ' ) de l'array doit être identique au nom du champ dans ta table de BDD $array_recherche=array(); $arexec=array(); if(!empty($prenom)) $array_recherche['Prenom']=$prenom; $arexec[':Prenom'] = $prenom; } if(!empty($nom)) {$array_recherche['Nom']=$nom; $arexec[':Nom'] = $nom; } if(!empty($fonction)){ $array_recherche['Fonction']=$fonction; $arexec[':Fonction'] = $fonction; } if(!empty($ville)) {$array_recherche['ville']=$ville; $arexec[':ville'] = $ville; } if(!empty($region)){ $array_recherche['Region']=$region; $arexec[':Region'] = $region; } if(!empty($departement)){ $array_recherche['Departement']=$departement; $arexec[':Departement'] = $departement; } if(!empty($Salaire)) {$array_recherche['Salaire']=$Salaire; $arexec[':Salaire'] = $Salaire; } if(!empty($Niveau_detude)) {$array_recherche['Niveau_detude']=$Niveau_detude; $arexec[':Niveau_detude'] = $Niveau_detude; } if(!empty($Niveau_de_poste)) {$array_recherche['Niveau_de_poste']=$Niveau_de_poste; $arexec[':Niveau_de_poste'] = $Niveau_de_poste; } //construction de la requette $req="SELECT * FROM CV "; //parcours de l'array $cp=1; //compteur du nombre de critères remplis foreach($array_recherche as $cle=>$value){ // $cle represente le nom du champ BDD, $value la valeur saisie pour le critere if($cp==1){ //pour le premier critere il faut le where $req .= " WHERE $cle = :$value"; }else{ // pour les criteres suivants pas de WHERE mais il faut rajouter le AND $req .= " AND "; $req .= " $cle = :$value"; } $cp=++; } $req = $bdd->prepare($req); $req->execute($arexec); ?> <?php while ($donnees = $reponse->fetch()) { echo $donnees['Nom'] . '<br />'; echo $donnees['Prenom'] . '<br />'; echo $donnees['Fonction'] . '<br />'; echo $donnees['ville'] . '<br />'; echo $donnees['Region'] . '<br />'; echo $donnees['Departement'] . '<br />'; echo $donnees['Salaire'] . '<br />'; echo $donnees['Niveau_detude'] . '<br />'; echo $donnees['Niveau_de_poste'] . '<br />'; } $reponse->closeCursor(); ?> </body> </html>
drlecteur
Messages postés
36
Date d'inscription
vendredi 6 juillet 2012
Statut
Membre
Dernière intervention
24 octobre 2012
20 août 2012 à 12:21
20 août 2012 à 12:21
ok, je vien de voir ton message sa a l'air vachement bien. Je vais tester sa !! merci beaucoup :)
drlecteur
Messages postés
36
Date d'inscription
vendredi 6 juillet 2012
Statut
Membre
Dernière intervention
24 octobre 2012
20 août 2012 à 15:13
20 août 2012 à 15:13
Bon j'ai rajouter la balise body au debut qu'il manquait j'ai essayer de remettre en forme j'ai bien compris le code par contre sa marche pas et la je vois pas pourquoi. Sa fait un petit moment que je suis dessu mais la la solution ne me vient pas si vous avez des idées je suis prenneur :d
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
20 août 2012 à 18:24
20 août 2012 à 18:24
modifies cette partie
...... //construction de la requette $select="SELECT * FROM CV "; //parcours de l'array $cp=1; //compteur du nombre de critères remplis foreach($array_recherche as $cle=>$value){ // $cle represente le nom du champ BDD, $value la valeur saisie pour le critere if($cp==1){ //pour le premier critere il faut le where $select .= " WHERE $cle = :$value"; }else{ // pour les criteres suivants pas de WHERE mais il faut rajouter le AND $select .= " AND "; $select .= " $cle = :$value"; } $cp=++; } ////test pour voir la requette echo "Requette construite: ".$select; /// $req = $bdd->prepare($select); $req->execute($arexec); ?> <?php while ($donnees = $req->fetch()) { ......
drlecteur
Messages postés
36
Date d'inscription
vendredi 6 juillet 2012
Statut
Membre
Dernière intervention
24 octobre 2012
21 août 2012 à 11:53
21 août 2012 à 11:53
c'est bon j'ai fini sa fonctionne. Merci beaucoup pour vos conseils !