kostenloser Webspace werbefrei: lima-city


[php] devide : 0 fehler umgehen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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,
  4. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    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
  5. 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


  6. @ 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 ;)
  7. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    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
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!