Rechner in PHP (Anfänger)

Simi

Angesehenes Mitglied
Hi all,

Bin dran ein bisschen PHP zu lernen.
Nun habe ich eine Frage an euch...ich habe die Aufgabe erhalten einen kleinen Taschenrechner
zu programmieren. Sie funktioniert auch...aber da ich alle Formulardaten an die gleiche Datei sende, kommt folgende Fehlermeldung:

Warning: Division by zero in C:\apachefriends\xampp\htdocs\dbdesign\rechner.php on line 22

Ich habe das Gefühl, dass ich irgendwo einen if einbauen muss, damit ich diesen Fehler beseitigen kann. Leider weiss ich nicht wo...könnt ihr Profis einen Anfänger wie mich helfen?
biggrin.gif


Vielen Dank im voraus...Gruss Disastro.

CODE
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="POST">
<input type="text" name="a"><br />
<input type="text" name="b"><br />
<input type="submit" name=_1 value="/">
<input type="submit" name=_2 value="*">
<input type="submit" name=_3 value="+">
<input type="submit" name=_4 value="-"><br />
<?php

$a = $_REQUEST['a'];
$b = $_REQUEST['b'];
$_1 = $_REQUEST['_1'];
$_2 = $_REQUEST['_2'];
$_3 = $_REQUEST['_3'];
$_4 = $_REQUEST['_4'];

$teilen = $a / $b;
$mal = $a * $b;
$plus = $a + $b;
$minus = $a - $b;


if ($_1) {echo "$teilen";
}
elseif ($_2) {echo "$mal";
}
elseif ($_3) {echo "$plus";
}
elseif ($_4) {echo "$minus";
}
?>
 
Hallo Disastro

Leider ist aus deinem Posting nicht ersichtlich, welches die Zeile 22 ist.

Bei Analyse der Fehlermeldung fällt aber auf:
QUOTE Warning: Division by zero in C:\apachefriends\xampp\htdocs\dbdesign\rechner.php on line 22

Dass es sich um eine Division durch Null handelt (In der Mathematik nicht erlaubt, da Du es nicht möglich ist, etwas in Null Teile zu teilen).

Folglich geht es um die Zeile:

QUOTE $teilen = $a / $b;

welche die einzige Division in deinem Script ist.

Dort musst Du in der Tat einen Sonderfall einbauen:
Edit: thx @Jörg

QUOTE if ($b!=0) {
$teilen = $a / $b;
} else {
$teilen = "Achtung! Sie können keine Zahl durch Null dividieren";
}



Da fragliche Zeile auf jeden Fall abgearbeitet wird, tritt die Fehlermeldung auch auf, wenn kein Wert für $b übermittelt wurde. Du könntest also auch eine Prüfung einbauen, ob die Werte übermittelt wurden:

QUOTE
if (!empty($a) && !empty($b)) {
$teilen = $a / $b;
$mal = $a * $b;
$plus = $a + $b;
$minus = $a - $b;
}


Siehe http://php.benscom.com/manual/de/function.empty.php und für deine if elseif empfehle ich Dir die Verwendung einer Switch Abfrage: http://php.benscom.com/manual/de/control-s...ures.switch.php
 
Man kann aber durch negative Zahlen teilen, deswegen würde ich nicht das > verwenden sondern das !=

QUOTE ("Code")
if ($b!=0) {
$teilen = $a / $b;
} else {
$teilen = "Achtung! Sie können keine Zahl durch Null dividieren";
}

 
QUOTE (Disastro @ Fr 20.5.2005, 14:59)[...]
Sie funktioniert auch...aber da ich alle Formulardaten an die gleiche Datei sende, kommt folgende Fehlermeldung:

Warning: Division by zero in C:\apachefriends\xampp\htdocs\dbdesign\rechner.php on line 22

[...]



Hallo,

das stimm, es ist eigentlich ganz einfache Mathematik, man kann nichts durch Null teilen, so musst du halt vor dem Teilen kontrollieren ob die Variable "b" einen Wert enthält und ob dieser Wert größer als "0" ist.


CODE if((float)$b > 0 || (float)$b < 0){
  $teilen = $a / $b;
}


Danach kommt die Fehlermeldung nicht mehr, es wird aber auch nichts ausgegeben, wenn er in die IF-Anweisung zur Ausgabe von dem Wert "$teilen" kommt.


MfG Sascha Ahlers

PS: Auf der offizellen Seite zu PHP ist eine recht gute Einleitung vorhanden www.php.net/manual/de/ unter dem Punkt "Sprachreferenz".


------

Da war ich wohl etwas zu langsam ^^
Sorry, da war ein kleiner Logik-Fehler von mir drinne.
 
Hi all,

WoW also super gute und schnelle Antworten...danke sehr.

Ich hatte es eben am Anfang so probiert gehabt:

CODE  
if ($b=0) {
   $teilen = $a / $b;
}
   else {
   $teilen = "Achtung! Sie können keine Zahl durch Null dividieren";
   }



Aber so funktioniert es:


CODE  
if ($b!=0) {
   $teilen = $a / $b;
}
   else {
   $teilen = "Achtung! Sie können keine Zahl durch Null dividieren";
   }



Aber jetzt funktioniert alles perfekt...mal sehen ob ich in Zukunft mich schlauer mit PHP anstellen kann.
wink.gif


Ich wusste schon, warum diesen Fehler kommt, schwieriger wird es wenn richtig gecodet werden muss.

Also nochmal danke schön an euch allen.
PS: Das nächste Mal gebe ich die Liniennummer an...

Gruss
Disastro
 
CODE if ($b=0) {
$teilen = $a / $b;
}
else {
$teilen = "Achtung! Sie können keine Zahl durch Null dividieren";
}


kann nicht funktionieren denn
if ($b=0) {
heißt nicht , wenn $b gleich 0 sondern damit setzt Du die Variablen $b auf 0

richtig wäre in diesem Fall
if ($b==0) {
 
Zurück
Oben