Parse error: syntax error, unexpected '$bdd' (T_VARIABLE),

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 '$bdd' (T_VARIABLE), expecting '{' in C:\wamp\www\rs\functions\liste_membre.func.php on line 5

Sachant que je voulais convertir ce script (membre.func.php) en pdo :
<?php
//la function qui va récupérer le pseudo et l'avatar des membres sauf de celui connecté
function recuperer_pseudo_avatar()
{
$results = array();
$query = mysql_query("SELECT pseudo,avatar FROM utilisateurs WHERE pseudo!='{$_SESSION['pseudo']}'");
while($row = mysql_fetch_assoc($query))
{
$results[] = $row;
}
return $results;
}
?> 


J'ai fais :
<?php
//la function qui va récuperer le pseudo et l'avatar du membre sauf de celui connecté
function recuperer_pseudo_avatar()

$bdd = new PDO('mysql:host=localhost;dbname=rs;charset=utf8', 'root', '');
    //donc la, la verification:
$req = $bdd->query('SELECT COUNT(*) FROM utilisateurs WHERE pseudo="'.$pseudo.'" AND avatar="'.$avatar.'"');
$etat = $req->fetchColumn();  

if($etat == 0){
return 0;
}else{
 return 1;

     }
}

?>


Pouvez-vous me corriger svp et voir mon erreur ? Merci d'avance :)

4 réponses

Résumé de la discussion

Une erreur de syntaxe survient lors de la tentative de conversion d'une fonction PHP utilisant MySQL vers PDO pour récupérer le nom d'utilisateur et l'image du membre, en excluant le membre connecté. Les solutions proposées incluent l'utilisation d'une variable globale pour le PDO et l'usage de requêtes préparées afin d'obtenir les noms d'utilisateur et images tout en filtrant le compte courant. Les échanges insistent aussi sur l'importance des balises PHP correctes, du démarrage de session et de l'orthographe des accolades et méthodes fetch pour éviter les erreurs de parse et de retour. En pratique, il est recommandé d'employer une requête préparée qui retourne un tableau, puis d'exécuter et d'afficher les noms d'utilisateur et images via une boucle.

Bobot (l'IA à votre service)
  1. NHenry Messages postés 2513 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    { oubliée.
    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      J'ai maintenant 3 erreurs :

      Notice: Undefined variable: pseudo in C:\wamp\www\rs\functions\liste_membre.func.php on line 7

      Notice: Undefined variable: avatar in C:\wamp\www\rs\functions\liste_membre.func.php on line 7

      Warning: Invalid argument supplied for foreach() in C:\wamp\www\rs\pages\liste_membre.php on line 10
      0
    2. NHenry Messages postés 2513 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      Avant :
      pseudo!='{$_SESSION['pseudo']}'
      Après :
      pseudo="'.$pseudo.'"

      Si tu veux utiliser une variable globale dans une fonction, tu dois la redéclarer comme Globale (oui, c'est pas toujours évident/logique PHP).
      0
    3. Zakarya93 Messages postés 1026 Statut Membre 10
       
      Corrigez mon code svp :

      <?php
      //la function qui va récuperer le pseudo et l'avatar du membre sauf de celui connecté
      function recuperer_pseudo_avatar() {
      	global $bdd; // déclaration globale de BDD
      
      $bdd = new PDO('mysql:host=localhost;dbname=rs;charset=utf8', 'root', '');
          //donc la, la verification:
      $req = $bdd->query('SELECT COUNT(*) FROM utilisateurs WHERE pseudo="'.$pseudo.'" AND avatar="'.$avatar.'"');
      $etat = $req->fetchColumn();  
      
      if($etat == 0){
      return 0;
      }else{
       return 1;
      
           }
      }
      
      ?>
      0
    4. NHenry Messages postés 2513 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      Je t'ai donné des pistes de recherche, a toi de voir, j'ai l'impression qui tu attends une réponse toute faite.

      Si tu rencontre un soucis, décris-le. le problème de variable a déjà été décrit dans mon précédent message.
      0
    5. hharchi9 Messages postés 693 Statut Membre 24
       
      Bonsoir,

      Ces variables, elles sont issues de la session active (si le membre A est connecté, ce sont les infos d membre A qui s'affichent) ?
      0
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 833
     
    Bonsoir, je vais me méler un peu de cette discussion...

    Déjà ... NE REMETS PAS la connexion à ta BDD dans ton code !
    Tu as un fichier de connexion.. tu l'importe via un REQUIRE ça suffira ! (comme on l'a fait dans tes autres codes !!!!)

    Ton souci de variable BDD non déclarée... vient du fait qu'il faut que tu penses à mettre un global $bdd; dans chacune de tes fonctions !

    <?php
    //la function qui va récuperer le pseudo et l'avatar du membre sauf de celui connecté
    function recuperer_pseudo_avatar($pseudo,$avatar="defaut.jpg") {
     global $bdd; // déclaration globale de BDD
    
    $req = $bdd->query('SELECT COUNT(*) FROM utilisateurs WHERE pseudo="'.$pseudo.'" AND avatar="'.$avatar.'"');
    $etat = $req->fetchColumn();  
    
    // ceci ne fonctionnera jamais !
    /*if($etat == 0){
    return 0;
    }else{
     return 1;
    
         }
    */
    
    // commence par faire un PRINT de ta variable $etat pour savoir ce qu'elle contient 
    print_r($etat);
    
    // Ensuite si ton but est de savoir si la requête a retourné quelquechose tu peux faire:
    return count($etat)>0 ? 1 : 0 ;
    
    }
    
    ?>
    
    


    Penses aussi à nous montrer COMMENT tu appelles la fonction dans ton code .... quels arguments tu lui passes (car il en faut... il faut le pseudo.. ET l'avatar .... )*

    Cordialement,
    Jordane
    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      (script liste_membre.php juste au dessus)

      J'ai entré ceci :
      <?php
      //la function qui va récuperer le pseudo et l'avatar du membre sauf de celui connecté
      function recuperer_pseudo_avatar($pseudo,$avatar="defaut.jpg") {
       global $bdd; // déclaration globale de BDD
      
      $req = $bdd->query('SELECT COUNT(*) FROM utilisateurs WHERE pseudo="'.$pseudo.'" AND avatar="'.$avatar.'"');
      $etat = $req->fetchColumn();  
      
      
      // commence par faire un PRINT de ta variable $etat pour savoir ce qu'elle contient 
      print_r($etat);
      
      // Ensuite si ton but est de savoir si la requête a retourné quelquechose tu peux faire:
      return count($etat)>0 ? 1 : 0 ;
      
      }
      
      ?>


      et j'obtiens :
      Warning: Missing argument 1 for recuperer_pseudo_avatar(), called in C:\wamp\www\rs\pages\liste_membre.php on line 8 and defined in C:\wamp\www\rs\functions\liste_membre.func.php on line 3

      Notice: Undefined variable: pseudo in C:\wamp\www\rs\functions\liste_membre.func.php on line 6

      Warning: Invalid argument supplied for foreach() in C:\wamp\www\rs\pages\liste_membre.php on line 10
      0
  3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 833
     
    Tu veux récupérer l'avatar de tous les users sauf de celui qui est connecté ?
    Dans ce cas... ta requête n'est pas bonne !

    Change le code ainsi :
    
    //la function qui va récuperer le pseudo et l'avatar du membre sauf de celui connecté
    function recuperer_pseudo_avatar() {
     global $bdd; // déclaration globale de BDD
    
    $pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo'] : NULL;
    $strWhere = $pseudo ? " WHERE pseudo !='$pseudo'  " : '' ;
    
    $sql = "SELECT pseudo, avatar FROM utilisateurs $strWhere";
    
     $req = $bdd->query($sql);
     return $req->fetchColumn();  
    
    }
    
    


    Et donc là .. dans ta page liste_membre.php
    <?php 
    include('functions/membre.func.php');
    include('body/header.php');
    include('body/menu.php');
    ?>
    <h3>Liste des membres</h3>
    <?php 
    $pseudos_avatars = recuperer_pseudo_avatar();
    
      foreach($pseudos_avatars as $pseudo_avatar) {
        echo "<p><a href=''>".$pseudo_avatar['pseudo']."</a></p>
                  <img src='avatar/".$pseudo_avatar['avatar']."' height='100' width='100' alt='avatar'>";
      }
    


    PS: Tu remarqueras que j'ai tout fait dans le PHP .. pour éviter d'ouvrir/fermer des balises php un peu partout dans le code !
    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      Merci! j'obtiens : Fatal error: Call to undefined function recuperer_pseudo_avatar() in C:\wamp\www\rs\pages\liste_membre.php on line 8
      0
    2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 833
       
      Tu peux remplacer l'inclde par un REQUIRE_ONCE de la ligne :
      include('functions/membre.func.php');
      


      ==>>
      require_once('functions/membre.func.php');
      
      0
    3. Zakarya93 Messages postés 1026 Statut Membre 10
       
      malgré ceci j'ai : Fatal error: Call to undefined function recuperer_pseudo_avatar() in C:\wamp\www\rs\pages\liste_membre.php on line 8
      Call Stack
      0
    4. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 833 > Zakarya93 Messages postés 1026 Statut Membre
       
      tu peux nous poster de nouveau le code de ta page functions/membre.func.php ?
      0
    5. Zakarya93 Messages postés 1026 Statut Membre 10
       
      <?
      //la function qui va récuperer le pseudo et l'avatar du membre sauf de celui connecté
      function recuperer_pseudo_avatar() {
       global $bdd; // déclaration globale de BDD
      
      $pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo'] : NULL;
      $strWhere = $pseudo ? " WHERE pseudo !='$pseudo'  " : '' ;
      
      $sql = "SELECT pseudo, avatar FROM utilisateurs $strWhere";
      
       $req = $bdd->query($sql);
       return $req->fetchColumn();  
      
      }
      0
  4. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 833
     
    Désolé.. pas besoin de mettre de fecth avec query ...
    Mais de toutes façons.. il vaut mieux passer par les requête préparées :

    function recuperer_pseudo_avatar() {
     global $bdd; // déclaration globale de BDD
    
    $pseudo = isset($_SESSION['pseudo'])?$_SESSION['pseudo'] : NULL;
    $strWhere = $pseudo ? " WHERE pseudo !='$pseudo'  " : '' ;
    
    $sql = "SELECT pseudo, avatar FROM utilisateurs $strWhere";
    
     $req = $bdd->prepare($sql);
     $req->execute();  
     $resultat = $req->fetchall();
    return $resultat;
    }
    


    Et pour tester,

    <?php 
    require_once('functions/membre.func.php');
    include('body/header.php');
    include('body/menu.php');
    ?>
    <h3>Liste des membres</h3>
    <?php 
    $pseudos_avatars = recuperer_pseudo_avatar();
    
    // le temps des tests :
    print_r($pseudos_avatars);
    
     foreach($pseudos_avatars as $pseudo_avatar) {
        echo "<p><a href=''>".$pseudo_avatar['pseudo']."</a></p>
                  <img src='avatar/".$pseudo_avatar['avatar']."' height='100' width='100' alt='avatar'>";
      }
    
    

    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      j'obtiens : Array ( [0] => Array ( [pseudo] => jean [0] => jean [avatar] => defaut.jpg [1] => defaut.jpg ) )

      jean

      c'est parfait ! Merci encore, que Dieu vous garde !
      0