Parse error: syntax error, unexpected ''

Résolu
Zakarya93 Messages postés 1026 Statut Membre -  
Zakarya93 Messages postés 1026 Statut Membre -
Bonjour,

J'ai cette erreur : Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\wamp\www\rs\pages\profile.php on line 23

Voici mon profile.php :
<?php
//-----------------------------
 //Profile.php 
//-----------------------------

include_once('body/header.php');
include_once('body/menu.php');
?>
<div class='info'>
<?php
if(!function_exists('recuperer_info_membre_choisi')){
 echo "ERREUR : La fonction recuperer_info_membre_choisi n'existe pas ! ";
}
$pseudo = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
$arr_infos = recuperer_info_membre_choisi($pseudo);

if(count($arr_infos)>0 && $pseudo != $_SESSION['pseudo']){

 foreach($arr_infos as $R) {
	if(demande_existe() == 0){
     echo "<div class='error'>
	          Vous n'êtes pas ami(e) avec ".$R['pseudo']."<br />
	         <a href='index.php?page=envoi&pseudo=<?php echo $info_membre_choisi['pseudo']; ?>'>Envoyer une invitation</a>
			</div>";		
	}
     echo"<img src='avatar/". $R['avatar']."' height='200' width='200' alt='avatar'>";
     echo "<p><strong>Email : </strong><em>".$R['email']."</em></p>";
     echo "<p><strong>Sexe : </strong><em>".$R['sexe']."</em></p>";
     echo "<p><strong>A propos de vous : </strong><em>".$R['apropos']."</em></p>";
 }
}else{
	header("Location:index.php?page=membre");	
}
?>
</div>


Que faire ? Merci d'avance :)

19 réponses

Résumé de la discussion

Une erreur de type parse error survient dans profile.php lorsque le code tente d'insérer du PHP dans une chaîne HTML, produisant une syntaxe inattendue et une référence à T_ENCAPSED_AND_WHITESPACE. Pour corriger, il faut sortir les appels PHP des chaînes HTML et utiliser des concaténations ou des variables claires, tout en sécurisant GET/POST avec isset et validation. D'autres réponses soulignent l'importance de récupérer le résultat avec fetch/fetchAll et d'ajouter un return dans la fonction qui vérifie l'existence des demandes d'ami, pour éviter les valeurs nulles. En cas de test, il est recommandé de commenter temporairement la redirection et d'observer le flux avec des échos afin de vérifier les paramètres PASSÉS.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Tu fais à chaque fois la même erreur .....

    Tu es DEJA dans un ECHO ... et toi tu REMETS un echo...
         echo "<div class='error'>
    	          Vous n'êtes pas ami(e) avec ".$R['pseudo']."<br />
    	         <a href='index.php?page=envoi&pseudo=<?php echo $info_membre_choisi['pseudo']; ?>'>Envoyer une invitation</a>
    			</div>";	
    

    Forcément ..ça ne marche pas !

    Ensuite.... d'où sors tu la variable $info_membre_choisi ??? si tu regardes bien le code ... c'est $R qu'il faut utiliser ...!

    bref...Corrige ainsi :
         echo "<div class='error'>
    	          Vous n'êtes pas ami(e) avec ".$R['pseudo']."<br />
    	         <a href='index.php?page=envoi&pseudo=".$R['pseudo']."'>Envoyer une invitation</a>
    			</div>";	
    

    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      Je vois mes erreurs oui...
      plus de messages d'erreur mais quand je clique sur "envoyer une invitation", je suis pas redirigé sur le profil du membre
      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Zakarya93 Messages postés 1026 Statut Membre
         
        Tu es redirigé sur la page envoi .... après... je ne sais pas ce que contient cette page .....

        Quand tu cliques sur le lien... tu as quoi dans la barre d'adresse de ton navigateur qui apparait ?
        0
  2. hharchi9 Messages postés 693 Statut Membre 24
     
    Salut !

    Tu fais un echo d'echo, pourquoi ??? Tout simplement :

    <?php
    //-----------------------------
     //Profile.php 
    //-----------------------------
    
    include_once('body/header.php');
    include_once('body/menu.php');
    ?>
    <div class='info'>
    <?php
    if(!function_exists('recuperer_info_membre_choisi')){
     echo "ERREUR : La fonction recuperer_info_membre_choisi n'existe pas ! ";
    }
    $pseudo = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
    $arr_infos = recuperer_info_membre_choisi($pseudo);
    
    if(count($arr_infos)>0 && $pseudo != $_SESSION['pseudo']){
    
     foreach($arr_infos as $R) {
    	if(demande_existe() == 0){
         echo "<div class='error'>
    	          Vous n'êtes pas ami(e) avec ".$R['pseudo']."<br />
    	         <a href='index.php?page=envoi&pseudo=".$info_membre_choisi['pseudo']."Envoyer une invitation</a>
    			</div>";		
    	}
         echo"<img src='avatar/". $R['avatar']."' height='200' width='200' alt='avatar'>";
         echo "<p><strong>Email : </strong><em>".$R['email']."</em></p>";
         echo "<p><strong>Sexe : </strong><em>".$R['sexe']."</em></p>";
         echo "<p><strong>A propos de vous : </strong><em>".$R['apropos']."</em></p>";
     }
    }else{
    	header("Location:index.php?page=membre");	
    }
    ?>
    </div>
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Le nom de la variable non plus n'est pas bon :-)
      0
    2. hharchi9 Messages postés 693 Statut Membre 24
       
      Ah oui en effet :)
      0
  3. Zakarya93 Messages postés 1026 Statut Membre 10
     
    Rien ne change, j'ai un petit chargement puis rien. J'ai : http://localhost/rs/index.php?page=profile&pseudo=xzak47
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Tu peux nous donner le code source de la page générée ? ( clic droit dans ton navigateur... afficher le code source...)
      0
  4. Zakarya93 Messages postés 1026 Statut Membre 10
     
    <!DOCTYPE html>
    <html>
        <head>
          <link rel='stylesheet' href='css/style.css'>
        </head>
        <meta charset="UTF-8" >
        <body>
              <div id='content'>
              ??<div class='header'>
    Bienvenue jean<p><a href="index.php?page=logout">Se déconnecter</a></p>
    </div>?<div class='menu'>
           <ul>
                <li><a href="index.php?page=membre">Accueil</a></li>
          <li><a href="index.php?page=update">Changer vos informations</a></li>
          <li><a href="index.php?page=liste_membre">les membres</a></li>
          <li><a href="">Vos amis</a></li>
          <li><a href="">Invitations</a></li>
          <li><a href="">Messages</a></li>
          <li class="nbr">2 membres</li>
           </ul>
    </div><div class='info'>
    <div class='error'>
               Vous n'êtes pas ami(e) avec xzak47<br />
              <a href='index.php?page=envoi&pseudo=xzak47'>Envoyer une invitation</a>
       </div><img src='avatar/CR7.jpg' height='200' width='200' alt='avatar'><p><strong>Email : </strong><em>   xxxxx@gmail.com</em></p><p><strong>Sexe : </strong><em>Homme</em></p><p><strong>A propos de vous : </strong><em>En cours de développement</em></p></div>    </div>
        </body>


    (Adresse mail supprimée par la modération)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    On est bien d'accord que ton souci .. c'est le lien
     <a href='index.php?page=envoi&pseudo=xzak47'>Envoyer une invitation</a>


    Tu as quoi dans ta page ENVOI ?
    Je pense que le souci vient de là ....

    0
  7. Zakarya93 Messages postés 1026 Statut Membre 10
     
    Oui ! envoi.php :
    <?php 
    enreg_invitation();
    header("Location:index.php?page=profile&pseudo=".$_GET['pseudo']);
    ?>
    0
  8. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Que t'ai-je dis par rapport à l'utilisation des variables GET / POST / SESSION ... ????

    TOUJOURS .. les traiter avec ISSET ... AVANT de les utiliser !

    
    <?php 
    enreg_invitation();
    $pseudo = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
    if($pseudo){
      header("Location:index.php?page=profile&pseudo=".$pseudo);
      exit();
    }else{
      echo "<br> ERREUR ! Aucun Pseudo passé en paramètre!! ";
    }
    ?>
    
    


    Eventuellement... le temps des tests .. tu peux commenter la redirection et voir si tu arrives bien sur la page... en ajoutant un echo par exemple..

    <?php 
    $pseudo = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
    //---------------------------------------------------------//
    //le temps des tests :
    //---------------------------------------------------------//
    echo "<br> page ENVOI : OK ! ";
    echo "<br> Pseudo = "$pseudo;
    //---------------------------------------------------------//
    enreg_invitation();
    
    if($pseudo){
     // header("Location:index.php?page=profile&pseudo=".$pseudo);
      exit();
    }else{
      echo "<br> ERREUR ! Aucun Pseudo passé en paramètre!! ";
    }
    ?>
    
    


    Cordialement,
    Jordane
    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      Merci pour ces explications détaillés.
      J'obtiens alors : Parse error: syntax error, unexpected '$pseudo' (T_VARIABLE), expecting ',' or ';' in C:\wamp\www\rs\pages\envoi.php on line 7
      0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      désolé ...Un point manquant à la ligne
      echo "<br> Pseudo = ".$pseudo;
      
      0
  9. Zakarya93 Messages postés 1026 Statut Membre 10
     
    c'est affiché : page ENVOI : OK !
    Pseudo = xzak47
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      ok donc ça fonctionne visiblement...

      Le pseudo qui s'affiche .. c'est bien celui sur lequel tu veux être redirigé dans ta page profil ?

      Si oui... tu peux remettre la redirection...
      Sinon.. c'est que tu n'utilises pas la bonne variable dans ton invitation !
      0
  10. Zakarya93 Messages postés 1026 Statut Membre 10
     
    Oui c bien ce pseudo ! mais du coup j'ai décommenter les echo, j'ai mis ceci :

    <?php 
    enreg_invitation();
    $pseudo = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
    if($pseudo){
      header("Location:index.php?page=profile&pseudo=".$pseudo);
      exit();
    }else{
      echo "<br> ERREUR ! Aucun Pseudo passé en paramètre!! ";
    }
    ?>


    mais je ne suis pas redirigé, meme problème :(
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Pourtout... dans ta barre d'adresse ... tu as bien :
      http://localhost/rs/index.php?page=profile&pseudo=xzak47

      ... c'est donc que la redirection a fonctionné.....

      En quoi ... selon toi... la redirection n'a pas marché ?
      A quoi le vois tu ?
      N'est tu pas sur la page profil ?
      N'est-ce pas le profil de xzak47 qui apparait ??


      ....
      0
  11. Zakarya93 Messages postés 1026 Statut Membre 10
     
    Je parle de quand je clique sur "Envoyer l'invitation", rien ne se passe
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Quand tu cliques sur "Envoyer l'invitation" .... rien ne se passe ??
      Pourtant ... tu arrives bien sur la page "envoie" ... (c'est ce qu'on a vérifié en y désactivant la redirection...)
      Donc il se passe bien quelque chose !
      Ensuite.. dans le code de ta page envoie... tu rediriges vers la page profil ... tu as peut être l'impression que rien ne se passe ... mais à mon avis c'est juste que ça va trop vite pour tu ne le vois !....
      0
      1. Zakarya93 Messages postés 1026 Statut Membre 10 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Tenez : https://www.youtube.com/watch?v=8reEGIz9FnI
        et allez à 5:36 vous verrez ^^
        0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Oui et bien quoi ??
      Il se passe bien ce que je dis ......

      Donc.. c'est pas que ta redirection ne marche pas.... c'est autre chose...
      sûrement ta fonction enreg_invitation(); qui ne marche pas correctement !

      Au passage ... je trouve que les tutos que tu suis... ne sont pas terribles du tout...
      - Utilisation des variables POST /GET / SESSION sans ISSET ...
      - Des appels à des fonctions sans paramètres ....
      - Le fait qu'il soit en mysql et non en mysqli ou PDO ....

      Je pense sérieusement que ce n'est pas comme ça que tu vas correctement apprendre à coder !
      Il te manque les BASES du langage PHP .....
      La meilleur preuve .. tu n'es pas capable par toi même, de résoudre le moindre souci ( message d'erreur.....)
      Tu devrais vraiment suivre des tutos plus récents et mieux faits ... comme ceux du site openclassroom.

      Quoi qu'il en soit .. revenons à ton problème actuel :
      Quand tu cliques sur Envoyer une invitation ... est-ce que ça change quelque chose dans ta BDD ?
      0
      1. Zakarya93 Messages postés 1026 Statut Membre 10 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        quand je vais dans ma bdd je vois bien que la demande en ami est prise en compte, mais normalement je devrais juste avoir la page du profil apres le clic non ?
        0
  12. Zakarya93 Messages postés 1026 Statut Membre 10
     
    Quand je vais dans ma bdd je vois bien que la demande en ami est prise en compte, mais normalement je devrais juste avoir la page du profil apres le clic non ?
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Dans ce cas.. le souci est sur ta page profil....
      0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Sûrement ta fonction demande_existe()

      Quel est son code ?
      0
  13. Zakarya93 Messages postés 1026 Statut Membre 10
     
    <?php
    //-----------------------------
    //Profile.func.php 
    //-----------------------------
    // la fonction qui va recuperer les informations de la personne choisie par l'utilisateur
    function recuperer_info_membre_choisi($pseudo = NULL) {
    global $bdd; // déclaration globale de BDD
    
    $result = array();
    
    $sql = "SELECT * FROM utilisateurs WHERE pseudo=:pseudo" ;
    $query = $bdd->prepare($sql);
    $query->execute(array(':pseudo' =>$pseudo));
    $result=$query->fetchall();
    
    return $result;
    }
    
    //la function qui va vérifier si une demande existe entre les deux membres
    function demande_existe() {
    global $bdd; // déclaration globale de BDD
    
        $query = $bdd->prepare("SELECT COUNT(id_invitation) FROM amis
        WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_pseudo)
        OR
        (pseudo_exp = :get_pseudo AND pseudo_dest = :session_pseudo)
        ");
    
        $query ->execute(array('get_pseudo' => $_GET['pseudo'], 'session_pseudo' => $_SESSION['pseudo']));  
    
    }
    0
  14. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    1 - Tu ne suis aucun de mes conseils visiblement !
    • La requête et les params ne sont pas séparés de leur utilisation !
    • Tu utilises une variable GET et une variable SESSION ... SANS les avoir traité avant avec ISSET ...


    2 - ... il te manque un FETCH .. pour voir récupérer le contenu de ta requête

    3 - Il te manque un RETURN à la fin de ta fonction ... sinon.. ben... elle ne RETOURNE RIEN !

    Je te laisse déjà faire ces corrections là .
    Une fois qu'elles seront faites... reposte ton code modifié ....qu'on poursuive si ça ne fonctionne toujours pas !
    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      //la fonction qui va enregistrer l'invitation dans la bdd
      function enreg_invitation() {
       global $bdd;
       $pseudoSession = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
       $pseudoGet = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
      
       if($pseudoSession  && $pseudoGet ){
          $sql = "INSERT INTO amis
                   (pseudo_exp,pseudo_dest,date_invitation,date_confirmation,active)
            VALUES (:sessPseudo,:getPseudo,NOW(),'',0)";
      
      
         $params = array(
           ":sessPseudo" => $pseudoSession,
           ":getPseudo" => $pseudoGet
          );
         $query = $bdd->prepare($sql);
         $req = $query->execute($params);
       }else{
        echo " Erreur : Une des variables n'existe pas...";
       }
      }
      0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      C'est cette fonction là qui ne marche pas : function demande_existe() {
      0
    3. Zakarya93 Messages postés 1026 Statut Membre 10
       
      Vous pouvez me donner le code svp je sais vraiment pas comment m'y prendre
      0
  15. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Tu suis bien un tutoriel ... pour apprendre ... non ?
    On a déjà échangé pas loin de 200 messages (si ce n'est plus) pour te corriger tes autres fonctions..... tu devrais être en mesure de t'inspirer de tes codes précédents pour corriger celle là !

    On va changer un peu de méthode ... au lieu de te donner le code tout fait .... (ce qui n'a aucun intéret pour toi si tu souhaites apprendre....) je vais t'aider à corriger ton code.

    On va y aller par étape.

    Premièrement .. dans le code suivant :
    function demande_existe() {
    global $bdd; // déclaration globale de BDD
    
        $query = $bdd->prepare("SELECT COUNT(id_invitation) FROM amis
        WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_pseudo)
        OR
        (pseudo_exp = :get_pseudo AND pseudo_dest = :session_pseudo)
        ");
    
        $query ->execute(array('get_pseudo' => $_GET['pseudo'], 'session_pseudo' => $_SESSION['pseudo']));  
    
    }
    


    tu sépares la requête et l'array de params de leur utilisation.
    => Tu n'as qu'à faire la même chose que dans le code que tu nous as posté ici : https://forums.commentcamarche.net/forum/affich-32103280-parse-error-syntax-error-unexpected#30
    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      ça me semble abstrait :(
      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Zakarya93 Messages postés 1026 Statut Membre
         
        Bon ok... cette étape là .. je te la fait ...
        regarde bien .. pour être capable de le refaire par toi même :

        function demande_existe() {
        global $bdd; // déclaration globale de BDD
        
        // je mets la requête dans une variable AVANT de l'utiliser
        $sql = "SELECT COUNT(id_invitation) FROM amis
            WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_pseudo)
            OR  (pseudo_exp = :get_pseudo AND pseudo_dest = :session_pseudo)";
        
        // je place les  params dans une variable avant de l'utiliser :
        $params = array('get_pseudo' => $_GET['pseudo'], 'session_pseudo' => $_SESSION['pseudo']) ;
            $query = $bdd->prepare($sql);
        
            $query ->execute($params);  
        
        }
        


        Etape 2 : Récupérer les variable proprement... via des ISSET ....; AVANT de les utiliser !
        Je te laisse essayer .... et là .. pour le coup .. ce n'est pas abstrait ... tu n'as qu'à regarder le code suivant pour t'en inspirer :https://forums.commentcamarche.net/forum/affich-32103280-parse-error-syntax-error-unexpected#30


        .
        0
    2. Zakarya93 Messages postés 1026 Statut Membre 10
       
      $pseudo_exp = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
       $pseudo_exp = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;


      ?
      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Zakarya93 Messages postés 1026 Statut Membre
         
        oui ... mais maintenant il faut les mettre dans ton code .... et donc .. remplacer les variables qui sont dans $params
        0
    3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      par contre ... attention... tu as utilisé deux fois le meme nom de variable ...
      0
  16. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bon.... je n'ai pas le temps d'attendre tes réponses pour ce soir ...
    donc voici le code final à obtenir :
    function demande_existe() {
     global $bdd; // déclaration globale de BDD
    
      //récupération des variables PROPREMENT !
      $pseudoSession = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
      $pseudoGet = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
    
      // je mets la requête dans une variable AVANT de l'utiliser
      // PS :  j'ai ajouté un ALIAS  (COUNT(id_invitation) as NB) afin de pouvoir plus facilement
      // utiliser le résultat de la requête...
      $sql = "SELECT COUNT(id_invitation) as NB
    	        FROM amis
              WHERE (pseudo_exp = :session_pseudo AND pseudo_dest = :get_pseudo)
                OR  (pseudo_exp = :get_pseudo AND pseudo_dest = :session_pseudo)";
    
      // je place les  params dans une variable avant de l'utiliser :
      $params = array('get_pseudo' => $pseudoGet, 'session_pseudo' => $pseudoSession) ;
      
      $query = $bdd->prepare($sql);
      $query ->execute($params);  
      $result = $query->fetchall();
    	
      //on récupère le NB de ta requête...
       $nb = $result[0]['NB'];
      //On fait un RETURN pour envoyer le résultat vers ton code...
      return $nb;
    }
    

    Essaye de le comprendre... histoire d'être capable de t'en inspirer pour tes prochains codes !

    0
  17. Zakarya93 Messages postés 1026 Statut Membre 10
     
    Le bouton "Envoyer une invitation" a disparu avec votre code ! or quand je remets l'ancien, il reapparait :(
    0
  18. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     

    Le bouton "Envoyer une invitation" a disparu avec votre code ! or quand je remets l'ancien, il reapparait :(


    1 - L'ancien code était COMPLETEMENT FAUX !

    2 - ... Est-ce que pour le pseudo pour lequel tu regardes... une invitation a été envoyée ??
    0
  19. Zakarya93 Messages postés 1026 Statut Membre 10
     
    Ah je pense que vous avez raison ! je vais effacer les demandes sur ma bdd et reessayer
    0
  20. Zakarya93 Messages postés 1026 Statut Membre 10
     
    Nickel merci infiniement !
    0