Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » PHP & MySQL » $_GET Variablen übergeben. Antworten
$_GET Variablen übergeben.

kpu666
Pixelschubser


Beiträge: 9


Hallo zusammen,

versuche mir grad PHP beizubringen.

Lese in einem Script $_GET Variblen aus, die aus einer Form übergeben werden.

Wenn ich mit diesen 2 Variblen rechne, sprich einen Operator im Script einfüge, geht das ganze auch:

$erg=$_GET['zahl1'] * $_GET['zahl2'];


Jetz hab ich in der Form ein Feld hinzugefügt:

<input name="optn" type="text" size="30" maxlength="40">

Das Feld soll die Math. Operation aufnehmen und übergeben.

Habe das Rechner script angepasst:

$erg=$_GET['zahl1'] $_GET['optn'] $_GET['zahl2'];


Wie kann ich den übereden, $_GET['optn'] als Operator zu interpretieren.

Habe mit einem kleinen Script überprüft, ob die GET Variablen übergeben werden.

Sieht gut aus:

array(4) {
["zahl1"]=>
string(5) "30000"
["optn"]=>
string(1) "+"
["zahl2"]=>
string(1) "6"
["rechnen"]=>
string(10) "Ausrechnen"
}

Danke schonma für die Hilfe

---
buh

  Profil   E-Mail   Website   Editieren   Zitieren

kpu666
Pixelschubser


Beiträge: 9


Welche Regeln hab ich denn gebrochen, das mir keiner antowrtet?

gruesse

karna

---
buh

  Profil   E-Mail   Website   Editieren   Zitieren

Lewi
Quasselstrippe


Beiträge: 288


Nanana, immer mit der Ruhe, wir sind ja auch nicht rund um die Uhr hier.
So, wie du dir das vorstellst, funktioniert das leider nicht, da dein Rechen-Operator nicht so einfach aus einer Variable gelesen werden kann. Schau dir aber mal die Funktion "eval()" (http://de.php.net/eval) an, damit solltest du Erfolg haben.

Gruß
Lewi

---
Lewi = ehemals the_doc

  Profil   Website   Editieren   Zitieren

kpu666
Pixelschubser


Beiträge: 9


Hi,

danke für die Antwort.

Werd das ma versuchen und schreib dann ma, wie ichs gemacht hab.

gruesse

Karna

---
buh

  Profil   E-Mail   Website   Editieren   Zitieren

kpu666
Pixelschubser


Beiträge: 9


So klabbet, wenn die GET Variblen aus der Form auch so heissen:

[code
<html>
<head>
<title>Rechnung</title>
</head>
<body>
<?php
$op = $_GET['optn'];
$zahl1 = $_GET['zahl1'];
$zahl2 = $_GET['zahl2'];
$erg=eval("return($zahl1 $op $zahl2);");
echo $zahl1.$op.$zahl2." = ".$erg;
?>
</body>
</html>
[/code]

---
buh

  Profil   E-Mail   Website   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


Klasse und schon kann ich beliebigen PHP-Code über das Script ausführen. Mit eval() muss man extrem vorsichtig sein.

Besser Wäre es, wenn du zum einen die beiden Werte prüfst und eventuell zwangsweise in Zahlen konvertierst und zum anderen den Operator mit einem "switch" abfragst und die Operationen einzeln im Quellcode schreibst. Somit wird eval() überflüssig.


---
Weaverslave

  Profil   Website   Editieren   Zitieren

kpu666
Pixelschubser


Beiträge: 9


hi,

ich hab das eh noch nicht richtig verstanden.

kannste mir die beiden Zeilen nochma erklären?

$erg=eval("return($zahl1 $op $zahl2);");
echo $zahl1.$op.$zahl2." = ".$erg;

Was macht return da? Woher weiss eval, welche Variable ($zahl1 $op $zahl2) als PHP Code/Operator zu interpretieren ist?

echo $zahl1.$op.$zahl2." = ".$erg;

Ist das erst die Rechnung? Und sagt die "$erg=eval("return($zahl1 $op $zahl2);");" -Zeile NUR, das in diesen Feldern ($zahl1 $op $zahl2) mögliche Operatoren versteckt sind?

Ich hatte das mit eval() richtig geschrieben, aber leider nicht verstanden. :o)

Danke schon im Voraus

karna



---
buh

  Profil   E-Mail   Website   Editieren   Zitieren

kpu666
Pixelschubser


Beiträge: 9


hi nochma,

so klappts dann mit den Cases:

<?php
$op = $_GET['optn'];
$zahl1 = $_GET['zahl1'];
$zahl2 = $_GET['zahl2'];
switch ($op) {

case "+":
$erg = $zahl1+$zahl2;
echo $erg;
break;

case "-":
$erg = $zahl1-$zahl2;
echo $erg;
break;

case "*":
$erg = $zahl1*$zahl2;
echo $erg;
break;

case "/":
$erg = $zahl1/$wert2;
echo $erg;
break;
}
?>

Den anderen Mist braucht Ihr nicht mehr zu beantworten:

eval() liest strings als Code und braucht Reihenfolge um zu operieren.

zB +0 1 ist für php keine vernünftige Rechnung und daher wird das verworfen.

Der Operator muss ja dann hier in der Mitte notiert sein.

richtig?

gruese




---
buh

  Profil   E-Mail   Website   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


Besser

---
Weaverslave

  Profil   Website   Editieren   Zitieren
 

Antworten
Nach oben