MYSQL + PHP Frage
Hi! Hab eine Frage .....bzw ein Problem.
Und Zwar hab ich eine Online Liste geschrieben , die wenn sich ein User einloggt in die Tabelle "Onlineliste" Username , Uhrzeit und Timestamp speichert. Nun hab ich noch eine Tabelle mit dem namen user_data (ID , Nickname , punkte) nun würde ich gerne in der Onlineliste jedem user der eine gewisse Punktzahl erreicht hat ein Bild anhängen. Könnt ihr mir helfen , wie ich das am besten umsetze?.
Antwort schreiben
Antwort 1 von Woo vom 15.08.2019, 09:59 Options
Moin,
das kannst du ja in PHP abfragen, indem du dir die Punktezahl aus der Datenbank holst.
Mal angenommen, diese Zahl ist dann in $punkte gespeichert.
Durch eine einfach IF Abfrage kannst du dann das Bild ausgeben.
if ($punkte > 100) echo "<img src='bild100punkte.jpg'>";
Kannst dann für die anderen Werte weiter mit else if abfragen oder direkt eine switch Anweisung nutzen.
Antwort 2 von JackyChansen vom 15.08.2019, 18:10 Options
Das Problem wäre dann , das jedem das gleiche Bild reingehangen wird.
Antwort 3 von Woo vom 15.08.2019, 18:44 Options
Deswegen sollst du ja eine Mehrfachverzeichgung machen.
if ($punkte >=100 && $punkte <200) -> BILD1
else if($punkte >= 200 && $punkte <300 > bild2
... //und so weiter
else ->kein bild
so oder so ähnlich
Antwort 4 von JackyChansen vom 15.08.2019, 18:51 Options
$s1="SELECT punkte, nickname FROM user_data ORDER by nickname";
$q1=mysql_query($s1) or die("$s1<BR><BR>".mysql_error());
$s="SELECT * FROM onlineliste ORDER by nickname";
$q=mysql_query($s) or die("$s<BR><BR>".mysql_error());
Cartman sagt:
while($r1 = mysql_fetch_array($q))
{
while($r = mysql_fetch_array($q1))
{
if($r['nickname']==$r1['nickname'])
{
$s2="UPDATE onlineliste SET punkte='".$r['punkte']."' WHERE nickname='".$r['nickname']."'";
$q2=mysql_query($s2) or die("$s2<BR><BR>".mysql_error());
}
}
echo"<a href=\"community.php?nav=profil&uID=".$r1['nickname']."\" >
Cartman sagt:
echo"<a href=\"community.php?nav=profil&uID=".$r1['nickname']."\" > ".$r1['nickname']."</a> - ".$r1['punkte']."<br>";
}
Habs jetzt so geregelt , das problem ist jetzt nur das nur dem User der Alpabetisch ganz oben in der Liste angeordnet ist , dem die punkte angezeigt werdem......Da ist wohl irgendwo ein fehler nur weiss ich zum Teufel nicht wo ???
Antwort 5 von Woo vom 15.08.2019, 20:09 Options
Jau, Ist ja klar, du durchläufst mit der inneren Schleife alle Datensätze und nach dem ersten kompletten Durchlauf stehen diese für den 2 User (2 mal $rl Durchlauf) nicht mehr zur Verfügung.
Mach lieber so, dass du in der schleife immer dir die Werte aus user_data für den aktuellen User holst.
Außerdem hast du die Ausgabe außerhalb der Schleife, also kriegst du nur für die letzten Werte eine Ausgabe.
Antwort 6 von JackyChansen vom 15.08.2019, 21:49 Options
Kannst du mir ein Beispiel posten?
Antwort 7 von Woo vom 15.08.2019, 22:03 Options
Müsste so ungefähr aussehen:
while($r1 = mysql_fetch_array($q))
{
$s1 = mysql_query("SELECT punkte, nickname from user_data where nickname = '". $r1['nickname'] ."'");
$q1 = mysql_fetch_array($s1);
$s2="UPDATE onlineliste SET punkte='".$r['punkte']."' WHERE nickname='".$r['nickname']."'";
$q2=mysql_query($s2);
echo"<a href=\"community.php?nav=profil&uID=".$r1['nickname']."\"
echo"<a href=\"community.php?nav=profil&uID=".$r1['nickname']."\" > ".$r1['nickname']."</a> - ".$r1['punkte']."<br>";
} // Hier endet die While schleife
P.S. Was hat das mit "cartman sagt:" auf sich??! das ist in keinem echo Befehl?!
Antwort 8 von JackyChansen vom 15.08.2019, 22:07 Options
"cartman sagt:" , nein das hatte ich versentlich mitkopiert da steht in keinem zusammenhang +gg+
Antwort 9 von JackyChansen vom 15.08.2019, 22:32 Options
wie bring ich den vergleich noch unter?
if($r['nickname']==$r1['nickname'])
Antwort 10 von JackyChansen vom 15.08.2019, 22:33 Options
bzw.
if($r['nickname']==$r1['nickname'])
{
$s2="UPDATE onlineliste SET punkte='".$r['punkte']."' WHERE nickname='".$r['nickname']."'";
Antwort 11 von Woo vom 15.08.2019, 22:46 Options
Den brauchst du da nicht mehr, weil du ja mit der $s1 query schon nach dem benutzernamen suchst, der wird dann ja eindeutig sein
Ansonsten genau wie du schon geschrieben hast, direkt nach $q1 die if Abfrage, und endet nach den beiden Links
Antwort 12 von JackyChansen vom 15.08.2019, 22:50 Options
ja aber im prinzip holt er ja die punte von der der Tabelle "user_data" und updatet sie in die tabelle "useronline".
Antwort 13 von Woo vom 15.08.2019, 22:57 Options
In der Onlineliste ist doch nur username, und die zeit?!
die punkte sind doch in der User_data???
dann müsste der code so aussehen:
$s2="UPDATE {b]onlineliste[/b] SET punkte='".$r['punkte']."' WHERE nickname='".$r['nickname']."'";
Antwort 14 von JackyChansen vom 15.08.2019, 23:02 Options
Also folgenes :
ich hab in der Tabelle UserOnline die felder : nickname , punkte , timestamp , uhrzeit.
und in der Tabelle user_data nickname , punkte , etc.
Wenn man sich Registriert werden die ganzen daten in tabelle user_data geschrieben , loggt man sich ein wird ein datensatz erstellt , und somit ist der user als Online in der Liste zu sehen , loggt der user sich aus wird der datensatz gelöscht.
Deswegen muss ich ja die punkte von user_data in onlineliste rüberholen. Weisst du wie ich das meine?
Antwort 15 von Woo vom 15.08.2019, 23:10 Options
Problem habe ich jetzt schon ein wenig besser verstanden.
Aber 1. timestamp , uhrzeit. in useronline: ist das das gleiche? wozu 2 mal die zeit speichern?
Und was die Punkte angeht, wozu doppelt halten??
so, wie ich das jetz verstanden hab, müsste das so sein:
// Alle User, die Onlien sind, durchgehen
while($r1 = mysql_fetch_array($q))
{
//für den aktuellen User die punktezahl holen
$s1 = mysql_query("SELECT punkte from user_data where nickname = '". $r1['nickname'] ."'");
$q1 = mysql_fetch_array($s1);
//Dann die Punkte zahl aktualisiern
$s2="UPDATE user_date SET punkte='".$r['punkte']."' WHERE nickname='".$r['nickname']."'";
$q2=mysql_query($s2);
echo"<a href=\"community.php?nav=profil&uID=".$r1['nickname']."\"
echo"<a href=\"community.php?nav=profil&uID=".$r1['nickname']."\" > ".$r1['nickname']."</a> - ".$r1['punkte']."<br>";
}
Hab das mit den Punkten nicht genau verstanden, warum sie in beiden Tabellen sind, und was da genau gemacht wird, wie und wann das aktualisiert werden soll!?
Antwort 16 von JackyChansen vom 15.08.2019, 23:15 Options
Naja in der Tabelle user_data muss ja jedem seine punkte zugewiesen werden , und in der zeit wo der user online ist wird die punktzahl halt in die tabelle onlineliste rübergeholt , damit ich das in der online liste darstellen kann , wenn er sich ausloggt verschwindet ja der datensatz eh wieder.
Antwort 17 von Woo vom 15.08.2019, 23:19 Options
Jau klar, aber kannst dir zum auslesen ja sowieso die punkte kurz aus user_data holen
Antwort 18 von JackyChansen vom 15.08.2019, 23:24 Options
Also die variante die du geschrieben hast macht das selbe? punkte aus user_data holen und in useronline setzen?
Antwort 19 von Woo vom 15.08.2019, 23:27 Options
ne,wenn du die punkte darstellen willst, dann kannse einfach
SELECT punkte from user_data where nickname = '". $r1['nickname']
absetzen.
naja, bin dann mal pennen :)
Antwort 20 von JackyChansen vom 16.08.2019, 01:20 Options
UserOnline = Nickname , punkte , Uhrzeit , Timestamp.
user_data = Nickname , punkte , passwort.
Das von dir funzt nicht , ich weiß echt nicht was ich falsch mach.