Recherche multicritères PDO problèmes
Fermé
Titiyoyo
-
9 mars 2016 à 13:50
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 - 10 mars 2016 à 17:44
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 - 10 mars 2016 à 17:44
A voir également:
- Recherche multicritères PDO problèmes
- Recherche musique - Guide
- Google recherche par image - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Recherche adresse - Guide
- Recherche privée - Guide
2 réponses
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
199
Modifié par totodunet le 9/03/2016 à 23:51
Modifié par totodunet le 9/03/2016 à 23:51
Bonjour
"Ma requête fonctionne uniquement lorsque 3 champs (sur 4 au total) possèdent une valeur"
Effectivement une seule requête sera exécutée si il y a qu'un seul champ à no. Je pense que ton soucis est dans tes conditions if/else if
Admettons que je ne sélectionne aucun champ, la première requête sera exécutée car tout les champs sont à no, la suivante aussi car le champ nomroche est forcément à no aussi, la suivante encore et ainsi de suite jusqu'au dernier else if. La requête dans le else ne sera pas exécutée.
En gros en PHP on rentre dans le else if si ça répond à la condition même si on était déjà rentré dans un if ou else if avant cela.
Qui ne tente rien n'a rien
"Ma requête fonctionne uniquement lorsque 3 champs (sur 4 au total) possèdent une valeur"
Effectivement une seule requête sera exécutée si il y a qu'un seul champ à no. Je pense que ton soucis est dans tes conditions if/else if
Admettons que je ne sélectionne aucun champ, la première requête sera exécutée car tout les champs sont à no, la suivante aussi car le champ nomroche est forcément à no aussi, la suivante encore et ainsi de suite jusqu'au dernier else if. La requête dans le else ne sera pas exécutée.
En gros en PHP on rentre dans le else if si ça répond à la condition même si on était déjà rentré dans un if ou else if avant cela.
Qui ne tente rien n'a rien
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
Modifié par jordane45 le 10/03/2016 à 01:01
Modifié par jordane45 le 10/03/2016 à 01:01
Bonjour,
Par contre,
je ne comprend pas .. dans tes requête tes AND / OR
... tu lui demande deux fois la même chose.....
Pour ce qui est de ton problème....
Peux tu faire un ECHO de tes différentes variables pour voir ce qu'elles contiennent ?
Ajoutes également des TRY/CATCH dans tes requêtes pour intercepter les éventuelle erreurs...
par exemple :
Cordialement,
Jordane
Par contre,
je ne comprend pas .. dans tes requête tes AND / OR
AND nomroche = :nomroche AND natureroche = :natureroche OR (nomroche = :nomroche AND natureroche = :natureroche)'
... tu lui demande deux fois la même chose.....
Pour ce qui est de ton problème....
Peux tu faire un ECHO de tes différentes variables pour voir ce qu'elles contiennent ?
Ajoutes également des TRY/CATCH dans tes requêtes pour intercepter les éventuelle erreurs...
par exemple :
$sql = " SELECT * FROM rochesvosges WHERE natureroche = :natureroche AND lieu = :lieu AND nomroche = :nomroche "; $a_datas = array(':nomroche'=>$nomroche , ':lieu'=>$lieu , ':cartegeologique'=>$cartegeologique ); try{ $prepare = $bdd->prepare($sql); $prepare->execute($a_datas); //on stocke le résultat dans un array $donnees = $prepare->fetchAll(); } catch (Exception $e) { echo 'Erreur : ' . $e->getMessage(); exit(); }
Cordialement,
Jordane
Modifié par jordane45 le 10/03/2016 à 01:01
Non.
10 mars 2016 à 09:27
J'étais tellement sûr que l'erreur venait de là.
Modifié par totodunet le 10/03/2016 à 10:34
Si je sélectionne 2 champs, il va rentrer dans un else if aussi et j'ai 2 champs à no pourtant
Si je sélectionne 3 champs il rentre dans un des else if car 1 seul champ est à no - là ça va être juste cette fois-ci
Si je sélectionne 4 champs il rentre dans le else donc c'est bon
Si je sélectionne aucun champ il rentre dans le premier if, c'est bon aussi
Les requêtes SQL sont bizarres je trouve moi aussi. Pourquoi tu fais un OR ? Tu demandes de faire un select sur 3 critères ou seulement sur 2 critères.
10 mars 2016 à 16:36
Parce que je veux pouvoir faire ma requête peu importe le champ en "no"
Ou toi tu les ferais comment les requêtes ?
Modifié par totodunet le 10/03/2016 à 17:46
Si tes critères ne sont que des champs textes je propose de remplacer l'opérateur = par like qui évalue le champ par une expression regulière
ainsi pour les champs qui sont pas sélectionnés tu ne les mets pas à 'no' mais à '%' qui correspond à n'importe quel chaîne de caractère. par exemple si lieu n'est pas sélectionné on aura $lieu='%' ce qui signifie dans la requête que lieu pourra avoir toutes les valeurs possibles