Parse error: syntax error, unexpected '{'

Résolu
Bonjour,

J'ai un souci et je ne vois vraiment pas le problème....

Voilà le message d'erreur renvoyé :
Parse error: syntax error, unexpected T_STRING in ...... on line 86

<?php      
        if($profil['connectes_id'] == $profil['membre_id'])      
        {     
        ?>      
        <span class="actif"><?php echo htmlspecialchars($profil['membre_pseudo'], ENT_QUOTES); ?> est connecté</span>      
        <?php      
        }      
                                              
        else      
        {      
        ?>      
        <span class="inactif"><?php echo htmlspecialchars($profil['membre_pseudo'], ENT_QUOTES); ?> est déconnecté</span></li>      
        <?php      
        }      
?>


Merci d'avance aux intervenants ;)



Tout vient à point à qui sait attendre!

14 réponses

Résumé de la discussion

Problématique : une erreur de syntaxe PHP sur l'affichage d'un profil utilisateur, avec parse error unexpected T_STRING et une accolade ouvrante signalée comme problématique technique. La meilleure réponse suggère de corriger une concaténation inutile dans l'initialisation de $titre, en retirant le '' après htmlspecialchars pour éviter une syntaxe invalide et permettre à la suite du code de s'exécuter. D'autres échanges évoquent des fautes classiques, notamment l'absence de guillemets autour des indices de tableau et l'influence d'erreurs en amont sur l'apparition des messages en aval. En cas de données issues d'une requête SQL, les valeurs retournées peuvent être vides ou contenir des caractères qui déclenchent des erreurs de syntaxe, d'où l'importance de vérifier les valeurs et les guillemets.

Bobot (l’IA à votre service)
  1. Bonjour

    Laquelle est la ligne 86 ? Et si c'est la première, peux-tu montrer les 10 lignes précédentes ?
    0
    1.  <div class="avatar">   
               <?php   
               if($profil['membre_avatar'] == '')   
               {   
                     echo 'Pas d\'avatar';   
               }   
               ?>   
      
               </div>   
      <!--liste//-->   
                <ul>   
                       <li><b>Pseudo :</b> <?php echo htmlspecialchars($profil['membre_pseudo'], ENT_QUOTES); ?></li>   
                       <li><b>Date d'inscription :</b> <?php echo mepd($profil['membre_inscription']); ?></li>   
                       <li><b>Groupe :</b> <?php if($profil[membre_banni] == 1) echo 'bannis'; else echo 'membres'; ?></li>   
                       <li><b>Dernier passage :</b> <?php echo mepd($profil['membre_derniere_visite']); ?></li>   
                       <li><b>Statut :</b>   
               <?php   
              if($profil['connectes_id'] == $profil['membre_id'])   
               {


      Voilà les lignes précédentes, et donc la ligne 86 correspond à la dernière ligne, le "if"

      soit la première sur le code précédent.

      J'ai déjà fait le tour, aucun point virgule manquant, aucunes accolades qui n'a pas sa fermante.....je comprend vraiment pas.

      Tout vient à point à qui sait attendre!
      0
      1. Contributeur
        Je lis $profil[membre_banni] au lieu de $profil['membre_banni']
        0
    2. C'est effectivement anormal, sauf si (peu probable) membre_banni est défini comme une constante.
      Il faudra alors comprendre pourquoi l'erreur n'est qu' à la ligne 86. Mais ce numéro n'est peut-être pas le bon, les indications de Fchaps ne sont pas très fiables puisqu'il met en titre que son erreur est "unexpected '{'" puis dans le texte que l'erreur est "unexpected T_STRING"
      0
      1. Contributeur
        Il arrive souvent qu'une erreur en amont se répercute d'une manière ou d'une autre plus bas (suivant la façon qu'a le navigateur de lire tout ça)

        Mais je ne dis pas que l'erreur est forcément celle-là.
        0
      2. Il arrive souvent qu'une erreur en amont se répercute d'une manière ou d'une autre plus bas
        C'est bien pour ça que je lui ai demandé les lignes précédentes. Mais une erreur qui apparaît en aval d'une autre est quand même toujours explicable. Et ici, je ne la vois pas l'explication.

        (suivant la façon qu'a le navigateur de lire tout ça)
        Ça m'étonne que tu écrives ça. Tu sais bien que la navigateur n'a rien à voir avec l'analyse syntaxique faite par le PHP du serveur. Dans le pire des cas, on se retrouve avec des variables non définies, mais un unexpected T_STRING ou {, je ne vois pas comment

        Mais je ne dis pas que l'erreur est forcément celle-là
        Il y a quand même de très grandes chances que si.
        0
      3. Contributeur
        Quand je parlais de la façon qu'avait le navigateur de lire tout ça, c'est que nous en tant qu'être humain, ce qu'on on écrit paraît logique (par exemple $profil[membre_banni]) alors que le navigateur / compilateur / serveur / machine va être bête et méchant et ne va pas chercher notre logique, juste notre syntaxe.
        0
    3. Oui de toute façon, ca n'a aucun rapport avec ça puisque depuis j'ai repris le code à zéro, il me trouve des erreurs sur chaque ligne if qui contient ==
      En le réecrivant simplement sans rien changé ca passe, mais la il me bloque un peu plus haut.

      Je met tout le début du code :

      <?php

      session_start();
      header('Content-type: text/html; charset=utf-8');
      include('../includes/config.php');

      /********Actualisation de la session...**********/

      include('../includes/fonctions.php');
      connexionbdd();
      actualiser_session();

      /********Gestion avant affichage...***********/
      if($_GET['id'] == '')
      {
      if(isset($_SESSION['membre_id'])) $id = $_SESSION['membre_id'];
      else $id = -1;
      }

      else $id = $_GET['id'];

      $profil = sqlquery("SELECT * FROM membres
      LEFT JOIN connectes
      ON connectes_id = membre_id
      WHERE membre_id=".intval($id), 1);
      if($profil['membre_id'] == '' || $id == -1)
      {
      $informations = Array(
      true,
      'Page membre inconnue',
      'Ce membre n\'existe pas.',
      '',
      '../index.php',
      3
      );
      require_once('../information.php');
      exit();
      }

      /********En-tête et titre de page*********/

      $titre = 'Membre : '.htmlspecialchars($profil['membre_pseudo'], ENT_QUOTES).'';

      include('../includes/haut.php');

      /**********Fin en-tête et titre***********/
      ?>

      <div id="colonne_gauche">
      <?php
      include('../includes/colg.php');
      ?>
      </div>
      <!--contenu//-->
      <div id="contenu">
      <div id="map">
      <a href="../index.php">Accueil</a> => <a href="user.php?id=<?php echo intval($profil['membre_id']); ?>">Profil de <?php echo htmlspecialchars($profil['membre_pseudo'], ENT_QUOTES); ?></a>
      </div>

      <h1>Profil de <?php echo htmlspecialchars($profil['membre_pseudo'], ENT_QUOTES); ?></h1>

      <div class="profil_cellule_float">
      <h2>Informations générales</h2>

      <div class="avatar">
      <?php
      if($profil['membre_avatar'] == '')
      {

      echo 'Pas d\'avatar';
      }
      ?>
      </div>
      <!--liste//-->
      <ul>
      <li><b>Pseudo :</b> <?php echo htmlspecialchars($profil['membre_pseudo'], ENT_QUOTES); ?></li>
      <li><b>Date d'inscription :</b> <?php echo mepd($profil['membre_inscription']); ?></li>
      <li><b>Groupe :</b> <?php if($profil['membre_banni'] == 1) echo 'bannis'; else echo 'membres'; ?></li>
      <li><b>Dernier passage :</b> <?php echo mepd($profil['membre_derniere_visite']); ?></li>
      <li><b>Statut :</b>
      <?php
      if($profil['connectes_id'] == $profil['membre_id'])
      {
      ?>
      <span class="actif"><?php echo htmlspecialchars($profil['membre_pseudo'], ENT_QUOTES); ?> est connecté</span>
      <?php
      }

      else
      {
      ?>
      <span class="inactif"><?php echo htmlspecialchars($profil['membre_pseudo'], ENT_QUOTES); ?> est déconnecté</span></li>
      <?php
      }
      ?>
      </ul>
      </div>

      Donc je sais déjà qu'elle va être la suite des erreurs, ce sont les 3 en gras, la je bloque sur la première, sur l'avatar alors que c'est la même ligne que sur le code précédent qui passait pourtant....

      Il me trouve un T_STRING, et si j'arrive a passer cette erreur (simplement en réecrivant la ligne, il arrive sur une erreur "unexpected '{'" sur l'accolade du dessous.
      Tout vient à point à qui sait attendre!
      0
      1. Contributeur
        Il retourne une erreur pour ce que tu as mis en gras ? Il laisse passer les autres if( == ) ? C'est toujours la même erreur qu'il affiche ?

        Quelle valeur y a-t-il dans $profil['membre_avatar'] ? N'y a-t-il pas des guillemets/parenthèses/autres trucs qui pourraient le gêner lorsqu'il remplace sa valeur ?
        0
      2. oui il me retourne un T_STRING de puis le début du code, la première était sur celle ci :
        /********Gestion avant affichage...***********/
        if($_GET['id'] == '')

        simplement en le réecrivant, il fini par l'accepter et passer sur :
        if($profil['membre_id'] == '' || $id == -1)

        idem que pour la précédente, il passe en la réecrivant mais bloque ensuite sur l'accolade ouvrante en dessous en me mettant un unexpected '{'

        Mais la le fait de recopier simplement la ligne ne fonctionne pas pour :
        if($profil['membre_avatar'] == '')

        alors que dans mon code précédent cela finissait par passer, c'est pour cela que je sais qu'une fois cette ligne reglée, il me trouvera les mêmes erreurs sur les deux autres lignes en gras
        0
    4. Contributeur
      Mails ne manque pas des { et } ?

      <?php if($profil['membre_banni'] == 1) echo 'bannis'; else echo 'membres'; ?>
      0
      1. Non, il n'en manque pas. Les { et } ne servent qu'à regrouper plusieurs instructions et n'ont aucune utilité s'il y en a une seule après le if ou le else, ou dans le for ou le while.
        0
    5. oui d'accord j'avais zappé dans cette ligne, mais ca ne change rien à mon problème qui se trouve plus haut
      0
      1. As-tu essayé de modifier cette ligne :
        /********En-tête et titre de page*********/ 
        $titre = 'Membre : '.htmlspecialchars($profil['membre_pseudo'], ENT_QUOTES).'';

        par celle-ci :
        /********En-tête et titre de page*********/ 
        $titre = 'Membre : '.htmlspecialchars($profil['membre_pseudo'], ENT_QUOTES);
        0
      2. la synthaxe est bonne ici
        0
      3. La chaîne vide à la fin était inutile, mais il n'y a aucune raison pour que sa suppression change quoi que ce soit.
        0
    6. En le réecrivant simplement sans rien changé ca passe
      Mais si, quand tu ré-écris tu changes quelque chose.
      J'ai essayé ton code et je n'ai aucun unexpected T_SRING ou {
      J'ai fortement tendance à penser que ton fichier contient des caractères que tu ne vois pas et qui disparaissent lors de la refrappe. L'as-tu initialement tapé toi-même où l'as-tu récupéré quelque part ?
      As-tu un éditeur hexadécimal pour vérifier son contenu réel ?
      0
      1. Celui ci oui c'est des bouts de copier coller, je me forme au php, j'ai suivi ce tuto sur le site du zéro, donc les portions qui ne pose pas de problème en lecture je les ai copié au lieu de les retaper.

        Editeur héxadécimal? J'édite mon code sur notepad ++ pour la coloration synthaxique c'est tout
        0
        1. Peux-tu mettre ton source sur cjoint.com (ou un autre) pour que je l'examine avec un éditeur hexadécimal ?
          Evidemment, n'oublie pas de cacher les mots de passe s'il y en a
          0
          1. Ouh la la ! Il est tout pourri ton source. de l'UTF8 avec BOM pour commencer, mais aussi tous les caractères espace ne sont pas des espaces ASCII (code hexa 20) sauf là où tu as retapé. Je regarde plus en détail et je te dis.
            0
            1. J'ai regardé aussi avec EditHexa, mais alors moi je vois plein de caractères A avec accent et des fois c'est des points, les deux sont censés etre des espace il me semble, mais bon j'y connais rien la dessus dans l'encodage, utf-8, voilà ca s'arrête là pour moi :/
              0
              1. Tiens je l'ai nettoyé

                http://www.toofiles.com/fr/oip/documents/php/861_user.html
                N'oublie pas de préciser à NotePad++ que tu veux travailler SANS BOM. Le BOM empêche de marcher les sessions et autres headers.

                Les codes C2 A0 que tu voyais correspondaient à des espaces insécables qui ne plaisent sûrement pas à PHP

                Pour travailler sans BOM voir menu Format de Notepad ++
                0
                1. Oh un grand merci ca marche nickel ;)
                  0
                  1. J'en suis heureux pour toi. Et pour moi aussi, je vais enfin pouvoir aller faire un gros dodo.À mon âge ce n'est pas raisonnable de traîner si tard ^^
                    0
                  2. Du coup je vais garder l'editeur hexadecimal au cas ou certains de mes fichiers auraient besoin d'être nettoyé également.

                    Encore merci et bonne nuit ;)
                    0