PHP Teil wird nicht übergeben

Akania

Well-known member
ID: 286505
L
20 April 2006
765
33
Ich bin php am lernen, und versuche was zu bauen. Nur habe ich ein Problem, weil das Alter wird übergeben und beim Gewicht kommt immer eine leere Seite.

Hier der Code von der 2. Seite:

PHP:
<?php

$alter=$_POST["alter"]; 
$gewicht=$_POST["gewicht"]; 
$medikamente=$_POST["medikamente"];

echo"Diese Berechnung gilt für $medikamente<p>";
if ($medikamente=="Paracetamol")
{
if ($alter >0.6 and $alter <0.9)
{
echo "Der Patient mit dem Alter $alter Jahre erhält 125 mg als Einzeldosis und darf maximal 375 mg pro Tag erhalten.";
}
if ($alter >0.9 and $alter <2)
{
echo "Der Patient mit dem Alter $alter Jahre erhält 125 mg als Einzeldosis und darf maximal 500 mg pro Tag erhalten.";
}
if ($alter >2 and $alter <4)
{
echo "Der Patient mit dem Alter $alter Jahre erhält 250 mg als Einzeldosis und darf maximal 750 mg pro Tag erhalten.";
}
if ($alter >4 and $alter <8)
{
echo "Der Patient mit dem Alter $alter Jahre erhält 250 mg als Einzeldosis und darf maximal 1000 mg pro Tag erhalten.";
}
if ($alter >8 and $alter <11)
{
echo "Der Patient mit dem Alter $alter Jahre erhält 500 mg als Einzeldosis und darf maximal 1500 mg pro Tag erhalten.";
}
if ($alter >11 and $alter <12)
{
echo "Der Patient mit dem Alter $alter Jahre erhält 500 mg als Einzeldosis und darf maximal 2000 mg pro Tag erhalten.";
}
if ($alter >12 )
{
echo "Der Patient mit dem Alter $alter Jahre erhält 500 mg bis 1000 mg als Einzeldosis und darf maximal 4000 mg pro Tag erhalten.";
}


if ($gewicht>7 and $gewicht<8)
{
echo "Der Patient mit dem Gewicht $gewicht kg erhält 125 mg als Einzeldosis und darf maximal 375 mg pro Tag erhalten.";
}
if ($gewicht>8 and $gewicht<12)
{
echo "Der Patient mit dem Gewicht $gewicht kg erhält 125 mg als Einzeldosis und darf maximal 500 mg pro Tag erhalten.";
}
if ($gewicht>12 and $gewicht<16)
{
echo "Der Patient mit dem Gewicht $gewicht kg erhält 250 mg als Einzeldosis und darf maximal 750 mg pro Tag erhalten.";
}
if ($gewicht>16 and $gewicht<25)
{
echo "Der Patient mit dem Gewicht $gewicht kg erhält 250 mg als Einzeldosis und darf maximal 1000 mg pro Tag erhalten.";
}
if ($gewicht>25 and $gewicht<32)
{
echo "Der Patient mit dem Gewicht $gewicht kg erhält 500 mg als Einzeldosis und darf maximal 1500 mg pro Tag erhalten.";
}
if ($gewicht>33 and $gewicht<43)
{
echo "Der Patient mit dem Gewicht $gewicht kg erhält 500 mg als Einzeldosis und darf maximal 2000 mg pro Tag erhalten.";
}
if ($gewicht>43 )
{
echo "Der Patient mit dem Gewicht $gewicht kg erhält 500 mg bis 1000 mg als Einzeldosis und darf maximal 4000 mg pro Tag erhalten.";
}
}

?>

Der von der Eingangsseite:

PHP:
<center>

<form action="berechnung.php" method="post"><br>
Bitte suchen Sie sich das Medikament aus, was Sie berechnen möchten, entweder nach Gewicht oder Alter.<p>
    <select name="medikamente">
      <option>Paracetamol</option>
      <option>Novalminsulfon</option>
     </select><p>
  




Gewicht:<br> <input type="Text" name="gewicht"><br>

<b>oder </b><br>
Alter:<br> <input type="Text" name="alter"><br>
<input type="Submit" value="Absenden"><br>
</form>
</center>

Vielleicht kann mir einer den Fehler sagen.
 
das liegt bestimmt an deinen if anweisungen, mach mal else ifs !!

so, dass es eben logisch ist
mit else verbindest du mehrere if-abfragen, so dass pro AbfrageBlock nur eine If-Anweisung in Frage kommt

if ($alter >0.6 and $alter <0.9)
{
echo "Der Patient mit dem Alter $alter Jahre erhält 125 mg als Einzeldosis und darf maximal 375 mg pro Tag erhalten.";
}
else if ($alter >0.9 and $alter <2)
{
echo "Der Patient mit dem Alter $alter Jahre erhält 125 mg als Einzeldosis und darf maximal 500 mg pro Tag erhalten.";
}
else if ...
 
das liegt bestimmt an deinen if anweisungen, mach mal else ifs !!

Das sollte nicht das Problem sein! Könnte aber dennoch Probleme machen.
Was passiert denn wenn das Kind oder die Person genau 8 Jahre alt ist ???

Mach mal folgendes bei der Auswertung:
PHP:
phpinfo();

Dann rufst du die Seite erneut auf übergibst deine Daten dem Forumal und scrollst nach unten. Dort stehen Variablen wie $_POST & $_REQUEST

Kopiere hier mal die $_REQUEST-Variabeln rein...
 
Was meinst du mit "beim Gewicht kommt immer eine leere Seite"? Variablen enthalten normalerweise keine Seiten.

Und das mit den Else-If macht in so fern Sinn, als dass es a) ja reicht wenn eine Bedingung zutrifft, dann muss der Rest ja nicht mehr überprüft werden, und vor allem wird bei dir b) die Gleichheit nicht geprüft (wie schon angemerkt).

Nebenbei wusste ich gar nicht, dass "and" funktioniert, ich nutze immer && bzw. || (oder). Aber so lange das funktioniert wird das wohl nicht der Fehler sein.

Und außerdem bist du nicht "am lernen", sondern du lernst gerade. Nur als Randbemerkung bezüglich des Deutsch :)
 
das habe ich da unten zu stehen

PHP:
PHP_SELF 	/workspace/Mueller/berechnung.php
_REQUEST["medikamente"]	Paracetamol
_REQUEST["gewicht"]	5
_REQUEST["alter"]	no value
_REQUEST["30ebfd0c5b6f07b60edf0892ccb6094d"]	m543oogctgf6a74bhgb60k78b6olhk9q
_POST["medikamente"]	Paracetamol
_POST["gewicht"]	5
_POST["alter"]	no value
_COOKIE["30ebfd0c5b6f07b60edf0892ccb6094d"]	m543oogctgf6a74bhgb60k78b6olhk9q
_SERVER["CONTENT_LENGTH"]	40
_SERVER["CONTENT_TYPE"]	application/x-www-form-urlencoded
_SERVER["DOCUMENT_ROOT"]	/srv/www/pflegeinformatik.org/public_html/
_SERVER["GATEWAY_INTERFACE"]	CGI/1.1
_SERVER["HTTP_ACCEPT"]	text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
_SERVER["HTTP_ACCEPT_CHARSET"]	ISO-8859-1,utf-8;q=0.7,*;q=0.7
_SERVER["HTTP_ACCEPT_ENCODING"]	gzip
_SERVER["HTTP_ACCEPT_LANGUAGE"]	de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
_SERVER["HTTP_CONNECTION"]	keep-alive
_SERVER["HTTP_COOKIE"]	30ebfd0c5b6f07b60edf0892ccb6094d=m543oogctgf6a74bhgb60k78b6olhk9q
_SERVER["HTTP_HOST"]	pflegeinformatik.org
_SERVER["HTTP_KEEP_ALIVE"]	115
_SERVER["HTTP_REFERER"]	https://pflegeinformatik.org/workspace/Mueller/berechnung_1.html
_SERVER["HTTP_USER_AGENT"]	Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2
_SERVER["PATH"]	/bin:/usr/bin
_SERVER["QUERY_STRING"]	no value
_SERVER["REDIRECT_STATUS"]	200
_SERVER["REMOTE_ADDR"]	91.54.118.252
_SERVER["REMOTE_PORT"]	54672
_SERVER["REQUEST_METHOD"]	POST
_SERVER["REQUEST_URI"]	/workspace/Mueller/berechnung.php
_SERVER["SCRIPT_FILENAME"]	/srv/www/pflegeinformatik.org/public_html/workspace/Mueller/berechnung.php
_SERVER["SCRIPT_NAME"]	/workspace/Mueller/berechnung.php
_SERVER["SERVER_ADDR"]	81.169.141.103
_SERVER["SERVER_ADMIN"]	[no address given]
_SERVER["SERVER_NAME"]	pflegeinformatik.org
_SERVER["SERVER_PORT"]	80
_SERVER["SERVER_PROTOCOL"]	HTTP/1.1
_SERVER["SERVER_SIGNATURE"]	<address>Apache/2.2.3 (Linux/SUSE) Server at pflegeinformatik.org Port 80</address>
_SERVER["SERVER_SOFTWARE"]	Apache/2.2.3 (Linux/SUSE)
_SERVER["PHP_SELF"]	/workspace/Mueller/berechnung.php
_SERVER["REQUEST_TIME"]	1269776646
 
Und da wäre das Problem ;).


Gewicht ist bei dir gleich 5. Aber du überprüfst nur ob >7. Dass 5 nicht größer 7 ist sollte logisch sein, also trifft keine deiner Bedingungen zu.
Und wie gesagt, die $gewicht = 8 würde auch einen Fehler provozieren, da du nur <8 und >8, überprüfst. Schließe die 8 einfach in die Bereiche ein (<=8 oder >=8)


Links:
Vergleichoperatoren

Edit: @papenburg: :p, schneller. Und btw., [ noparse ] Tags wirken wunder ;)
 
Edit: Astrodan war schneller ;)
____________________________________
So...

Übergeben wird dein Wert!
Da du aber anfängst und fragst

PHP:
if ($gewicht>7 and $gewicht<8){
   .....
}

Trifft keine der Abfragen zu, denn das Gewicht ist ja kleiner 7...

;)
 
Nebenbei wusste ich gar nicht, dass "and" funktioniert, ich nutze immer && bzw. || (oder). Aber so lange das funktioniert wird das wohl nicht der Fehler sein.
and hat eine andere Priorität wie &&. Wer sich damit auskennt, ok. Wer aber keine Ahnung hat - z.B. grad "am lernen" is -, sollte besser die Finger davon lassen und && verwenden.

Infos:
https://de2.php.net/manual/de/language.operators.precedence.php
https://de2.php.net/manual/de/language.operators.logical.php (Beispiel, was schiefgehen kann, wenn man die beiden verwechselt)
 
und mehrere ifs hintereinander, bei der man weiß, dass nur eine zutrifft sollte man auch vermeiden, kostet nur zeit und überblick
 
und mehrere ifs hintereinander, bei der man weiß, dass nur eine zutrifft sollte man auch vermeiden, kostet nur zeit und überblick

Kommt auf die Schreibweise an. Ich habe zum Beispiel Scripte wo diese Variante sogar besser lesbar ist ;-)

Wenn der Wert Eindeutig ist, könnte man das allerdings auch mit Switch/Case machen...

PHP:
switch($alter){
case 1:
case 2:
case 3:
   echo "Text 1";
   break;
case 4:
   echo "Text 2";
   break;
dafeult:
   echo "Kein Alter angegeben";
   break;
}

So in der Art ;)
 
Danke erstmal, ich teste das morgen, mußte zur Arbeit weg

habe mal doch weiter probiert, geht jetzt

Danke Astrodan
 
Zuletzt bearbeitet: