BARRE DE RECHERCHE

Krys

Krys Le 6 septembre 2016 à 15:38 (Édité le 25 janvier 2019 à 17:52)

Bonsoir tout le monde,

la barre de recherche fonctionne très bien de mon coté, mais le seul petit souci quand on arrive sur la page, il liste tout ce qui se trouve dans la BDD avant même d'avoir fait une recherche.

je voudrais savoir comment empêché cela, afin que l'on obtient un résultat uniquement après avoir fait une recherche.

je place le code

   <?php

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

$articles = $bdd->query('SELECT * FROM table ORDER BY id DESC');
if(isset($_GET['q']) AND !empty($_GET['q'])) {
   $q = htmlspecialchars($_GET['q']);
   $articles = $bdd->query('SELECT * FROM table WHERE titre LIKE "%'.$q.'%" ORDER BY id DESC');
   if($articles->rowCount() == 0) {
      $articles = $bdd->query('SELECT * FROM table WHERE CONCAT(titre) LIKE "%'.$q.'%" ORDER BY id DESC');
   }
}
?>
<form method="GET">
   <input type="search" name="q" placeholder="Recherche..." />
   <input type="submit" value="Valider" />
</form>
<?php if($articles->rowCount() > 0) { ?>
   <ul>
   <?php while($a = $articles->fetch()) { ?>
      <li> <?= $a['titre'] ?> - <?= $a['id'] ?> </li>
   <?php } ?>
   </ul>
<?php } else { ?>
Aucun résultat pour: <?= $q ?>...
<?php } ?>
   


merci d'avance


TheOldNoob

TheOldNoob Le 6 septembre 2016 à 16:11

Salut l'ami,
Alors, tu va pouvoir utilisé les booleen !

En gros :
Entre ta connexion a la bdd et le début de ton code, tu va instancier une variable comme ça :
$showResult = false; 


Ensuite, après ta requete ligne 10, donc si il compte plus que 0, tu lui fait :
$showResult = true;


Puis, ton toute tes dernière ligne pgp
if(showResult) {
 ton php
}
Krys

Krys Le 6 septembre 2016 à 16:51 (Édité le 6 septembre 2016 à 16:59)

merci mais je pense qu'il y a un truc que je n'ai pas compris car j'ai un message  d'erreur

Parse error: syntax error, unexpected '}' in C:\wamp\www\teste\index.php on line 36

   <?php

$bdd = new PDO('mysql:host=127.0.0.1;dbname=pole-chretien;charset=utf8','root','');
$showResult = false;

$articles = $bdd->query('SELECT * FROM table ORDER BY id DESC');
if(isset($_GET['q']) AND !empty($_GET['q'])) {
   $q = htmlspecialchars($_GET['q']);
   $articles = $bdd->query('SELECT * FROM table WHERE titre LIKE "%'.$q.'%" ORDER BY id DESC');
   if($articles->rowCount() == 0) {
      $articles = $bdd->query('SELECT * FROM table WHERE CONCAT(titre) LIKE "%'.$q.'%" ORDER BY id DESC');
     $showResult = true;
   }
}
?>
<form method="GET">
   <input type="search" name="q" placeholder="Recherche..." />
   <input type="submit" value="Valider" />
</form>
<?php if(showResult) ?>
   <ul>
   <?php while($a = $articles->fetch()) { ?>
      <li> <?= $a['titre'] ?> - <?= $a['id'] ?> </li>
   <?php } ?>
   </ul>
<?php } else { ?>
Aucun résultat pour: <?= $q ?>...
<?php } ?>
Balatharas

Balatharas Le 6 septembre 2016 à 17:30

Si tu lisais l'erreur tu verrais qu'il y a juste un problème d'ouverture/fermeture d'accolades....
La dernière accolade avant le ?> est en trop
TheOldNoob

TheOldNoob Le 6 septembre 2016 à 17:38

Salut Beignet, 😀

C'est presque ça, il manque une acolade ici :
<?php if(showResult) { ?>
Du coup, l'acolade a la fin n'est pas en trop
Krys

Krys Le 6 septembre 2016 à 18:50

Merci Beignet, je n'ai plus de message d'erreur mais malgré tout dès que  j'arrive sur la page, tout le contenu de la BDD  est listé est sur la page
TheOldNoob

TheOldNoob Le 6 septembre 2016 à 18:57

Si tu retir l'accolade, tu n'a plus l'erreur, mais tu n'a plus de if...
Krys

Krys Le 6 septembre 2016 à 19:06

l'accolade est toujours avec le if, mais ça fonctionne comme si  je n'avais rien fait
Krys

Krys Le 6 septembre 2016 à 19:50

j'ai trouvé, merci
TheOldNoob

TheOldNoob Le 6 septembre 2016 à 20:10 (Édité le 6 septembre 2016 à 20:26)

Si tu veux pas avoir se genre de problème, il faut faire 2 choses :

- Bien indenté ton code
- marquer tes accolades

<?php
    $bdd = new PDO('mysql:host=127.0.0.1;dbname=pole-chretien;charset=utf8','root','');
   
    $showResult = false;

    $articles = $bdd->query('SELECT * FROM table ORDER BY id DESC');
     if(isset($_GET['q']) AND !empty($_GET['q'])) { 
       $q = htmlspecialchars($_GET['q']);
       $articles = $bdd->query('SELECT * FROM table WHERE titre LIKE "%'.$q.'%" ORDER BY id DESC');
       if($articles->rowCount() == 0) {
          $articles = $bdd->query('SELECT * FROM table WHERE CONCAT(titre) LIKE "%'.$q.'%" ORDER BY id DESC');
          $showResult = true;
        } // fin du if($articles->rowCount() == 0)
      } //  fin du if(isset($_GET['q']) AND !empty($_GET['q'])) {
?>
<form method="GET">
  <input type="search" name="q" placeholder="Recherche..." />
  <input type="submit" value="Valider" />
</form>
<?php 
  if($showResult) { ?>
    <ul>
      <?php 
      while($a = $articles->fetch()) { ?>
        <li> <?= $a['titre'] ?> - <?= $a['id'] ?> </li>
      <?php 
      } // fin du while 
      ?>
    </ul>
  ?>
        else {
         echo 'Aucun résultat pour:'.$q.'...';
      } // fin du else
   } // fin du if
 ?>
tutosfaciles48

tutosfaciles48 Le 24 septembre 2016 à 14:32 (Édité le 24 septembre 2016 à 14:32)

Bonjour, tu liste tous les articles ligne 5 donc si tu arrive sur la page de recherche, elle affiche déjas les articles (tous ici)
Krys

Krys Le 25 septembre 2016 à 00:45

Merci pour l'aide de tout le monde, j'avais oublié de mettre: "résolu"
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte