Seite 1 von 3
Code Problem
Verfasst: 29.05.2005 15:12
von Neo_
Also ich steh momentan vor nem Problem und komm da einfach nicht weiter. Ich habe Tabelle mit Punkteständen. Die letzte Spalte zeigt den Rang an, der von der Gesamtpunkteanzahl abhängig ist. Biss dahin klappt ja alles, aber was muss ich eingeben, wenn der Rang von der Gesamtpunkteanzahl UND Rundenanzahl abhängig sein soll (zB ein bestimmter Rang erreicht man nur wenn man zB 1000 Punkte hat und 5 Runden gespielt hat)? Ich stell einmal den PHP Code hier rein in der hoffnung das mir da wer behilflich sein kann.
Code: Alles auswählen
<?php
$sql = "SELECT user, ergebnis_a, ergebnis_b, ergebnis_c, ergebnis_d, runden FROM userdaten ORDER BY (stadt + rohstoff + forschung + schiff + kampf) DESC";
$spieler_query = mysql_query($sql) or die("Anfrage nicht erfolgreich");
while ($spieler = mysql_fetch_array($spieler_query)){
$gesamt = $spieler['ergebnis_a'] + $spieler['ergebnis_b'] + $spieler['ergebnis_c'] + $spieler['ergebnis_d'];
if($gesamt<1000) $rang="Anfänger";
else if($gesamt>1000 AND $gesamt<2000) $rang="fortgeschritten";
else if($gesamt>2000 AND $gesamt<3000) $rang="mittelklasse Spieler";
else if($gesamt>3000 AND $gesamt<4500) $rang="Spieler As";
else if($gesamt>4500) $rang="Top Spieler";
?>
Verfasst: 31.05.2005 00:44
von D@ve
Was machst Du denn da mit "AND" rum???
Das zeichen für eine logische UND-Verknüpfung ist &&
Gruß, Dave
Verfasst: 31.05.2005 01:57
von Pyramide
Verfasst: 31.05.2005 09:57
von Neo_
Ob ich nun AND oder && eingebe, ist bei PHP völlig egal.
Verfasst: 31.05.2005 12:40
von D@ve
okok... Auf Anhieb sehe ich da keinen Fehler, aber probiers einfach mal so, das ist auch wesentlich übersichtlicher:
Code: Alles auswählen
if ($gesamt < 1000) $rang = "Anfänger";
if ($gesamt > 1000) $rang = "Fortgeschritten";
if ($gesamt > 2000) $rang = "Mittelklasse";
if ($gesamt > 3000) $rang = "As";
if ($gesamt > 4500) $rang = "Top Spieler";
Wenn Du da noch eine runde drin haben willst halt so:
Code: Alles auswählen
if ( $gesamt < 1000 && $runde < 5) $rang = "Anfänger";
if ($gesamt > 1000 && $runde >= 5) $rang = "Fortgeschritten";
if ($gesamt > 2000 && $runde >= 10) $rang = "Mittelklasse";
if ($gesamt > 3000 && $runde >= 15) $rang = "As";
if ($gesamt > 4500 && $runde >= 20) $rang = "Top Spieler";
Gruß, Dave
Verfasst: 31.05.2005 13:00
von Blutgerinsel
Was die Leute immer gegen einen schnellen Switch Block haben.....unbegreiflich
Verfasst: 31.05.2005 13:38
von D@ve
Blutgerinsel hat geschrieben:Was die Leute immer gegen einen schnellen Switch Block haben.....unbegreiflich
Ganz einfach:
a) ist es fast immer unübersichtlicher
b) kein wirklich sauberer Code (wg. den breaks)
Gruß, Dave
Verfasst: 31.05.2005 14:18
von Blutgerinsel
D@ve hat geschrieben:
Ganz einfach:
a) ist es fast immer unübersichtlicher
b) kein wirklich sauberer Code (wg. den breaks)
Gruß, Dave
Auf dieses Beispiel bezogen finde ich es persönlich unübersichtlicher...Bedingung + Anweisung eine Zeile schon mal ein Unding....
Abgesehen davon sich in unötige Bedingungen zu verstricken durch eine Reihe von Ifs und keinen elseifs ist auch nicht meine Welt....
Zumal man bei einer umgekehrten Reihenfolge von groß nach klein, nach der ersten Übereinstimmung keine weitere Prüfung benötigt wird und nicht dauernd den Wert überschrieben müsste....
Aber naja Ansichtssache......
Verfasst: 31.05.2005 14:29
von pokepika
in diesem zusammenhang geht ein switch Block auch gar nicht..
mit switch kann man keine Vergleichsoperatoren ersetzen, nur ==.. Du kannst in case nämlich keine ausdrücke reinschreiben und somit müsstest du _alle_ fälle von 0 bis 1000 aufnehmen und aktionen zu ordnen, dann von 1001 bis 2000 etc.
Verfasst: 31.05.2005 14:50
von naderman
D@ve hat geschrieben:Wenn Du da noch eine runde drin haben willst halt so:
Code: Alles auswählen
if ( $gesamt < 1000 && $runde < 5) $rang = "Anfänger";
if ($gesamt > 1000 && $runde >= 5) $rang = "Fortgeschritten";
if ($gesamt > 2000 && $runde >= 10) $rang = "Mittelklasse";
if ($gesamt > 3000 && $runde >= 15) $rang = "As";
if ($gesamt > 4500 && $runde >= 20) $rang = "Top Spieler";
Gruß, Dave
Sollte aber im ersten Fall "oder" sein, da man sonst manchmal gar keinen Rang hat
Code: Alles auswählen
if ( $gesamt < 1000 || $runde < 5) $rang = "Anfänger";
if ($gesamt > 1000 && $runde >= 5) $rang = "Fortgeschritten";
if ($gesamt > 2000 && $runde >= 10) $rang = "Mittelklasse";
if ($gesamt > 3000 && $runde >= 15) $rang = "As";
if ($gesamt > 4500 && $runde >= 20) $rang = "Top Spieler";
naderman