Besoin d'aide avec mon code php

Bonjour, je souhaite faire une barre de recherche mais le problème à chaque fois il me met que aucun ne correspond à ma recherche.
<?php

  require_once "functions.php";
  require_once "forme.php";
  
  

  echo '<h2> Recherche </h2>';

  if ( isset($_GET['s'])  && !empty($_GET['s']) ){
      $search = htmlentities($_GET['s']);
      recherche($search);
  }


  function recherche( $search ) {
        $connex = connexion_db();
        $req = 'SELECT * FROM messages WHERE message LIKE "%$search%"';
        $result = mysqli_query($connex,$req);
        $lenght =  mysqli_num_rows($result);

        if ( $result && ($lenght > 0 )) {
          while($row = $result->fetch_assoc()) {
              $id_mes=$row['id'];
              $messagec=$row['message'];
              $id_user=$row['id'];
              echo '<div id="liste"> <a href="forum.php?id_mes='.$id_mes.'">'.$message.'</a> ';
              $req2 = "SELECT * FROM users WHERE id='$id_user'";
              $result2 = mysqli_query($connex,$req2);
              if ($result2){
                $row2 = $result2->fetch_assoc();
                echo $row2['pseudo'];
              }
              echo '</div><hr>';
            }
        } else {
          echo "Il n'y a rien qui correspond à votre recherche";
        }
        mysqli_close($connex);
  }



 ?>

1 réponse

  1. Modérateur
    Bonjour,

    J'ai effectué quelques corrections
    - Ne pas mélanger l'écriture mysqli objet et procédurale,
    - Ne pas utiliser le htmlentities ou le htmpspecialchar autre que pour de l'affichage (jamais pour des requetes )
    - Ajout de gestion d'erreur sur la requête
    - Ecriture du code de façon logique
    - Utiliser un "return" dans une fonction au lieu d'y mettre directement des echo
    - Utilisation de jointure dans la requête au lieu de faire des "sous requêtes" dans des boucles
    - Correction de certaines variables ..

    bref
    //require
    require_once "functions.php";
    require_once "forme.php";
      
    //fonctions  
    function recherche($search) {
      $connex = connexion_db();
      $req = 'SELECT M.*
                    ,U.pseudo  
              FROM messages M
              LEFT JOIN users U ON U.id = M.id_user
              WHERE message LIKE "%'.mysqli_real_escape_string($connex, $search) .'%"';
      $result = mysqli_query($connex,$req);
      if(!$result){
       return " Error description: " . mysqli_error($connex);
      }
      if ( mysqli_num_rows($result)> 0 ) {
        $return = ""; //variable qui contiendra le resultat à retourner
        while($row = mysqli_fetch_row($result)) {
            $id_mes = $row['id'];
            $message = $row['message']; //variable non utilisée ?
            $id_user = $row['id_user']; //j'ai corrigé cette ligne...
            $pseudo = $row['pseudo'];
            $return .=  '<div id="liste"> <a href="forum.php?id_mes='.$id_mes.'">'.$message.'</a> ';
            $return .=  $pseudo;
            $return .=  '</div><hr>';
          }
      } else {
        $return = "Il n'y a rien qui corresponde à votre recherche 
            <br> dans la requete : $req ";
      }
      mysqli_close($connex);
      return $return;
    } 
    
    
    //récupération propre des variables avant de les utiliser
      $search = !empty($_GET['s']) ? $_GET['s'] : NULL;
    
      
    //début de l'affichage :
    echo '<h2> Recherche </h2>';
    if ($search ){
      $resultat = recherche($search);
      echo $resultat;
    }
    


    Et si ça ne fonctionne toujours pas, tu devrais avoir, dans le message de retour la requête qui devrait apparaitre.
    De là... tu la copie/colle directement dans ton phpmyadmin et tu regarde si elle fonctionne ou non....
    Si elle n'y fonctionne pas.. ton souci vient de ta requete

    1. Merci beaucoup pour ton aide et tes corrections. Merci encore :) Il me dise que 'U.pseudo' est inconnue dans ma field liste alors qu'elle existe bel et bien je ne comprend pas trop.
    2. Modérateur
      @chaimatn_95Quelle sont les structure de tes deux tables users et messages ?
    3. Salut! J'ai finalement réussie à résoudre le problème je n'ai plus de message d'erreur mais il me dit qu'aucune recherche ne correspond à ma demande . Merci encore :) Désolé je suis débutante dans le domaine.