Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING

bonsoir mes amis. j'ai eu a poster un problème de programmation php ici, et j'ai eu des réponses . merci. maintenant ce programme génére des erreurs. j'ai ce message. j'ai besoin d'un coup de main. merci d'avance

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\wamp\www\moteur de recherche\recherche.php on line 73

voici le code

<?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>


2 réponses

  1. Bonsoir

    Il y a aussi une erreur sur une des lignes précédentes :
        $strResult = $count>1 " résultats trouvés " : " résultat trouvé ";

    Il manque un ? pour l'opérateur ternaire. J'ajoute des () car je ne suis jamais sûr des priorités :
        $strResult = ($count>1) ?  " résultats trouvés " : " résultat trouvé ";
    1. merci bien le père. on direct ça a fonctionné. j'ai encore une nouvelle erreur
      celle ci Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1065 Query was empty

      voici le code tout en entier

      <?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>
    2. S'il te dit que la requête est vide, c'est que la requête est vide.
      Si la requête est vide, c'est que $filtre ne satisfait aucun des cas de ton switch. $filtre n'est pas égal à ecoles_maternelles ni à ecoles_primaires. Tu n'as qu'à afficher sa valeur pour le vérifier.
      Quand on voit que $filtre vient du champ "filtre" de ton formulaire, on vérifie quelles valeurs il y a dans ton formulaire et là ça saute aux yeux.
  2. Contributeur
    bonsoir, ceci semble incorrect:
     echo '#'.$R->id.' - Titre: '.$R->nom; '<br/>';
    peut-être un point au lieu du premier point-virgule?
    1. bonsoir yg_be. merci pour l'attention. j'ai essayé avec
      echo '#'.$R->id.' - Titre: '.$R->nom; '<br/>';

      ça marche pas
    2. Contributeur
      @dproductionet ainsi?
      echo '#'.$R->id.' - Titre: '.$R->nom . '<br/>';
    3. j'ai remplcé la ligne 74 par
      echo '#'.$R->id.' - Titre: '.$R->nom . '<br/>';

      j'obtient toujours le mémé message d'erreur
      Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
    4. Modérateur
      Sépare la ligne en plusieurs echo au lieu de faire une concaténation, tu verra peut être mieux d'où vient le problème.
    5. bonsoir NHenry. je comprend pas très bien. voici d'ou se situe le problème

       <?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/>';
            }
          } 
        ?>