Bonjour, Barre de Recherche qui ne retourne pas un resultats. J'ai deux classes differentes que vous pouvez voir.

<!DOCTYPE html>
<html lang="fr">
<head>
</head>
<body>
    <nav>
      <input type="checkbox" id="check">
      <label for="check" class="checkbtn">
        <i class="fas fa-bars"></i>
      </label>
      <label class="logo">BONS PLANS SHOPPING</label>
      <?php echo $this->menu; ?>
       <input type="search" name="q" placeholder="Recherche..." />
       <input type="submit" value="Valider" />
       <form action='./src/control/Recherche.php' method='POST'>
    </nav>

    <section>
        <?php echo $this->feedback; ?>
        <?php echo $this->content; ?>
    </section>
</body>
</html>

<meta charset="utf-8" />
<?php
require_once("Router.php");
require_once("model/AnnoncesStorageSQL.php");

try {
        $bd = new PDO("mysql:host=".MYSQL_HOST.";dbname=".MYSQL_DB.";charset=utf8", MYSQL_USER, MYSQL_PASSWORD);
        $bd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch(PDOException $e) {
        echo "Problème rencontré lors de la connexion à la BD : " . $e->getMessage();
    }
$ANNONCE = $bdd->query('SELECT titre FROM ANNONCE ORDER BY id DESC');

if (isset($_GET["s"]) AND !empty($_GET["s"] )){

   $s = htmlspecialchars($_GET["s"]); //pour sécuriser le formulaire contre les intrusions html
   $ANNONCE = $bdd->query('SELECT titre FROM ANNONCE WHERE titre LIKE "%'.$s.'%" ORDER BY id DESC');
   if($ANNONCE->rowCount() == 0) {
      $ANNONCE = $bdd->query('SELECT titre FROM ANNONCE WHERE CONCAT(titre, description) LIKE "%'.$s.'%" ORDER BY id DESC');
    }
     if($ANNONCE->rowCount() > 0) {
       <ul>
        while($a = $ANNONCE->fetch()) {
          <li><?= $a['titre'] ?></li>
       }
       </ul>
     } else {
    Aucun résultat pour: <?= $q ?>...
 } 

}
?>

Ce que je veux

Avoir les annonces disponibles sur le site.

Ce que j'obtiens

Pas de resultats.

1 réponse


Bonsoir,

  • C'est quoi cette balise meta pour le charset qui se balade ? (elle doit être entre <head> et </head>
  • Pas besoin de faire isset + !empty , seul !empty suffit la 1ère est comprise dans la seconde
  • Pas de htmlspecialchars sur les données entrée en BDD (c'est UNIQUEMENT à l'affichage)
  • La requête n'est pas préparer donc ouverte aux injections SQL et le moindre ' ou " dans la requête et ça plante
  • Pas de rowCount sur une requête de type SELECT -> utilise fetchColumn pour savoir si tu as un résultat
  • Les balises ul c'est du html donc il faut fermer puis ouvrir les balises php
  • $bd est différent de $bdd... -> erreur qui devrait s'afficher si elles sont activées