Operator im Form bestimmen u. einbinden
Nicole Schönhofer
- php
0 Christian Seiler0 Harry0 Christian Seiler0 Nicole Schönhofer0 Harry
0 Tom
0 Sven Rautenberg
Hallo!!
Mache mir in letzter Zeit Gedanken darüber ob man nicht auch den Operator ( vielleicht stimmt der Ausdruck nicht, ich meine +,-,*,/ ) nicht in einem form vorher bestimmen kann und daraus resultiert dann der im script angewandte operator.
also
z.B
-...form
<input type="text" name="operator" size...>
..
<input type="submit" value="los!">...
script
$erg = $xy ($operator wie *,/ usw.) $zz;
echo "$erg";
geht sowas? wenn ja, fände ich's spitze wenn mir jemand helfen könnte!
danke!
ciao
nicole
Hallo Nicole,
geht sowas?
Nicht direkt. Du kannst aber so etwas machen:
switch ($operator) {
case '+':
$erg = $xy + $zz;
break;
case '-':
$erg = $xy - $zz;
break;
case '*':
$erg = $xy * $zz;
break;
case '/':
$erg = $xy / $zz;
break;
case '%':
$erg = $xy % $zz;
break;
default:
// fehler
break;
}
(Es wären auch eval()-Konstrukte möglich, allerdings halte ich diese für ein zu hohes Sicherheitsrisiko)
Viele Grüße,
Christian
Holladiewaldfee,
(Es wären auch eval()-Konstrukte möglich, allerdings halte ich diese für ein zu hohes Sicherheitsrisiko)
Man könnte es aber schon auf sichere Art und Weise mit eval lösen:
if(strlen($op)==1 && strstr('*+-/%', $op)!==false)
eval('$erg=$bla'.$op.'$blubb');
else
echo 'nixgut!';
Sicher ist eval böse, und sicher ist eval nicht gerade eine schöne Lösung (eval ist nie eine Lösung?!), aber es gibt diese Funktion nunmal, und hier bietet sie sich irgendwie an. Zusammen mit obiger Sicherheitsabfrage sehe ich da kein Problem (bis auf den Stil). Dafür ist die Lösung kompakt und leicht zu erweitern, z.B. um Bitoperatoren oder ähnliches.
Ciao,
Harry
Hallo Harry,
Sicher ist eval böse,
Ja.
und sicher ist eval nicht gerade eine schöne Lösung
Ja.
(eval ist nie eine Lösung?!),
Ja.
Bis hierher kann ich Dir voll und ganz zustimmen. :-)
aber es gibt diese Funktion nunmal,
Es gibt auch register_globals, es gibt auch magic_quotes_gpc.
und hier bietet sie sich irgendwie an.
Nein.
Zusammen mit obiger Sicherheitsabfrage sehe ich da kein Problem (bis auf den Stil).
Ich könnte mit eval() nicht ruhig schlafen...
Viele Grüße,
Christian
kurze zwischenfrage, bin noch ziemlich neu in php, aber das geht doch oder?
if ($a > $b);
->> $e = $a * $b; <<-
echo "$e";
ciao!
Hallo,
if ($a > $b);
->> $e = $a * $b; <<-
echo "$e";
Im Prinzip: Ja.
Aber die Syntax bei IF sieht keine Pfeile vor, dafuer geschweifte Klammern,
und das Semikolon am Schluss der ersten Zeile ist falsch.
if ($a > $b)
{
$e = $a * $b;
echo "$e";
}
http://www.php.net/manual/de/control-structures.php
Oder was wolltest Du wissen?
Ob die Multiplikation richtig geschrieben ist? Ja.
http://www.php.net/manual/de/language.operators.arithmetic.php
Gruesse,
Thomas
Holladiewaldfee,
und hier bietet sie sich irgendwie an.
Nein.
Doch ;)
Aber: Nur weil es sich anbietet, muß man es noch lange nicht einsetzen. Ich würde es wahrscheinlich auch nicht einsetzen, weil ich eval() auch nicht mag. Aber es mag Leute geben, die haben da kein Problem mit. Wenn diese Leute noch zusätzlich die nötige Kompetenz besitzen, um sicher zu sein, daß sie kein Problem damit haben, dann sollte auch wer anders kein Problem damit haben.
Zusammen mit obiger Sicherheitsabfrage sehe ich da kein Problem (bis auf den Stil).
Ich könnte mit eval() nicht ruhig schlafen...
Ich schon. Wenn ich mit Sicherheit weiß, was meine if-Bedingung davor durchlässt und was sie nicht durchlässt.
Ciao,
Harry
ich danke allen für ihre tipps!!
werde mich mit der switch mal näher auseinandersetzen...
ciao!
nicole
Holladiewaldfee,
werde mich mit der switch mal näher auseinandersetzen...
Ja, das ist besser.
Mit der eval-Funktion muß man wirklich aufpassen, vor allem sollte man sich absolut im klaren darüber sein, was man mit dieser Funktion alles anrichten kann und wie man sich dagegen schützt, daß jemand anderes etwas damit anrichtet.
Die schlechten Beispiele hat Sven ja schon verlinkt.
Ciao,
Harry
Hello,
(Es wären auch eval()-Konstrukte möglich, allerdings halte ich diese für ein zu hohes Sicherheitsrisiko)
Man könnte es aber schon auf sichere Art und Weise mit eval lösen:
if(strlen($op)==1 && strstr('*+-/%', $op)!==false)
eval('$erg=$bla'.$op.'$blubb');
else
echo 'nixgut!';
Eval bindet den Code so in das Script ein, als stünde er genau an dieser Stelle, ähnlich wie include(). Man hat aus dem evaluierten Coder heraus daher vollen Zugriff auf alle Variablen und Funktionen des Scriptes. Wenn man in eval eine Funktion einbindet, ist diese nachher für das Script verfügbar. Wenn man mehrere eval() im Script hat, und diese bringen gleichnamige Funktionen mit, kracht es, da PHP ja leider noch keine Scopes für Funktionen kennt.
Um aber das Script vor unberechtigtem Zugriff auf Variablen zu schützen, sollte man eval() in eine Funktion verpacken.
Allerdings bin ich der Meinung, dass eval hier fehl am Platze ist.
Man sollte hier den Algorithmus zur Erzeugung und Auswertung der "polnischen Notation" benutzen. Wenn der den String nicht vollständig auswerten kann, ist er eben fehlerhaft. Wenn er es schafft, kann PHP über Befehlszeile rechnen...
Goggle mal nach "polnische Notation"
Grüße
Tom
Moin!
(Es wären auch eval()-Konstrukte möglich, allerdings halte ich diese für ein zu hohes Sicherheitsrisiko)
Stimme ausdrücklich zu. Es ist schwierig (insbesondere für Anfänger), zu kontrollieren, welche Code-Konstrukte gesendet werden. Mit manipulierten Formularen kann _jeder_ Code gesendet werden,
Und wenn man nicht aufpasst, dann passiert sowas wie in http://forum.de.selfhtml.org/archiv/2003/6/48684/ mit den (noch harmlosen) Folgen wie in http://forum.de.selfhtml.org/archiv/2003/6/48754/#m265902
- Sven Rautenberg