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. Contributeur
    bonsoir, ceci semble incorrect:
     echo '#'.$R->id.' - Titre: '.$R->nom; '<br/>';
    peut-être un point au lieu du premier point-virgule?
    0
    1. bonsoir yg_be. merci pour l'attention. j'ai essayé avec
      echo '#'.$R->id.' - Titre: '.$R->nom; '<br/>';

      ça marche pas
      0
    2. Contributeur
      @dproductionet ainsi?
      echo '#'.$R->id.' - Titre: '.$R->nom . '<br/>';
      0
    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
      0
    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.
      0
    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/>';
            }
          } 
        ?>
      0
  2. 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é ";
    0
    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>
      0
    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.
      0