Freundesliste-Problem

  • Themenstarter Themenstarter McNiko
  • Beginndatum Beginndatum
M

McNiko

Hallo, ich habe ein Problem, ich will für eine Community ein FreundeslisteScript basteln, habe die PHPMyAdmin-Datei so aufgebaut:

FreundeslisteID | Automatisch wird die ID eingetragen
UserID | In welche Freundesliste der Freund ist
IDUser | ID des Users in der Freundesliste
User | Name des Users, der in der Freundesliste angezeigt wird
Timestamp | Wann wurde der User eingetragen

...so jetzt will ich aber das wenn der User bereits in der Freundesliste ist man ihn nicht ein 2. mal eintragen darf und habe dieses Script gebaut:

PHP:
<?

# Verbindung
include("verbindung.php");

# SQL Code
$szMySQL = "SELECT * FROM freundesliste ORDER BY FreundeslisteID DESC";
$sqlErgebnis = mysql_query($szMySQL);

# Ausgabe
while($sqlRowMySQL = mysql_fetch_object($sqlErgebnis))
{

if($sqlRowMySQL->UserID == $_SESSION['userid'] and $_GET['UserID'] == $sqlRowMySQL->IDUser)
  {
  echo $sqlRowMySQL->User;
  echo " ist bereits in deiner Liste!<br>";
  }
else
  {
  echo "Jetzt den User in deine Liste eintragen!";
  }

}

?>

...und er gibt dann folgendes aus: Jetzt den User in deine Liste eintragen!Username ist bereits in deiner Liste!
Jetzt den User in deine Liste eintragen!Jetzt den User in deine Liste eintragen!...

somit geht er jeden in der Freundesliste-Tabelle ab, wie kann ich jetzt nur die ID auslesen auf der ich mich befinde? Oder gibt es eine andere möglichkeit?

mfg

Danke
 
DIe Spalte FreundeslisteID ist überflüssig, da eigentlich der Primärschlüssel sich aus UserID IDUser (würd ich vielleicht umbennen in FriendID?). Außerdem ist der "Name" da komplett überflüssig, den solltest du dir aus der Tabelle User holen.

Zu deinem Problem: du solltest mit einer eigenen Abfrage vorher schauen, ob der Benutzer in der Liste der Freunde für diesen User schon existiert:
SQL:
SELECT * FROM freundesliste WHERE userid = 1 AND friend = 2;

mit mysql_num_rows() siehst du dann, wieviele Zeilen zurückgegeben wurden. Hättest du einen Zusammengesetzten Primärschlüssel, würde ein Fehler auftreten und MySQL den Fehler zurückgeben.
 
Habe es jetzt so gemacht:

PHP:
<?

# Verbindung
include("verbindung.php");

# SQL Code
$szMySQL = "SELECT * FROM freundesliste WHERE userid = ".$_SESSION['userid']." AND iduser = ".$_GET['UserID']."";
$sqlErgebnis = mysql_query($szMySQL);

# Ausgabe
while($sqlRowMySQL = mysql_fetch_object($sqlErgebnis))
{

if($sqlRowMySQL->UserID == $_SESSION['userid'] and $_GET['UserID'] == $sqlRowMySQL->IDUser)
  {
  echo $sqlRowMySQL->User;
  echo " ist bereits in deiner Liste!<br>";
  }
else
  {
  echo "Jetzt den User in deine Liste eintragen!";
  }

}

?>

Funktioniert eigentlich, aber wenn der User nicht in der Freundesliste ist, gibt er auch nicht die else aus!?

mfg
 
Wie gesagt, zähle die Zeilen des Ergebnisses. Wenn du 1 Zeile zurückgebommst, existiert der User schon in der Liste. Wenn es 0 Zeilen sind, dann anzeigen lassen "Den User hinzufügen". Im Moment prüfst du das an der falschen Stelle!

PHP:
#Ausgabe
if(mysql_num_rows($sqlErgebnis) > 0)
{
  $sqlRowMySQL = mysql_fetch_object($sqlErgebnis))
  {
    echo $sqlRowMySQL->User;
    echo " ist bereits in deiner Liste!<br>";
  }
}
else
{
  echo "Jetzt den User in deine Liste eintragen!";
}

Das müsste eigentlich klappen!
 
Etwas verändert, funktioniert danke...

mfg
 
Zuletzt bearbeitet von einem Moderator:
Schön dass es läuft :)

Ich würde immer vorher testen mit mysql_num_rows(), ob überhaupt Datensätze zurückgeliefert werden.


Gruß Radhad
 
Zurück