Barre de recherche n'affiche rien
Fermé
max30_3775
Messages postés
178
Date d'inscription
jeudi 4 novembre 2021
Statut
Membre
Dernière intervention
18 mars 2022
-
19 nov. 2021 à 02:42
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022 - 22 nov. 2021 à 09:32
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022 - 22 nov. 2021 à 09:32
A voir également:
- Barre de recherche n'affiche rien
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Windows 11 barre des taches a gauche - Guide
- Barre verticale mac - Forum MacOS
5 réponses
jordane45
Messages postés
38304
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 novembre 2024
4 705
19 nov. 2021 à 06:55
19 nov. 2021 à 06:55
Bonjour
Commence donc par créer une fonction de recherche sur le même modèle que la fonction : "afficherAnnonce()"
Nb: !empty fait deja le isset.. donc pas besoin d'utiliser les deux
Nb2:. Comme le dit la documentation, il faut éviter d'utiliser la méthode rowcount pour les requêtes de type select
Reviens nous voir avec ta nouvelle fonction si tu as encore des erreurs..
Commence donc par créer une fonction de recherche sur le même modèle que la fonction : "afficherAnnonce()"
Nb: !empty fait deja le isset.. donc pas besoin d'utiliser les deux
Nb2:. Comme le dit la documentation, il faut éviter d'utiliser la méthode rowcount pour les requêtes de type select
Reviens nous voir avec ta nouvelle fonction si tu as encore des erreurs..
max30_3775
Messages postés
178
Date d'inscription
jeudi 4 novembre 2021
Statut
Membre
Dernière intervention
18 mars 2022
19 nov. 2021 à 07:54
19 nov. 2021 à 07:54
Bonjour Jordane,
Les erreurs disparaissent petit à petit. J'ai enlevé le rowcount et le isset. Mais s' il n'y a pas de if rowcount dans ce cas je ne pourrai pas ajouté un else aucun résultat trouvé.
Les erreurs qui apparaissent sont les suivantes:
Notice: Undefined variable: s in C
Fatal error: Uncaught Error: Call to a member function fetch() on null in
dans la page cmdaffichage.php j'ai donc ajouté une autre fonction:
Ensuite dans la page accueil.php, en 1ère ligne, tout en haut:
et finalement à côté de la barre de recherche:
Les erreurs disparaissent petit à petit. J'ai enlevé le rowcount et le isset. Mais s' il n'y a pas de if rowcount dans ce cas je ne pourrai pas ajouté un else aucun résultat trouvé.
Les erreurs qui apparaissent sont les suivantes:
Notice: Undefined variable: s in C
Fatal error: Uncaught Error: Call to a member function fetch() on null in
dans la page cmdaffichage.php j'ai donc ajouté une autre fonction:
<?php function afficherAnnonce(){ global $bdd; $res = []; $sql = 'SELECT * FROM annonces INNER JOIN image_products ON annonces.id= image_products.id_product'; try{ $req = $bdd->prepare($sql); $req->execute(); $data = $req->fetchAll(PDO::FETCH_ASSOC); //on reconstruit un array mieux organisé pour avoir les photos foreach($data as $R){ if(!isset($res[$R['id']])){ $res[$R['id']] = $R; unset($res[$R['id']]['filename_product']); } $res[$R['id']]['images'][] = $R['filename_product']; } }catch(Exception $e){ echo "Erreur dans la requête " . $sql; } // le temps des tests pour voir le résultat return $res; } function rechercheAnnonce(){ global $bdd; $q= htmlspecialchars($_GET['q']); $res = []; $sql = 'SELECT * FROM annonces INNER JOIN image_products ON annonces.id= image_products.id_product WHERE annonces.titre AND annonce.presentation LIKE "%'.$q.'%" ORDER BY id DESC'; try{ $req = $bdd->prepare($sql); $req->execute(); $data = $req->fetchAll(PDO::FETCH_ASSOC); //on reconstruit un array mieux organisé pour avoir les photos foreach($data as $R){ if(!isset($res[$R['id']])){ $res[$R['id']] = $R; unset($res[$R['id']]['filename_product']); } $res[$R['id']]['images'][] = $R['filename_product']; } }catch(Exception $e){ echo "Erreur dans la requête " . $sql; } // le temps des tests pour voir le résultat return $res; } ?>
Ensuite dans la page accueil.php, en 1ère ligne, tout en haut:
<?php include 'cnx.php'; include 'cmdaffichage.php'; $anouncement= afficherAnnonce(); if(!empty($_GET['q'])) { $q= htmlspecialchars($_GET['q']); $search= rechercheAnnonce(); } ?>
et finalement à côté de la barre de recherche:
<h1>Que recherchez-vous?</h1> <input type="search" name="q" placeholder="maison, voiture..." /> <input type="submit" value="Rechercher" /> </form> </div> <?php while ($search = $s ->fetch()) { echo' <div class="annoncepub"> <input type="radio" name="slides" id="i1" checked> <input type="radio" name="slides" id="i2" checked> <input type="radio" name="slides" id="i3" checked> <input type="radio" name="slides" id="i4" checked> <input type="radio" name="slides" id="i5" checked>'; $images = !empty($s['images']) ? $s['images'] : NULL; if($images){ //boucle sur les images echo ' <div class="" id="">'; foreach( $images as $img ){ echo '<img style="width:150px; height:150px;border-radius:500px; margin-bottom: 60px;" src="'.$img.'">'; echo '<label for="i1" class="pre"><</label> <label for="i2" class="nxt">></label>'; } echo "</div>"; } echo ($s['titre']); echo ($s['presentation']); echo($s['prix']); echo ($s['ville']); } ?>
jordane45
Messages postés
38304
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 novembre 2024
4 705
21 nov. 2021 à 22:21
21 nov. 2021 à 22:21
Mais s' il n'y a pas de if rowcount dans ce cas je ne pourrai pas ajouté un else aucun résultat trouvé.
Ta fonction retourne un array avec les résultats.
Si ton array est vide.. c'est qu'il n'y a pas de résultats...
Donc, tu peux toujours faire un IF et utiliser !empty pour vérifier qu'il n'est pas vide.
$search= rechercheAnnonce(); if(!empty($search)){ // boucle pour afficher tes résultats.. foreach($search as $res){ // echo ... } }else{ // aucun résultat }
max30_3775
Messages postés
178
Date d'inscription
jeudi 4 novembre 2021
Statut
Membre
Dernière intervention
18 mars 2022
22 nov. 2021 à 03:49
22 nov. 2021 à 03:49
Bonjour Jordane,
Mais ici ( if(!empty($search))), on ne GET pas le "q" qui est le name de la barre de rechereche :
Et d'ailleurs si on ajoute dans la fonction rechercheAnnonce, ça nous met Notice: Undefined index: q in C:\wamp64\:
L'objectif c'est lorsqu'on écrit par exemple "maison" sur la barre de recherche, uniquement les annonces contenant dans leur titre, ou leur description" maison" , celles-ci s'affichent
Mais ici ( if(!empty($search))), on ne GET pas le "q" qui est le name de la barre de rechereche :
<h1>Que recherchez-vous?</h1> <input type="search" name="q" placeholder="maison, voiture..." /> <input type="submit" value="Rechercher" />
Et d'ailleurs si on ajoute dans la fonction rechercheAnnonce, ça nous met Notice: Undefined index: q in C:\wamp64\:
function rechercheAnnonce(){ global $bdd; $q= htmlspecialchars($_GET['q']); $res = []; $sql = 'SELECT * FROM annonces INNER JOIN image_products ON annonces.id= image_products.id_product WHERE annonces.titre LIKE "%'.$q.'%" ORDER BY id DESC';
L'objectif c'est lorsqu'on écrit par exemple "maison" sur la barre de recherche, uniquement les annonces contenant dans leur titre, ou leur description" maison" , celles-ci s'affichent
jordane45
Messages postés
38304
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 novembre 2024
4 705
22 nov. 2021 à 08:09
22 nov. 2021 à 08:09
Alors perso, je n'aime pas gérer les variables GET ou POST .. dans les fonctions...
Donc :
PS: la fonction htmlspecialchars sert uniquement pour l'affichage.. en aucun cas pour le "traitement" des variables avant une requête sql.
Donc :
function rechercheAnnonce($q){ global $bdd;
$q = !empty($_GET['q']) ? trim($_GET['q']) : null; if($q){ $search= rechercheAnnonce($q); if(!empty($search)){ // boucle pour afficher tes résultats.. foreach($search as $res){ // echo ... } }else{ // aucun résultat } }
PS: la fonction htmlspecialchars sert uniquement pour l'affichage.. en aucun cas pour le "traitement" des variables avant une requête sql.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
max30_3775
Messages postés
178
Date d'inscription
jeudi 4 novembre 2021
Statut
Membre
Dernière intervention
18 mars 2022
22 nov. 2021 à 09:32
22 nov. 2021 à 09:32
ça fonctionne, mais c'est précis. Je veux dire que lorsqu'on tape par exemple "vélos" comme écrit dans un formulaire ça l'affiche, mais si on écrit "velo" ou "velos", ça n'affiche aucun résultat. Y a-t-il un moyen pour les rendre équivalents ?
Et pour insérer la description dans la variable sql qui se trouve dans la fonction rechercheannonce, il ya également une erreur dans la requete, notamment dans la dernière ligne:
Et pour insérer la description dans la variable sql qui se trouve dans la fonction rechercheannonce, il ya également une erreur dans la requete, notamment dans la dernière ligne:
$sql = 'SELECT * FROM annonces INNER JOIN image_products ON annonces.id= image_products.id_product WHERE annonces.titre AND titre.presentation LIKE "%'.$q.'%" ORDER BY id.annonces DESC';