Problem mit Vergleichsoperatoren
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
ausgabe
bedingung
beispiel
code
direkt ausgeben
einbau
ergebnis
erwartung
fehler
frage
http
manual
nachvollziehbares ergebnis
resultat
string
switch
test
url
zahl
-
Ich hab ein kleines Problem. Ich möchte den Fortschritt eines Users augeben.
<?php $abfrage_fortschritt = "SELECT *** FROM *** WHERE ***='$user'"; $ergebnis_fortschritt = mysql_query($abfrage_fortschritt); if($ergebnis_fortschritt > 10){ echo 'Du bist unter 10%'; }else if($ergebnis_fortschritt > 20){ echo 'Du bist unter 20%'; }else if($ergebnis_fortschritt > 30){ echo 'Du bist unter 30%'; }else if($ergebnis_fortschritt > 40){ echo 'Du bist unter 40%'; }else if($ergebnis_fortschritt > 50){ echo 'Du bist unter 50%'; }else if($ergebnis_fortschritt > 60){ echo 'Du bist unter 60%'; }else if($ergebnis_fortschritt > 70){ echo 'Du bist unter 70%'; }else if($ergebnis_fortschritt > 80){ echo 'Du bist unter 80%'; }else if($ergebnis_fortschritt > 90){ echo 'Du bist unter 90%'; }else if($ergebnis_fortschritt > 100){ echo 'Du bist unter 100%'; } ?>
Egal welche Zahl ich in der DB einstrage er gibt immer aus das ich unter 10% bin?! Egal ob ich 1 eintrage oder 33 :/
Weiß einer warum?
mfg
//Edit: Code-Tag ergänzt.
Beitrag zuletzt geändert: 27.11.2013 19:09:15 von cbhp -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Da ist ein fehler in deinem Code.
Du hast du Kokodilklammern falsch herum.
Also:
<?php $abfrage_fortschritt = "SELECT *** FROM *** WHERE ***='$user'"; $ergebnis_fortschritt = mysql_query($abfrage_fortschritt); if($ergebnis_fortschritt < 10){ echo 'Du bist unter 10%'; }else if($ergebnis_fortschritt < 20){ echo 'Du bist unter 20%'; }else if($ergebnis_fortschritt < 30){ echo 'Du bist unter 30%'; }else if($ergebnis_fortschritt < 40){ echo 'Du bist unter 40%'; }else if($ergebnis_fortschritt < 50){ echo 'Du bist unter 50%'; }else if($ergebnis_fortschritt < 60){ echo 'Du bist unter 60%'; }else if($ergebnis_fortschritt < 70){ echo 'Du bist unter 70%'; }else if($ergebnis_fortschritt < 80){ echo 'Du bist unter 80%'; }else if($ergebnis_fortschritt < 90){ echo 'Du bist unter 90%'; }else if($ergebnis_fortschritt < 100){ echo 'Du bist unter 100%'; } ?>
Beitrag zuletzt geändert: 26.11.2013 10:46:20 von willstdueswissen -
willstdueswissen schrieb:
Da ist ein fehler in deinem Code.
Du hast du Kokodilklammern falsch herum.
Also:
<?php $abfrage_fortschritt = "SELECT *** FROM *** WHERE ***='$user'"; $ergebnis_fortschritt = mysql_query($abfrage_fortschritt); if($ergebnis_fortschritt < 10){ echo 'Du bist unter 10%'; }else if($ergebnis_fortschritt < 20){ echo 'Du bist unter 20%'; }else if($ergebnis_fortschritt < 30){ echo 'Du bist unter 30%'; }else if($ergebnis_fortschritt < 40){ echo 'Du bist unter 40%'; }else if($ergebnis_fortschritt < 50){ echo 'Du bist unter 50%'; }else if($ergebnis_fortschritt < 60){ echo 'Du bist unter 60%'; }else if($ergebnis_fortschritt < 70){ echo 'Du bist unter 70%'; }else if($ergebnis_fortschritt < 80){ echo 'Du bist unter 80%'; }else if($ergebnis_fortschritt < 90){ echo 'Du bist unter 90%'; }else if($ergebnis_fortschritt < 100){ echo 'Du bist unter 100%'; } ?>
hab ich auch schon versucht. Dann steht dort immer Du bist unter 20%. Egal bei welchem Wert. -
Die Funktion "mysql_query" ergibt kein Result, sondern eine Referenz, eine sogenannte resource. Diese Resource ist im Programmcode durch eine Zahl gekennzeichnet, wenn man sie Abfragt. Warum weiß ich nicht, ist aber so.
Um das Ergebnis zu haben, musst du diese Resource auslesen.
Um diese mysql Resource nun in ein verwendbares Result zu überführen, kannst du zum Beispiel mysql_result nutzen.
mysql_query: http://php.net/manual/de/function.mysql-query.php
mysql_result: http://www.php.net/manual/de/function.mysql-result.php
Auf der Seite des mysql_result findest du ebenfalls ein Beispiel, wie du es benutzen kannst.
Das Ergebnis wird ein String sein. Du kannst das Ergebnis noch einmal mit intval (http://php.net/manual/de/function.intval.php) explizit in ein Integer umwandeln, also eine Ganzzahl, wenn der String nicht richtig konvertiert werden sollte.
Liebe Grüße
Beitrag zuletzt geändert: 26.11.2013 11:36:25 von ggamee -
Jetzt hab ich das gemacht:
$abfrage_fortschritt = mysql_query("SELECT prozent_fortschritt FROM tbl_user WHERE user_name='$user'"); $ergebnis_fortschritt = mysql_result($abfrage_fortschritt); if($ergebnis_fortschritt < 10){ echo 'Du bist unter 10%'; }else if($ergebnis_fortschritt < 20){ echo 'Du bist unter 20%'; }else if($ergebnis_fortschritt < 30){ echo 'Du bist unter 30%'; }else if($ergebnis_fortschritt < 40){ echo 'Du bist unter 40%'; }else if($ergebnis_fortschritt < 50){ echo 'Du bist unter 50%'; }else if($ergebnis_fortschritt < 60){ echo 'Du bist unter 60%'; }else if($ergebnis_fortschritt < 70){ echo 'Du bist unter 70%'; }else if($ergebnis_fortschritt < 80){ echo 'Du bist unter 80%'; }else if($ergebnis_fortschritt < 90){ echo 'Du bist unter 90%'; }else if($ergebnis_fortschritt < 100){ echo 'Du bist unter 100%'; }
Leider funkt. es immer noch nicht. Bleibt bei unter 10%. -
Du hast einen simplen Fehler gemacht. Wenn zum Beispiel dein Ergebnis 50 ist, wird als erstes abgefragt, ob dein Ergebnis größer als 10 ist. Ist 50 größer als 10? Ja. Deswegen kommt raus, dass deine Zahl größer als 10 ist.
Upps, ich habe übersehn, dass du dein Code geändert hast. Ignorier bitte was ich oben geschrieben habe. Entferne mal die Datenbankabfrage und setze deine Variable auf 50. So kannst du überprüfen ob dein Fehler an der Abfrage oder bei der If-Else Zweig liegt.
$ergebnis_fortschritt = 50; if($ergebnis_fortschritt < 10){ echo 'Du bist unter 10%'; }else if($ergebnis_fortschritt < 20){ echo 'Du bist unter 20%'; }else if($ergebnis_fortschritt < 30){ echo 'Du bist unter 30%'; }else if($ergebnis_fortschritt < 40){ echo 'Du bist unter 40%'; }else if($ergebnis_fortschritt < 50){ echo 'Du bist unter 50%'; }else if($ergebnis_fortschritt < 60){ echo 'Du bist unter 60%'; }else if($ergebnis_fortschritt < 70){ echo 'Du bist unter 70%'; }else if($ergebnis_fortschritt < 80){ echo 'Du bist unter 80%'; }else if($ergebnis_fortschritt < 90){ echo 'Du bist unter 90%'; }else if($ergebnis_fortschritt < 100){ echo 'Du bist unter 100%'; }
Beitrag zuletzt geändert: 26.11.2013 14:35:27 von onur-yavuz -
onur-yavuz schrieb:
Du hast einen simplen Fehler gemacht. Wenn zum Beispiel dein Ergebnis 50 ist, wird als erstes abgefragt, ob dein Ergebnis größer als 10 ist. Ist 50 größer als 10? Ja. Deswegen kommt raus, dass deine Zahl größer als 10 ist.
Upps, ich habe übersehn, dass du dein Code geändert hast. Ignorier bitte was ich oben geschrieben habe. Entferne mal die Datenbankabfrage und setze deine Variable auf 50. So kannst du überprüfen ob dein Fehler an der Abfrage oder bei der If-Else Zweig liegt.
$ergebnis_fortschritt = 50; if($ergebnis_fortschritt < 10){ echo 'Du bist unter 10%'; }else if($ergebnis_fortschritt < 20){ echo 'Du bist unter 20%'; }else if($ergebnis_fortschritt < 30){ echo 'Du bist unter 30%'; }else if($ergebnis_fortschritt < 40){ echo 'Du bist unter 40%'; }else if($ergebnis_fortschritt < 50){ echo 'Du bist unter 50%'; }else if($ergebnis_fortschritt < 60){ echo 'Du bist unter 60%'; }else if($ergebnis_fortschritt < 70){ echo 'Du bist unter 70%'; }else if($ergebnis_fortschritt < 80){ echo 'Du bist unter 80%'; }else if($ergebnis_fortschritt < 90){ echo 'Du bist unter 90%'; }else if($ergebnis_fortschritt < 100){ echo 'Du bist unter 100%'; }
$ergebnis_fortschritt = 50;
Wird ausgegeben: Du bist unter 60%.
Obwohl ich 41% eingestellt habe wird nicht unter 50% ausgegeben :/ -
Schreib mal else if zusammen: elseif
Nach meiner Erfahrung wird in PHP elseif zusammengeschrieben. Ich bin mir nicht sicher, aber ich glaube es gibt einen Unterschied zwischen else if und elseif...
php.net/manual/de/control-structures.elseif.php -
Bleibt bei elseif() leider unter 60%.?
-
Wenn du die Seite, die ich dir gegebe habe, vernünftigt gelesen hättest, wüsstest du, dass es ein Fehler ist, wenn du bei einem if Zweig "else" vergisst.
else{ echo 'Fehler'; }
-
onur-yavuz schrieb:
Wenn du die Seite, die ich dir gegebe habe, vernünftigt gelesen hättest, wüsstest du, dass es ein Fehler ist, wenn du bei einem if Zweig "else" vergisst.
else{ echo 'Fehler'; }
wo soll ich da ein else vor dem if vergessen haben?
mfg -
Ein vernünftiger If Else Zweig sieht so aus:
if ($a > $b) { echo "a is größer als b"; } elseif ($a == $b) { echo "a ist gleich groß wie b"; } else { echo "a ist kleiner als b"; }
Wenn du else vergisst, ist das ein parse error und alle elseif werden nicht ausgeführt (oder fehlerhaft) -
Hast du eigentlich vor, mit der Auswertung der if's noch mehr zu machen? Wenn es dir lediglich um die Ausgabe des Texts gehts, würde ich das anders lösen, nämlich indem du den Ganzzahlteil des mit 10 dividierten Wertes mit 1 addierst und wieder mit 10 multiplizierst. Beispiels:
37%
37 / 10 = 3,7
Ganzzahlteil: 3
1 dazu addiert
4
x10 = 40%
-> du bist unter 40%
in PHP müsste das etwa so aussehen:
$ergebnis_fortschritt = mysql_result($abfrage_fortschritt); // hier im Beispiel 37% $ausgabe = (intval($ergebnis_fortschritt)+1) * 10; echo "Du bist unter $ausgabe %"
Wäre das so nicht viel komfortabler?
selbst wenn du dann noch weiter was machen willst, kannst du mit einem switch die Unterscheidung machen.
Beitrag zuletzt geändert: 26.11.2013 15:26:08 von burgi -
ich möchte ja aber dann bei bestimmten Prozentzahlen SQL Abfragen, INSERT machen ect.
Deswegen!
// Kann mir keiner Helfen?
Beitrag zuletzt geändert: 29.11.2013 20:57:55 von tecfreak -
tecfreak schrieb:
Bleibt bei elseif() leider unter 60%.?
Wen wundert's?
50 ist nicht kleiner 50, sonder ngleich 50, daher greift erst die nächste Abfrage auf kleiner 60.
Programme und Computer machen nie das, was Du willst, sondern das, was man ihnen sagt. Falsche Fragen produzieren falsche Antworten.
So, damit ist dieser Thread auch wieder oben und offen für weitere Fragen des Themenstarters. Thread. No.2 ist damit wohl überflüssig. -
tecfreak schrieb:
Aber wenn ich die Zahl raus nehme und die SQL Abfrage einbau dann bleibt das bei 60% obwohl das Resultat eigtl. 2% oder so wäre. Darum eghts doch :/
Die Frage ist nicht, was das Ergebnis sein sollte, sondern was es ist.
Ein vorgegebener Wert erzeugt ein nachvollziehbares Ergebnis, ergo ist der Fehler wohl eher bei deiner Abfrage und deren Rückgabewert zu suchen. Hast Du dir das Ergebnis deiner SQL-Abfrage mal zum Test direkt ausgeben lassen und entspricht es den Erwartungen? -
fatfreddy schrieb:
tecfreak schrieb:
Aber wenn ich die Zahl raus nehme und die SQL Abfrage einbau dann bleibt das bei 60% obwohl das Resultat eigtl. 2% oder so wäre. Darum eghts doch :/
Die Frage ist nicht, was das Ergebnis sein sollte, sondern was es ist.
Ein vorgegebener Wert erzeugt ein nachvollziehbares Ergebnis, ergo ist der Fehler wohl eher bei deiner Abfrage und deren Rückgabewert zu suchen. Hast Du dir das Ergebnis deiner SQL-Abfrage mal zum Test direkt ausgeben lassen und entspricht es den Erwartungen?
Ja hab ich. Es liegt an den Bedingungen warum auch immer :/ -
tecfreak schrieb:
Es liegt an den Bedingungen warum auch immer :/
Warum sollte das so sein? Bist Du nicht der, der Partner für ein Hacking-Team sucht? Ein wenig mehr Logik wäre da schon zu erwarten.
Wenn die Abfrage einer korrekt formulierten Bedingung (abgesehen davon, daß Du das letzte elseif durch ein else ersetzen solltest, ist sie augenscheinlich korrekt) einmal funktioniert und beim nächsten Mal nicht mehr, ist der Fehler nicht unbedingt in der Bedingung zu suchen. Da Du aber darauf beharrst und nicht mehr als diese Bedingung zur Analyse bereit stellst, darfst Du dich nicht über ausbleibende Antworten wundern.
Ich behaupte jetzt mal dreist, daß der Fehler in deiner Abfrage, oder der Belegung der, zur Bedingungsabfrage belegten Variable liegt. Mehr als Behauptung und Vermutung ist aber wohl nicht möglich, da Du keine weiteren Fakten lieferst. Hast Du mal Burgis Variante getestet und wenn ja, mit welchem Ergebnis? Gleicher Fehler?
-
Auch burgis Variante hat noch einen Fehler: die Funktion
braucht 2 Parameter.mysql_result
$ergebnis_fortschritt = mysql_result($abfrage_fortschritt, 0);
Wenn die Abfrage keine Werte liefert wird übrigens dein Ergebnis auch nicht stimmen. Hast du die mal mit phpmyadmin o.ä. überprüft, ob die überhaupt das richtige zurückliefert? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage