Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING

Fermé
dproduction Messages postés 39 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 30 mars 2023 - 12 déc. 2017 à 19:36
 Utilisateur anonyme - 12 déc. 2017 à 21:59
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

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
12 déc. 2017 à 19:58
bonsoir, ceci semble incorrect:
 echo '#'.$R->id.' - Titre: '.$R->nom; '<br/>';
peut-être un point au lieu du premier point-virgule?
0
dproduction Messages postés 39 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 30 mars 2023
12 déc. 2017 à 20:10
bonsoir yg_be. merci pour l'attention. j'ai essayé avec
echo '#'.$R->id.' - Titre: '.$R->nom; '<br/>';

ça marche pas
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > dproduction Messages postés 39 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 30 mars 2023
12 déc. 2017 à 20:20
et ainsi?
echo '#'.$R->id.' - Titre: '.$R->nom . '<br/>';
0
dproduction Messages postés 39 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 30 mars 2023
12 déc. 2017 à 20:29
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
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
12 déc. 2017 à 20:35
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
dproduction Messages postés 39 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 30 mars 2023
12 déc. 2017 à 20:40
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
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
dproduction Messages postés 39 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 30 mars 2023
12 déc. 2017 à 21:10
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
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