Systeme de recherche

Résolu/Fermé
Debonzy Messages postés 34 Date d'inscription lundi 14 janvier 2013 Statut Membre Dernière intervention 25 avril 2018 - Modifié le 25 avril 2018 à 15:06
Debonzy Messages postés 34 Date d'inscription lundi 14 janvier 2013 Statut Membre Dernière intervention 25 avril 2018 - 25 avril 2018 à 15:39
Salut chers tous,
Cela fait plusieurs jours que je tente de créer un système de recherche sur mon site web mais en vain. Après avoir regardé plusieurs tuto et après plusieurs essais; je viens solliciter votre aide.
En effet le dernier essai me semble mieux mais ce message d'erreur s'affiche
.
Voici le code php:
<?php
$resultats = "";
//Traitement de la requete recherche

if (isset($_POST['query']) && !empty($_POST['query'])){
 // si utilisateur a entre quelque chose, on traite sa requete
 $query = preg_replace("#[^a-zA-Z ?0-9]#i", "", $_POST['query']);

  if($_POST['filtre'] == "nomAuteur"){
   $sql = "SELECT * FROM bibliotheque_num WHERE nom_auteur LIKE ?";
  }else if ($_POST['filtre'] == "typeOeuvre"){
   $sql = "SELECT * FROM bibliotheque_num WHERE type_oeuvre LIKE ?";
  }else if ($_POST['filtre'] == "nomOeuvre"){
   $sql = "SELECT * FROM bibliotheque_num WHERE nom_oeuvre LIKE ?";
  }

  //connexion à la base de données
  include ("inclu/connexionMysql.inc.php");

  $req = $db->prepare($sql);
  $req->execute(array('%'.$query.'%'));

  $count = $req->rowCount();

   if($count >=1){
   echo $count." résultat(s) trouvé(s) pour <strong>$query</strong><hr/>";
   while($data = $req->fetch(PDO::FETCH_OBJ)){
    echo '#'.$data->ref.' - Nom : '.$data->nom_oeuvre.' - Auteur: '.$data->nom_auteur.' - Type: '.$data->type_oeuvre.'<br/>';

   } else {
    echo "0 résultat trouvé pour <strong>$query</strong><hr/>";
   }

?>

Merci de m'aider.

EDIT : Ajout de la coloration syntaxique !

Cordialement

1 réponse

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié le 25 avril 2018 à 15:41
Bonjour,

Tu as oublié l'accolade fermante de ton while.

Mais tiens, essaye ça :


<?php

//connexion à la base de données
require_once ("inclu/connexionMysql.inc.php");


//Traitement de la requete recherche

//-------------------------------------------------------------//
//récupération PROPRE des variables AVANT de les utiliser
//-------------------------------------------------------------//
$query = !empty($_POST['query']) ? $_POST['query'] : NULL;
$filtre = !empty($_POST['filtre']) ? $_POST['filtre'] : NULL;

if ($query){
  // si utilisateur a entre quelque chose, on traite sa requete
  $query = preg_replace("#[^a-zA-Z ?0-9]#i", "", $query);

  
    switch($filtre){
  case "nomAuteur":
   $strWhere = "WHERE  nom_auteur LIKE ?";
  break;
  case "typeOeuvre":
   $strWhere = "WHERE  type_oeuvre LIKE ?";
  break;
  case "nomOeuvre":
   $strWhere = "WHERE  nom_oeuvre LIKE ?";
  break;
  default:
   $strWhere = "";
  break;
    }
 
 $sql = $sql = "SELECT * FROM bibliotheque_num " . $strWhere;
 $datas = array('%'.$query.'%');
 
 try{
  $req = $db->prepare($sql);
  $req->execute($datas);
  // on stocke le resultat dans un array
  $resultat = $req->fetchAll(PDO::FETCH_OBJ); 
 }catch(Exception $e){
  echo 'Erreur ! ' .$e->getMessage();
 }

  //$count = $req->rowCount(); NE PAS UTILISER POUR UNE REQUETE SELECT COMME INDIQUE DANS LA DOCUMENTATION OFFICIELLE DE PHP PDO !!
  // A la place, on peut faire : $count = !empty($resultat) ? count($resultat) : 0;
 
   if(!empty($resultat)){
  echo count($resultat)." résultat(s) trouvé(s) pour <strong>".$query."</strong><hr/>";
  foreach($resultat as $data){
   echo '#'.$data->ref.' - Nom : '.$data->nom_oeuvre.' - Auteur: '.$data->nom_auteur.' - Type: '.$data->type_oeuvre.'<br/>';
  }
   } else {
  echo "0 résultat trouvé pour <strong>$query</strong><hr/>";
   }
}

?>

Au passage, je t'invite à lire (et à appliquer) ceci :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
et ça : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code


0
Debonzy Messages postés 34 Date d'inscription lundi 14 janvier 2013 Statut Membre Dernière intervention 25 avril 2018
25 avril 2018 à 15:39
Ok bien noté, merci de l'aide.
Cordialement
0