2012-04-09 6 views
0

Dieser Code ist für mein Follower-System. Ich möchte die Datenbank abfragen, um die Benutzer zu zeigen, die mir folgen. Die Funktion show_users_following_you (meine ID) gibt in Zeile 9 einen Fehler zurück. Kann jemand erklären, woher es kommt?

Dieser Code ist für mein Follower-System. Ich möchte die Datenbank abfragen, um die Benutzer zu zeigen, die mir folgen. Die Funktion show_users_following_you (meine ID) gibt einen Fehler zurück. Kann jemand erklären, woher es kommt?

function show_users_following_you($user_id=0){ 

    if ($user_id > 0){ 

     $follow = array(); 

     $fsql = "select follower_id from following where user_id='". $user_id ."'"; 
     $fresult = mysql_query($fsql); 

     while($f = mysql_fetch_object($fresult)){ 
      array_push($follow, $f->user_id); 
     } 

     if (count($follow)){ 
      $id_string = implode(',', $follow); 
      $extra = " and id in ($id_string)"; 
     }else{ 
      return array(); 
     } 
    } 

    $users = array(); 
    $sql = "select id, username from users where status='active' $extra order by username"; 
    $result = mysql_query($sql); 

    while ($data = mysql_fetch_object($result)){ 

     $users[$data->id] = $data->username; 

    } 

    return $users; 

} 

Kommentare Tabellenstruktur ist

Zwei Säulen:

User_id entspricht, die verfolgt wird und Follower_id entspricht, die folgende tut.

+0

... was ist der Fehler? –

+0

Welche Zeile zeigt den Fehler an? – Lobo

+0

Der Fehler ist in Zeile 9 Nicht definierte Eigenschaft: stdClass :: $ user_id – arboles

Antwort

2
$fsql = "select follower_id from following 
    where user_id='$user_id'"; 
$fresult = mysql_query($fsql); 

while($f = mysql_fetch_object($fresult)){ 
    array_push($follow, $f->user_id); 
} 

Ihr geholt Objekt hat die Eigenschaft follower_id, aber Sie versuchen user_id zu lesen.

(Stellen Sie außerdem sicher, dass dynamische Werte (in diesem Fall zu entkommen, $user_id) mit mysql_real_escape_string oder PDO. Wie es aussieht, ist dies möglicherweise offen für SQL-Injection.)

+0

genial, das funktioniert hat. Vielen Dank! – arboles

+0

Wenn Sie einen dynamischen Wert haben, der voraussichtlich eine ganze Zahl ist, ist es besser, intval() als mysql_real_escape_string zu verwenden. Es ist auch eine gute Idee, keine ganzzahligen Werte in Ihren Abfragen anzugeben. – nnichols

0

Statt

[...] 
while($f = mysql_fetch_object($fresult)){ 
    array_push($follow, $f->user_id); 
} 

Versuchen
[...] 
while($f = mysql_fetch_object($fresult)){ 
    array_push($follow, $f->User_id); 
} 

Grüße!

0

Bitte korrigieren Sie die Abfrage

"wählen follower_id aus folgenden wo user_id = '$ user_id'"

Um

"wählen User_id aus folgenden wo user_id = '". $ user_id. "'"

+0

Was lässt Sie glauben, dass dies eine Verbesserung wäre? – nnichols

Verwandte Themen