Langue php et sql. Undefined variable: sql

dproduction Messages postés 39 Statut Membre -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
bonjour mes amis. je suis entrain de coder en php en vue de créer un moteur de recherche pour mon site web.

après avoir codé, j ai deux messages d'erreurs

après plusieurs heures de remue méninge, toujours pas de solution. s'il vous plait à l'aide

voici les massages

Notice: Undefined variable: sql in C:\wamp\www\moteur de recherche\recherche.php on line 33

Notice: Undefined variable: query in C:\wamp\www\moteur de recherche\recherche.php on line 48

voici le code

<?php
    

     //intialisation de la variable contenant les resultats
     $resultats = "";
     
      
     //traitement de la requette
     if(isset ($_POST['query']) && !empty($_POST['query']))
       //si l'utilisateur a entre quelque chose, on traite sa requette
     

       // on rend la requette de l'utilisateur
       $query = htmlspecialchars(preg_replace("#[^#a-zA-Z ?0-9]#i", "", $_POST["query"]));

       if(isset($_POST["filtre"]) == "site entier"){


          // a faire plustard
       } else if(isset($_POST["filtre"]) == "ecoles_maternelles"){
              $sql = "SELECT id, pageecomater_nom AS nom FROM  ecoles_maternelles WHERE pageecomater_nom LIKE ? OR pageecomater_contenance LIKE ?";

       } else if(isset($_POST["filtre"]) == "ecoles_primaires"){
              $sql = "SELECT id, pageecoprim_nom AS nom FROM  ecoles_primaires WHERE pageecoprim_nom LIKE ? OR pageecoprim_contenance LIKE ?";


     }


     //connexion a la base de donnée
     include"includes/connect_db.php";

     $req = $db->prepare($sql);
     $req ->execute(array("%".isset ($_POST['query'])."%", "%".isset ($_POST['query'])."%"));

     $count = $req->rowcount();

     if($count >= 1) {

       
            echo " $count résultat(s) trouvé pour <strong>$query</strong><hr/>";

            while ($data = $req->fecth(PDO::FECTH_OBJ)){
                   echo '#'.$data->id.' - Titre: '.$data->nom; '<br/>';
            }

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

     }
 ?>

<!DOCTYPE html>
<html>
     <head>
          <title> mini moteur de recherche</title>
     </head>
     <body>
<p>
     <form action ="<?php echo $_SERVER['PHP_SELF']; ?>" method='POST'>
             <label for="query">entrer votre recherche: </label>
             <input type= "search" mane="query" maxlength="80" size="80" id="query " /><br>
            recherche au niveau de:
             <select mane="filtre">
                 <option value="site entier">site entier</option>
                 <option value="ecole_maternelle">ecole_maternelle</option>
                 <option value="ecole_primaire">ecole_primaire</option>

              </select><br>
             <input type="submit" value="Recherche">
     </form>


      <?php echo $resultats; ?>
     </body>
</html>



"<?php echo $_SERVER['PHP_SELF']; ?>"

EDIT : Ajout des balises de code

2 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    Tes variables $sql et $query sont initialisées dans des IF ....
    Donc au début... elles n'existent pas... d'où les avertissements..

    Par contre, applique ceci à ton code :
    https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

    Et surtout ceci :
    https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

    .
    0
    1. dproduction Messages postés 39 Statut Membre
       
      je court tout de suite jordane45 pour une lecture
      0
    2. dproduction Messages postés 39 Statut Membre
       
      après une lecture des pages posté par jordane45 , j'arrive toujours pas a trouver de solution vis avis mon code
      0
    3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > dproduction Messages postés 39 Statut Membre
       
      La solution passe par une réécriture propre du code....
      Telle que la récupération des variables AVANT de les utiliser (y compris dans les if )

      <?php
      //Affichage des erreurs php
      error_reporting(E_ALL);
      ini_set('display_errors', TRUE);
      ini_set('display_startup_errors', TRUE);
      
      //connexion a la base de donnée
      require_once "includes/connect_db.php";
      
      //intialisation de la variable contenant les resultats
      $resultats = "";
      $query = !empty($_POST['query']) ? preg_replace("#[^#a-zA-Z ?0-9]#i", "", $_POST["query"]) : NULL;
      $filtre = !empty($_POST["filtre"]) ? $_POST["filtre"] : NULL;
      
      //traitement de la requette
      if($query){
       
       switch($filtre){
           case "site entier" :
              // a faire plustard
            $sql = "";
            break;
          case "ecoles_maternelles" :
            $sql = "SELECT id, pageecomater_nom AS nom FROM  ecoles_maternelles WHERE pageecomater_nom LIKE ? OR pageecomater_contenance LIKE ?";
            break;
          case "ecoles_primaires" :
            $sql = "SELECT id, pageecoprim_nom AS nom FROM  ecoles_primaires WHERE pageecoprim_nom LIKE ? OR pageecoprim_contenance LIKE ?";
            break;
          default:
            $sql ="";
          break; //edit correction du ; manquant
       } 
      
        $datas = array("%".$query."%", "%".$query."%");
        try{
          $req = $db->prepare($sql);
          $req ->execute($datas);
          $result = $req->fetchAll(FECTH_OBJ);
        }catch(Exception $e){
        // en cas d'erreur :
         echo " Erreur ! ".$e->getMessage();
        }
        
        $count = !empty($result) ? count($result) : NULL;
      
        if($count >= 1) {
          echo " $count résultat(s) trouvé pour <strong>".htmlspecialchars($query)."</strong><hr/>";
          foreach($result as $R){
            echo '#'.$R->id.' - Titre: '.$R->nom; '<br/>';
          }
        } else {
          echo "<hr/>0  résultat trouvé pour <strong>".htmlspecialchars($query)."</strong><hr/>";
        }
      
      }
      
      
      ?>
      
      
      0
    4. dproduction Messages postés 39 Statut Membre
       
      merci jordane45 pour ce script. je cour tester
      0
  2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Déjà... Pour poster du code sur le forum.. merci d'utiliser la coloration syntaxique (les balises de code).
    Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

    Ensuite, concernant ton formulaire,tu as écris mane .. au lieu de NAME

    Bref, corrige comme ça
    <?php
    <?php
    //Affichage des erreurs php
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    
    //connexion a la base de donnée
    require_once "includes/connect_db.php";
    
    //intialisation de la variable contenant les resultats
    $resultats = "";
    $query = !empty($_POST['query']) ? preg_replace("#[^#a-zA-Z ?0-9]#i", "", $_POST["query"]) : NULL;
    $filtre = !empty($_POST["filtre"]) ? $_POST["filtre"] : NULL;
    
    //traitement de la requette
    if($query){
      switch($filtre){
         case "site entier" :
            // a faire plustard
          $sql = "";
          break;
        case "ecoles_maternelles" :
          $sql = "SELECT id, pageecomater_nom AS nom FROM  ecoles_maternelles WHERE pageecomater_nom LIKE ? OR pageecomater_contenance LIKE ?";
          break;
        case "ecoles_primaires" :
          $sql = "SELECT id, pageecoprim_nom AS nom FROM  ecoles_primaires WHERE pageecoprim_nom LIKE ? OR pageecoprim_contenance LIKE ?";
          break;
        default:
          $sql ="";
        break;
      } 
    
      $datas = array("%".$query."%", "%".$query."%");
      try{
        $req = $db->prepare($sql);
        $req ->execute($datas);
        $result = $req->fetchAll(FECTH_OBJ);
      }catch(Exception $e){
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
      } 
    }
    
    
    ?>
    <!DOCTYPE html>
    <html>
     <head>
      <title> mini moteur de recherche</title>
      <charset="utf8">
     </head>
     <body>
       <div id="zonefiltres">
        <p>
         <form action ="" method='POST'>
           <label for="query">entrer votre recherche: </label>
           <input type= "text" name="query" maxlength="80" size="80" id="query"  value="<?php echo $query; ?>"/><br>
           <label for="filtre">recherche au niveau de:</label>
           <select name="filtre" id="filtre">
             <option value="site entier" <?php echo  $filtre == "site entier" ? " selected='selected' ": ""; ?> >site entier</option>
             <option value="ecole_maternelle" <?php echo  $filtre == "ecole_maternelle" ? " selected='selected' ": ""; ?> >ecole_maternelle</option>
             <option value="ecole_primaire" <?php echo  $filtre == "ecole_primaire" ? " selected='selected' ": ""; ?>>ecole_primaire</option>
           </select>
           <br>
           <input type="submit" value="Recherche">
         </form>
        </p>
       </div>
      
       <div id="resultats">
      <?php
        $count = !empty($result) ? count($result) : 0;
        $strResult = $count>1 " résultats trouvés " : " résultat trouvé ";
        echo  $count ."".$strResult ."pour <strong>".htmlspecialchars($query)."</strong><hr/>";
        if(!empty($count) {
          foreach($result as $R){
            echo '#'.$R->id.' - Titre: '.$R->nom; '<br/>';
          }
        } 
      ?>
      </div>
     </body>
    </html>
    
    0