Moteur de recherche plusieurs catégories

Fermé
raven37 Messages postés 3 Date d'inscription jeudi 12 septembre 2019 Statut Membre Dernière intervention 13 septembre 2019 - 12 sept. 2019 à 23:10
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 - 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.
A voir également:

2 réponses

jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
12 sept. 2019 à 23:23
Bonjour
Connais tu le langage sql ?
Sais tu que dans un where tu peux mettre plusieurs conditions en utilisant des AND ou des OR

0
raven37 Messages postés 3 Date d'inscription jeudi 12 septembre 2019 Statut Membre Dernière intervention 13 septembre 2019
13 sept. 2019 à 15:16
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)
0
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649 > raven37 Messages postés 3 Date d'inscription jeudi 12 septembre 2019 Statut Membre Dernière intervention 13 septembre 2019
13 sept. 2019 à 18:32

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 :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Cela devrait t'aider à corriger pas mal de soucis...
0
raven37 Messages postés 3 Date d'inscription jeudi 12 septembre 2019 Statut Membre Dernière intervention 13 septembre 2019
Modifié le 13 sept. 2019 à 21:47
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é
0
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
Modifié le 13 sept. 2019 à 22:10
Je recommence....
Commence par appliquer ceci : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Et également ça :
https://forums.commentcamarche.net/forum/affich-37584941-php-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 )
0