[php] devide : 0 fehler umgehen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anmerkung
array
bedingung
berechnen
code
division
ergebnis
fehler
gesamte string
gestaltet code
helfen
melde
nachfolgenden code
normalfall
ohr
problem
testdatum
umgehen
verzweigung
zweig
-
ho ;)
ich arbeite atm an einem script...
allerdings kommt in gewissen fällen ein fehler... und zwar, wenn ein bestimmter wert 0 ist...
durch diesen wert wird im normalfall dividiert... und das möche ich umgehen, wenn dieser 0 ist... (denn wenn der wert 0 ist, dann ist das ergebnis eh klar (man muss nichts ausrechnen lassen, sondern kann eine normale msg. ausgeben lassen...
wenn der wert aber nicht 0 ist, sollte schon gerechnet werden... und das wollte ich eig. mit diesem script erreichen... nur das es nicht funzt...
<?php echo \' (...) <tr><td class=\"g\">\'.$udat[1][3].\'</td><td class=\"w\">if ($udat[1][0] == 0) { $eventZeroPost = \"(0 per day)\"; } else { $eventZeroPost = \"(\'.round($udat[1][3]*100/$udat[1][0]).\'%)\"; } $eventZeroPost.\';</td></tr> (...) \'; ?>
also ich hoffe, das klar ist, was ich vom server will...
aber es geht einfach nicht, und ich finde den fehler nicht :(
(diese ganzen $udat... variablen sind zuvor deffinieniert... )
der fehler lautet schon wie angedeutet:
Warning: Division by zero in /pfadXY/divdurchnull.php on line 39
und line 39 ist die angezeigte...
ich hoffe ihr könnt mir helfen...
danke schon einmal im vorraus ;)
Sincer -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
hi,
also, sollte bei deinem Snippet immernoch der \"division by zero\"-Fehler kommen, fänd ich das recht komisch. Wenn es aber nicht berechnen sollte, wenn es dann soll, könnte das vielleicht daran liegen, dass du in deinem else-Zweig zuerst mit \" beginnst und mit \' endest, das Ganze mit dem Ergebnis der Rechung und anschließend mit dem Ende, welches mit \' geöffnet und mit \" geeschlossen wird, konkatenieren willst. Es sollte dort eigentlich dann der gesamte String wie er da steht (nach Ersetzen der Variablen durch ihre Werte, da es ja innerhalb der \"-Quotes ist) ausgegeben werden.
Hab das mal bei nachfolgenden Code getestet, dort funktioniert alles ohne Probleme (am Anfang sieht man ein paar Testdaten - einmal mit und einmal ohne 0). Dort ist auch das mit der if-else-Verzweigung etwas schlanker und performanter gestaltet.
<?php $udat = array ( array(13, 1, 1, 3), array(0, 1, 1, 11) ); ?> <html> <head> <title>Test</title> </head> <body> <table> <?php for ($i = 0; $i < count($udat); $i++) { ?> <tr> <td class=\"g\"><?=$udat[$i][3]; ?></td> <td class=\"w\"><?=$udat[$i][0] == 0 ? \'(0 per day)\' : \'(\'.round($udat[$i][3] * 100 / $udat[$i][0]).\'%)\'; ?></td> </tr> <?php } ?> </table> </body > </html>
Hoffe, das hilft dir vielleicht weiter.
So long,
-
jo eben, ich hätte auch gesagt, dass der code gut aussieht... aber es geht nicht :(
für weitere vorschläge bin ich dankbar...
lg
Sincer -
if und else sollten nicht innerhalb von echo\' \'; stehen. ;)
<?php if ($udat[1][0] == 0) { $eventZeroPost = \"(0 per day)\"; else { $eventZeroPost = \"(\'.round($udat[1][3]*100/$udat[1][0]).\'%)\"; } echo\' <tr><td class=\"g\">\'.$udat[1][3].\'</td><td class=\"w\">$eventZeroPost.\';</td></tr>\'; ?>
Gruß
m062
-
@ sincer: Hast du denn schon den von mir geposteten Code ausprobiert? Wie gesagt, hab ihn getestet und er funktioniert.
Die Anmerkung von m062 solltest du auch beherzigen. Für solche Fälle gibt es das von mir in meinem Code verwendete Konstrukt:
Bedingung ? falls wahr : ansonsten;
zB kannst du es bei der Übergabe von Werten benutzen, wie
$var = $x > $y ? $x : $y;
oder auch einfach als direkte Wertrückgabe wie
<a href=\"<?=$a == $b ? $href_1 : $href_2; ?>\">Link</a> usw.
Aber wie gesagt, der von mir gepostete Code funktioniert und sollte dir eigentlich helfen, probier\'s mal aus ;)
-
ho ;)
sry, dass die antwort so lange gedauert hat :/
habe viel um die ohren...
ich probiere das mal aus, schau, ob ich es hinbekomme, und wenn nicht, melde ich mich nocheinmal ;)
(bzw. wenn ich es schaffe, bedanke ich mich auch noch einmal :P )
thx
Sincer
//EDIT: also das problem wurde gelöst ;)
bin gerade voll im einsatz für die matura, deswegen dauert alles etwas länger XD
vielen dank für eure hilfe ;)
Sincer
Beitrag geändert: 23.4.2008 19:04:49 von sincer -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage