Kleines PHP-Problem

02/22/2014 19:27 lnqlorlouz#1
Hallo,

und zwar zeigt es mir auf meiner Seite die ganze Zeit irgendwelche Probleme an.
Aber nur in der profile.php.
Problem I:
Code:
Warning: Division by zero in /var/customers/webs/Benny/profile.php on line 73 Call Stack: 0.0006 792176 1. {main}() /var/customers/webs/Benny/profile.php:0
In Zeile 73 steht das:
PHP Code:
    $perc $diffE $expR['EXPperPerc']; 
Problem II:
Code:
Warning: Division by zero in /var/customers/webs/Benny/profile.php on line 260 Call Stack: 0.0006 792176 1. {main}() /var/customers/webs/Benny/profile.php:0
In Zeile 260 steht das:
PHP Code:
$Perctod round($expfromysttotod/$expR['EXPperPerc'],2); 
Was bedeuten diese Fehler und wie behebe ich sie? Es scheint wohl irgendetwas mit dem ['EXPperPerc'] zu tun zu haben...

Grüße
02/22/2014 19:30 DeathPro2o12#2
Durch 0 teilen ist auch sehr schlau.
Hast du dir den Fehler mal genau angeschaut?
Zumindest scheint $expR['EXPperPerc'] den Wert 0 zu haben.
02/22/2014 21:51 Syc#3
Nimm die Zeilen raus und lass dir den Wert der Variable ausgeben, die Probleme macht.
Wobei du vor Teilungen immer die betreffende Variable prüfen solltest, ob sie den wert 0 hat oder nicht und wenn sie 0 ist, die Teilung einfach nicht durchführen und nen Fehler o.ä. zurückgeben.
02/23/2014 11:13 sippi10#4
Mehr Quellcode wäre hilfreich um dir zu helfen. Das Problem ist, wie bereits von DeathPro2o12 angemerkt, dass du durch 0 teilst. Wie dieser Wert ermittelt wird, ist entscheidend, um dir bei deinem Problem weiterzuhelfen.

Ist der Wert durch eine Benutzerinteraktion / Benutzereingabe gesetzt, macht es Sinn eine Validierung durchzuführen und den Benutzer aufzufordern, Werte > 0 einzugeben.
Kommt der Wert durch Berechnungen zustande, ist es wichtig den Kontext deiner Anwendung zu kennen, um ein korrektes und sinnvolles Verhalten zu empfehlen.
02/23/2014 13:57 lnqlorlouz#5
Ich kann den Fehler in Line 257 leider nicht finden/fixxen.
Hier etwas mehr Code:
PHP Code:
                    $expfromysttotod $nxarrdat[$x][0] - $nxarrdat[$x 1][0];
                    
$killsfromysttotod $nxarrdat[$x][1] - $nxarrdat[$x 1][1];
                    
$deathsfromysttotod $nxarrdat[$x][2] - $nxarrdat[$x 1][2];
                    
$nick $nxarrdat[$x][4];
                    
$level $nxarrdat[$x][5];
                    
$level_c str_pad($level3"0"STR_PAD_LEFT);
                    
                
Line257    $kdratio round($killsfromysttotod/$deathsfromysttotod3); 
Es kann nur sein, dass wenn ein User gestern nicht gespielt hat, das der Wert von $deathsfromysttotod auch mal 0 sein kann, ebenso von $killsfromysttotod.
Aber wie umgehe ich das, dass die Fehlermeldung kommt? Vorher als ich meinen eigenen Root-Server noch hatte, hatte ich nie Fehlermeldungen, nur seit ich bei dem free Webspace Anbieter von PHP-Friends bin.

Könnte ich das mit einer if Anweisung ändern?
02/23/2014 14:09 sippi10#6
Verstehe. Was du willst: Fehlermeldung (exakter: Warnungsmeldung) unterdrücken. Ich empfehle dir, deinen Code zu refactoren. Offensichtlich ist die implementierte Logik nicht optimal.

Hast du Zugriff auf die php.ini?

Wenn nicht, füge
Quote:
error_reporting(E_ERROR);
an den Anfang deines php-Quellcodes (in der profile.php)

Siehe bitte auch in die offizielle Dokumentation: [Only registered and activated users can see links. Click Here To Register...]
02/23/2014 14:34 lnqlorlouz#7
Quote:
Originally Posted by sippi10 View Post
Verstehe. Was du willst: Fehlermeldung (exakter: Warnungsmeldung) unterdrücken. Ich empfehle dir, deinen Code zu refactoren. Offensichtlich ist die implementierte Logik nicht optimal.

Hast du Zugriff auf die php.ini?

Wenn nicht, füge

an den Anfang deines php-Quellcodes (in der profile.php)

Siehe bitte auch in die offizielle Dokumentation: [Only registered and activated users can see links. Click Here To Register...]
Vielen dank! Endlich. Vorher ging nämlich auch schon alles. :P
02/23/2014 14:42 sippi10#8
Quote:
Originally Posted by lnqlorlouz View Post
Vielen dank! Endlich. Vorher ging nämlich auch schon alles. :P
Gerne :) Das es funktioniert heißt aber nicht, dass es gut umgesetzt ist. Wie gesagt: wenn du Zeit findest, versuche die Warnung programmatisch zu verhindern, in dem du dein Code refactorest. Die Unterdrückung der Warnung ist ein Zeichen für schlechten Code.

Kannst gerne ein Feedback in mein Codingservice hinterlassen =) [Only registered and activated users can see links. Click Here To Register...]