2010-01-13 5 views
0

Je rencontre un comportement étrange ici. J'utilise le code suivant pour référencer l'API facebook.php erreur de chaîne

$query = "SELECT msg, user_id, comment_time FROM comments WHERE aid = '$aid' ORDER BY comment_time DESC"; 
     $result = mysql_query($query) or die("ERROR: $query.".mysql_error()); 
     if (mysql_num_rows($result) > 0) { 
      while($row = mysql_fetch_object($result)){ 
       $uidval = $row->user_id; 
       $posterInfo = $facebook->api_client->users_getInfo($uidval, array('name', 'pic_square_with_logo', 'profile_url')); 
       $nameuser = $posterInfo[0]['name']; //this is line 50 
       $pic = $posterInfo[0]['pic_square_with_logo']; 
       $profile_url = $posterInfo[0]['profile_url']; 

       echo '<img src="'.$pic.'" />'; 
       echo '<a href="'.$profile_url.'">'.$nameuser.'</a>'; 
       echo '<br>'; 
       echo $row->comment_time; 
       echo '<br>'; 
       echo $row->msg; 

      } 
     } 

il me donne cette erreur:

Fatal error: Cannot use string offset as an array in /home/amitver/public_html/roadies/comments.php on line 50 

mais je suis étonnamment en utilisant le code exact même avec succès en haut de ma page. pourquoi ce comportement étrange. c'est le code en haut de la page:

//connect to fB 
    $uid = $user_id; 
    $userInfo = $facebook->api_client->users_getInfo($user_id, array('name', 'pic_square')); 
    $nameuser = $userInfo[0]['name']; 
    $pic = $userInfo[0]['pic_square']; 
+2

Pourriez-vous indiquer quelle ligne est # 50 dans la source? – pix0r

+0

Vous devez éviter d'utiliser la concaténation de chaîne pour créer des requêtes et générer des résultats HTML. Vous pourriez avoir des vulnérabilités d'injection SQL et/ou des vulnérabilités XSS partout dans votre code. –

Répondre

2

ce qui se passera si $ posterInfo est en fait une chaîne vide (« »).

peut vous var_dump (posterInfo $) dans la boucle et vérifier ce qu'il fait ...

+0

c'était en effet une chaîne vide. – amit

4

Je pense que parfois theusers_getInfo retourne un tableau, tandis que d'autres fois, il retourne une chaîne. Probablement, il ne renvoie qu'une simple chaîne si un seul résultat est disponible.

Essayez ceci:

$nameuser = ($posterInfo[0]) ? $posterInfo[0]['name'] : $posterInfo['name']; 
+0

Vous voulez probablement 'is_array()' pas 'isArray()'. – pix0r

+0

ouais, j'ai réalisé ça. Je devrais probablement le vérifier si le tableau contient la clé 0. – Anthony

+0

c'est une excellente solution – jspcal