Systeme de recherche

Résolu
Debonzy Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -  
Debonzy Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 
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   Statut Membre Dernière intervention  
 
Ok bien noté, merci de l'aide.
Cordialement
0