Langue php et sql. Undefined variable: sql

Fermé
dproduction Messages postés 39 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 30 mars 2023 - Modifié le 5 déc. 2017 à 17:59
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 5 déc. 2017 à 22:22
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

A voir également:

2 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
5 déc. 2017 à 18:00
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
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
5 déc. 2017 à 18:01
0
dproduction Messages postés 39 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 30 mars 2023
5 déc. 2017 à 18:45
je court tout de suite jordane45 pour une lecture
0
dproduction Messages postés 39 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 30 mars 2023
5 déc. 2017 à 19:22
après une lecture des pages posté par jordane45 , j'arrive toujours pas a trouver de solution vis avis mon code
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > dproduction Messages postés 39 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 30 mars 2023
Modifié le 5 déc. 2017 à 20:44
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
dproduction Messages postés 39 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 30 mars 2023
5 déc. 2017 à 19:45
merci jordane45 pour ce script. je cour tester
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié le 5 déc. 2017 à 22:25
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