PHP - Fehler im Code

Ich muss für die Schule eine php-Aufgabe machen.
Hierfür muss das Volumen bzw. die Oberfläche eines Kreiszylinders von php berechnet werden. Es müssen die zwei functionen volumen & oberfläche verwendet werden. Die function volumen soll per Rückgabewert berechnet werden, die function oberfläche mit Referenzparameter. Zudem soll ein Textfeld bestehen. Je nachdem ob man in dieses Textfeld O oder V eingibt soll die Oberfläche oder das Volumen berechnet werden. Es soll nach klicken auf den Submitbutton die eigene Seite neu geladen werden und das Ergebniss angezeigt werden.

Ich finde jedoch leider den Fehler nicht.

Danke für die Hilfe!

Die "Fehlermeldung schon beim ersten Aufruf der Seite:

3."; } else if ($was== „O“ || $was == „o“) { oberflaeche($r,$h,$ober) = $vol; echo „Die Oberfläche des geraden Kreisgekels beträgt $ober mm2.“; } else echo „Keine gültige Berechnungsart gewählt.“; } ?>

Und hier der Code:

$radius=$hoehe=$was="";
function volumen($r,$h,$vol)
{
$vol=(3.141592*$r*$r*$h)/(3);
return $vol;
}

function oberflaeche($r,$h,$ober)
{
$ober=(3.141592*$r*$r)+(3.141592*$r*$h);
return $ober;
}

if (isset($_POST[„r“]) && isset($_POST[„h“]) && isset($_POST[„was“]))
{
$radius=$_POST[„r“];
$hoehe=$_POST[„h“];
$was=$_POST[„was“];

if ($was ==„V“ || $was == „v“)
{
volumen($r,$h,$vol);
echo „Das Volumen des geraden Kreiskegels beträgt $vol mm3.“;
}
else if ($was== „O“ || $was == „o“)
{
oberflaeche($r,$h,$ober) = $vol;
echo „Die Oberfläche des geraden Kreisgekels beträgt $ober mm2.“;
}
else
echo „Keine gültige Berechnungsart gewählt.“;
}
?>

Oberfläche und Volumen
des geradem Kreiskegels

Radius [mm]:Höhe [mm]:open_mouth:/V:

hi,

  1. Du lässt die Funktionen zwar etwas zurück geben aber benutzt dieses Zurückgegebene nicht.
  2. die Parameter, die du den Funktionen übergibst haben keinen Wert
  3. der Parameter $vol ist völlig unnütz
  4. sehe ich noch dass du einer Funktion einen Wert zuweist

$vol = volumen($r, $h); // ist richtig

Hi,

Nummer 1 - strukturiere den Code:

<?php // PHP - Code
?\> dann alles HTML geht hier schlecht: Rücke die Codezeilen je nach Zusammengehörigkeit ein (üblich sind 4 Zeichen) Nummer 2: Wenn Du Variableninhalte auf leer setzen möchtest, dann bitte nacheinander: $radius=""; $hoehe=""; $was=""; Nummer 3: Und nun Dein Hauptproblem: Du hast noch nicht verstanden, wie die Variablen- bzw. Ergebnisausgabe funktioniert: function volumen($r,$h) { //$vol brauchst Du hier nicht // berechne Volumen $vol=(3.141592\*$r\*$r\*$h)/(3); // gibt den berechneten Wert an die aufrufende Stelle zurück return $vol; } Du hast den Variablen die Inhalte der Formulardaten zugewiesen und mit diesen Daten möchtest Du das Volumen berechnen. Dann verwende die gefüllten Variablen, um die oben definierte Funktion aufzurufen, mit $r beim Aufrufen kann die Funktion nichts anfangen: volumen($radius,$hoehe) ruft die function volumen auf und weist den Wert von $radius der Funktionsvariable $r zu (analog hoehe). Nun bekommst Du von der Funktion ein Ergebnis geliefert, das Du gerne verwenden möchtest - also weise der Variable $volumen das Ergebnis des Funktionsaufrufs zu: $volumen = volumen($radius,$hoehe); Beachte: $vol und $volumen haben dann zwar den gleichen Wert, werden aber an unterschiedlichen Stellen verwendet: $vol wird nur innerhalb der Funktion verwendet. Analog die Oberflächenberechnung. Und noch etwas kannst Du schöner machen - statt der vielen if-else würde ich ein switch-case verwenden. switch ($was) { case "V": case "v": // berechne Volumen $ergebnissatz = "Das Volumen..."; break; case "O": case "o": // berechne Oberfläche $ergebnissatz = "Die Oberflaäche..."; break; default: $ergebnissatz = "falsch ausgewählt ..."; } Wie Du den Ergebnissatz nun in Dein HTML einbaust, überlasse ich auch Dir - sonst lernste ja nix :wink: Hoffe, geholfen zu haben, Gruß remy

Hallo,

schreib „elseif“ zusammen, nicht auseinander.

Grüße
VB

3."; } else if ($was== „O“ || $was == „o“) {
oberflaeche($r,$h,$ober) = $vol; echo „Die Oberfläche des
geraden Kreisgekels beträgt $ober mm2.“; } else echo „Keine
gültige Berechnungsart gewählt.“; } ?>

Hallo,

versuch mal die Php-Tags zu ändern, d.h. zu

ersetze mal durch

Hallo mlk,

dein Quellcode ist leider sehr durcheinander, aber ich hab die Fehler gefunden.

Erstmal scheinst du den Unterschied zwischen „Referenzparameter“ und „Rückgabewert“ nicht ganz klar geworden zu sein.

Erstmal grobe Erklärungen:

Unter Rückgabewert versteht man die „Rückgabe“ einer Funktion oder Methode. D.h. der Programmierer ruft die Funktion auf und bekommt nachdem die Funktion irgendwas mit den Eingabeparameter getan hat ein Wert zurück.

Diese Rückgabe wird wie du es korrekt in der Funktion geschrieben hast mit „return“ zurück gegeben.

Dein Aufruf ist aber in dem Fall unglücklich, weil du erstmal die Rückgabe in keiner Variable speicherst, sondern die Ergebnissverable als Parameter an die Funktion übergibst.

Aufruf:
volumen($r,$h,$vol);

Funktionskopf:
function volumen($r,$h,$vol) { … }

Da die Funktion das Volumen nicht als Eingabeparameter benötigt, kann man den dort weg lassen. Beim Aufruf musst du dir aber die Rückgabe in der entsprechenden Variable speichern.

Korrekt würde es also so aussehn:

Aufruf:
$vol = volumen($r,$h);

Funktionskopf:
function volumen($r,$h) { … return $vol; }

Bei Oberfläsche ähnliche Fehler. Um Parameter als Referenz zu definieren, musst du in dem Funktionskopf ein „Kaufmannsund“ vor die Variable stellen:

function oberflaeche($r,$h,&$ober) { }

In dem Fall ist die Variable an der Stelle richtig, da die Variable ja innerhalb der Funktion beschrieben oder verändert wird. Dein Aufruf ist auch falsch Herum…

Erstmal musst du bei dem Aufruf der Funktion keine „Rückgabe“ erwarten und wenn geht die Rückgabe immer nach „links“ aus der Funktion raus.

Richtiger Aufruf wäre in dem Fall:
oberflaeche($r,$h,$ober);

Außerdem hast du im PHP Code die Request-Parameter in andere Variablen gespeichert, als du sie unten genutzt hast.

Hier jetzt mal der Komplette Quellcode:
http://pastebin.com/XKZe5EgW

Viele Grüße
Frank

Hi!

der Fehler liegt in folgender Zeile:

oberflaeche($r,$h,$ober) = $vol;

Die müsste richtig lauten:

$ober = oberflaeche($r,$h,$ober);

Denn Du möchtest der Variable „$ober“ (die Du eine Zeile später ausgibst) etwas zuweisen. So wie Du es notiert hast ist der Vorderteil und der hintere Teil vertauscht: Das was in „$vol“ drinsteht soll der Funktion „oberflaeche“ zugewiesen werden. Man kann aber einer Funktion keinen Wert zuweisen, die Funktion liefert einen Wert zurück!

Viele Grüße,
Markus

Hey mik7777777,

versuchs mal so :

$radius = $hoehe = $was = „“;

function volumen($r,$h) {
$vol=(3.141592*$r*$r*$h)/(3);
return $vol;
}

function oberflaeche($r,$h) {
$ober=(3.141592*$r*$r)+(3.141592*$r*$h);
return $ober;
}

if (isset($_POST[„r“]) && isset($_POST[„h“]) && isset($_POST[„was“])) {

$radius=$_POST[„r“];
$hoehe=$_POST[„h“];
$was=$_POST[„was“];

if ($was ==„V“ || $was == „v“) {

$vol = volumen($radius,$hoehe);
echo „Das Volumen des geraden Kreiskegels beträgt $vol mm3.“;

} else if ($was== „O“ || $was == „o“) {

$ober = oberflaeche($r,$h);
echo „Die Oberfläche des geraden Kreisgekels beträgt $ober mm2.“;
}

} else {
echo „Keine gültige Berechnungsart gewählt.“;
}
?>

Oberfläche und Volumen
des geradem Kreiskegels

Radius [mm]:Höhe [mm]:open_mouth:/V:

Kurze Erklärung:

Du hast die Rückgabewerte aus Deinen beiden Funktionen in die Klammern nach den Funktionsdeklarationen mit eingebracht ‚function oberflaeche($r,$h,$ober)- hier das $ober‘ und hast beim Funktionsaufruf ‚oberflaeche($r,$h,$ober) = $vol;‘ nur zwei statt drei Werte übergeben ($ober war in diesem Fall NULL). Daher die Fehlermeldung. Der dritte Parameter muß in diesem Fall dort nicht eingegeben werden, da Du diesen Wert ja per RETURN zurück bekommen möchtest. Wenn Du das so machen möchtest, dann solltest Du den Variablen bei der Funktionsdeklaration von vornherein einen NULL-Wert geben ‚function oberflaeche($r = NULL,$h = NULL,$ober = NULL)‘. Damit bist Du beim Aufruf der Funkton unabhängig was die Übergabe der Parameter an die Funktion angeht. Das aber nur mal so am Rande.

Ich hoffe, ich konnte Dir helfen.

hi,

seit php5 muß der einleitende php-code
"

Hallo mlk7777777

probier doch mal:

und echo doch am Anfang Deiner Seite die POST-Variablen zur Kontrolle

mfg
IBO