Moteur de recherche plusieurs catégories

Messages postés
3
Date d'inscription
jeudi 12 septembre 2019
Statut
Membre
Dernière intervention
13 septembre 2019
- - Dernière réponse : jordane45
Messages postés
26285
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 septembre 2019
- 13 sept. 2019 à 22:09
Bonjour,

Voila, j'ai une base de donnée, je peux faire des recherches grâce à un mot clé, ca marche très bien.
Mon problème est que ma table est vaste et j'aimerai pouvoir filtrer par catégories.
Exemple, je cherche le mot "permis" et je sélectionne la langue française pour filtrer les résultats.
J'arrive à filtrer pour une catégorie, mais sans pouvoir chercher le mot, ou l'inverse.

Mon champ de recherche:
</form><form method="GET">
<input type="search" name="q" placeholder="Recherche..." style="width: 300px; height: 40px;"/>
<input type="submit" value="Valider" style="width: 75px; height: 40px;" />

Mon code PHP ( je met juste la fonction lié à la recherche et l'affichage):

$permis1 = $bdd->query('SELECT * FROM permis1 WHERE Titre  LIKE "%'.$q.'%" ORDER BY id '); 
   if($permis1->rowCount() == 0) {
      $permis1 = $bdd->query('SELECT * FROM permis1 WHERE CONCAT(Titre, Lien, Type, duree) LIKE "%'.$q.'%" ORDER BY id ');


Je cherche depuis 1 semaine, je n'arrive pas à faire les deux, chercher un mot clé et sélectionner une catégorie.
Afficher la suite 

2 réponses

Messages postés
26285
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 septembre 2019
1783
0
Merci
Bonjour
Connais tu le langage sql ?
Sais tu que dans un where tu peux mettre plusieurs conditions en utilisant des AND ou des OR

raven37
Messages postés
3
Date d'inscription
jeudi 12 septembre 2019
Statut
Membre
Dernière intervention
13 septembre 2019
-
Bonjour,
Oui j'ai essayer, en mettant plusieurs formulaires comme :
</form><form method="GET">
<input type="search" name="q" placeholder="Recherche..." style="width: 300px; height: 40px;"/>
 <label for="Duree">Duree : </label> 
             <SELECT name="Duree" size="1">
<OPTION>Sans objet
<OPTION>30 jours ou moins
<input type="submit" value="Valider" style="width: 75px; height: 40px;" />


Et ensuite essayé avec un AND et comme resultat j'ai soit l'un soit l'autre mais pas les deux ( le mot clé et la catégorie)
jordane45
Messages postés
26285
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 septembre 2019
1783 > raven37
Messages postés
3
Date d'inscription
jeudi 12 septembre 2019
Statut
Membre
Dernière intervention
13 septembre 2019
-

j'ai essayer, en mettant plusieurs formulaires

Tu ne dois mettre qu'un seul formulaire....
Et dedans... mettre les différents critères sur lesquels tu veux faire ta recherche...

Bien entendu.. si tu ne nous montres pas EXACTEMENT le code du formulaire en question avec le code PHP qui fait la recherche ensuite.. on ne pourra pas t'aider à le corriger.

Sachant que dans le code de formulaire que tu nous montres il y a pas mal d'erreurs...
Le formulaire n'est pas fermé
Le select n'est pas fermé non plus

Je t'invite, au passage, à lire ET APPLIQUER le contenu de ce lien :
http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Cela devrait t'aider à corriger pas mal de soucis...
Commenter la réponse de jordane45
Messages postés
3
Date d'inscription
jeudi 12 septembre 2019
Statut
Membre
Dernière intervention
13 septembre 2019
0
Merci
Avec ce code la, j'ai ma table qui s'affiche très bien et aucun soucis pour rechercher un mot clé.

<?php

$bdd = new PDO('mysql:host=localhost;dbname=;charset=utf8','','');

$permis1 = $bdd->query('SELECT * FROM permis1 ORDER BY ID ');
if(isset($_GET['q']) AND !empty($_GET['q'])) {
   $q = htmlspecialchars($_GET['q']);
   $permis1 = $bdd->query('SELECT * FROM permis1 WHERE Titre  LIKE "%'.$q.'%"  ORDER BY id '); 
   if($permis1->rowCount() == 0) {
      $permis1 = $bdd->query('SELECT * FROM permis1 WHERE CONCAT(Titre, Lien, Type, duree) LIKE "%'.$q.'%" ORDER BY id ');
   }
}
?>
<div class="container">

</form><form method="GET">
   <input type="search" name="q" placeholder="Recherche..." style="width: 300px; height: 40px;"/>
   <input type="submit" value="Valider" style="width: 75px; height: 40px;" />
<?php if($permis1->rowCount() > 0) { ?>
<table class="table table-striped " >




Mon problème, c'est que si je rajoute une recherche par catégorie, comme:

</form><form method="GET">
<input type="search" name="q" placeholder="Recherche..." style="width: 300px; height: 40px;"/>
<label for="Duree">Duree : </label>
<SELECT name="Duree" size="1">
<OPTION>Sans objet
<OPTION>30 jours ou moins
<input type="submit" value="Valider" style="width: 75px; height: 40px;" />



et ensuite un AND LIKE "%'.$Duree.'%" à la suite de la ligne

   $permis1 = $bdd->query('SELECT * FROM permis1 WHERE Titre  LIKE "%'.$q.'% AND LIKE "%'.$Duree.'% "  ORDER BY id ')


Ça continue à afficher seulement mon premier mot clé
jordane45
Messages postés
26285
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 septembre 2019
1783 -
Je recommence....
Commence par appliquer ceci : http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Et également ça :
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

ta requête est fausse... Tu as légèrement oublié d'indiquer sur quel champ rechercher ta "duree"
SELECT *
 FROM permis1
 WHERE Titre  LIKE "%'.$q.'%" 
AND `LENOMDUCHAMPOUCHERCHER`LIKE "%'.$Duree.'%"  
ORDER BY id '



Je précise également que la fonction htmlspecialchars ne doit pas être utilisée pour stocker des données en BDD ni pour les "lire"...
Cette fonction ne doit être utilisée QUE lors d'affichage sur une page.

Sache également que la fonction rowCount() ( en PDO) ne DOIT PAS s'utiliser sur une requête SELECT (tel qu'expliqué dans la documentation officielle )
Commenter la réponse de raven37