Langue php et sql. Undefined variable: sql

dproduction 12 Messages postés lundi 2 juillet 2012Date d'inscription 5 décembre 2017 Dernière intervention - 5 déc. 2017 à 17:44 - Dernière réponse : jordane45 19201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 décembre 2017 Dernière intervention
- 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

Afficher la suite 
12Messages postés lundi 2 juillet 2012Date d'inscription 5 décembre 2017 Dernière intervention

16 réponses

Répondre au sujet
jordane45 19201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 décembre 2017 Dernière intervention - 5 déc. 2017 à 18:00
0
Utile
14
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 :
http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Et surtout ceci :
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

.
dproduction 12 Messages postés lundi 2 juillet 2012Date d'inscription 5 décembre 2017 Dernière intervention - 5 déc. 2017 à 21:16
j'ai effectué les conseils jordane45
j' ai activé la gestion des erreurs dans le fichier de connexion à la db

<?php

try

{

$db = new PDO('mysql:host=localhost;dbname=edb_recheche', 'root', '');
// Activation des erreurs PDO
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

}

catch (Exception $e)

{

die('Erreur : ' . $e->getMessage());

}

?>



tout vas bien




j'ai fait un print_r($_POST); avant le IF et je reçois ceci

Notice: Undefined index: query in...

je sais pas quoi faire
jordane45 19201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 décembre 2017 Dernière intervention > dproduction 12 Messages postés lundi 2 juillet 2012Date d'inscription 5 décembre 2017 Dernière intervention - 5 déc. 2017 à 21:34
Que donnes le print
As tu scrupuleusement copié le code que je t'ai donné ?
dproduction 12 Messages postés lundi 2 juillet 2012Date d'inscription 5 décembre 2017 Dernière intervention - 5 déc. 2017 à 21:43
oui j'ai minutieusement copie

voila le code avec print_r($_POST); avant le IF

et le message d'erreur est Notice: Undefined index: query in...



print_r($_POST['query']);
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();
}

$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/>";
}

}


?>
jordane45 19201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 décembre 2017 Dernière intervention > dproduction 12 Messages postés lundi 2 juillet 2012Date d'inscription 5 décembre 2017 Dernière intervention - 5 déc. 2017 à 21:44
print_r($_POST);
dproduction 12 Messages postés lundi 2 juillet 2012Date d'inscription 5 décembre 2017 Dernière intervention - 5 déc. 2017 à 21:55
je recois ceci

Array ( )

quand je met print_r($_POST); avant le IF



pour plus comprehenssion jordane45, voici le code de la base

-- phpMyAdmin SQL Dump

-- version 3.3.9
-- http://www.phpmyadmin.net
-- Serveur: localhost
-- Généré le : Mer 22 Novembre 2017 à 19:28
-- Version du serveur: 5.5.8
-- Version de PHP: 5.3.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
Commenter la réponse de jordane45
jordane45 19201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 décembre 2017 Dernière intervention - Modifié par jordane45 le 5/12/2017 à 22:25
0
Utile
Déjà... Pour poster du code sur le forum.. merci d'utiliser la coloration syntaxique (les balises de code).
Explications disponibles ici : http://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>
Commenter la réponse de jordane45