dedlfix: Script aus Datenbank einbinden

Beitrag lesen

echo $begrüßung;

es geht mir darum Datenbankabfragen ausführbar abzufragen.

Dabei tritt ein Kontextwechsel auf. In der Datenbank stehen nur Werte. Du möchtest das als Code interpretieren, bzw. diesen Wert in eine Code-Umgebung einfügen. Kontextwechsel treten beim Programmieren immer wieder auf. Versuche solche Kontextwechsel bewusst wahrzunehmen.

$id_rabat = $_POST['id_rabat'];

Unnötiges Umkopieren. $_POST['id_rabat'] ist bereits eine Variable, noch eine andere daraus zu machen ist nicht notwendig.

$query = "SELECT operation FROM db_Rabatt WHERE ID = $id_rabat";

Wieder Kontext-Wechsel beachten! Du bringst hier eine Benutzereingabe in einen neuen Kontext, behandelst den Wert aber nicht so wie es der Kontext verlangt. Solange nur Zahlen übergeben werden, stellt das kein Problem dar. Doch schon bei Vertippern kannst du auf die Nase fallen, ganz zu schweigen von absichtlichen Query-Manipulationen.

In deinem Fall kommt noch hinzu, dass es sich um einen Zahlenwert handeln soll. Du kannst das zum einen mit intval() sicherstellen,

$query = "SELECT operation FROM db_Rabatt WHERE ID = " . intval($_POST['id_rabat']);

oder andererseits mit der für alle Werte gültigen Art und Weise erledigen:

$query = sprintf("SELECT operation FROM db_Rabatt WHERE ID = '%s'",
    mysql_real_escape_string($_POST['id_rabat']));

MySQL ist es egal, ob es einen Zahlenwert als String oder als Zahl übergeben bekommt - ein SQL-Statement ist sowieso immer Text, der geparst werden muss - weswegen man auch Zahlenwerte in Stringbegrenzerzeichen setzen kann.

$result = mysql_query($query);
while($row = mysql_fetch_object($result))
$preis  = (50 "$row->operation" * 1.19 )

Überleg doch mal was passiert. Du bekommst von deiner Abfrage einen Text-Wert zurück. Nun möchtest du, dass dieser Text als Code interpretiert wird. PHP ist kein Hellseher. Es kann nicht erraten, dass der Wert in deinem Fall als auszuführender Code angesehen werden soll, in anderen (den meisten) Fällen aber beispielweise mit anderen Werten per Stringverknüpfung verarbeitet werden soll. Du musst also dem PHP beibringen, deinen Textstring als Code zu interpretieren, ihn zu evaluieren.

Allerdings gefallen mir Lösungen mit eval() nicht. eval() hat zu viel Schadenspotenzial, wenn man es nicht gut abgesichert anwendet. Da du nicht weißt, wer deinen in der Datenbank gespeicherten Code alles ändern kann (absichtlich oder aus Versehen), musst du entweder quasi blind darauf vertrauen, oder alles vor der Ausführung prüfen. Dann kannst du auch gleich eine Lösung ohne Code(teile) in der DB implementieren, denn der Prüfungsaufwand ist sicher nicht grad ohne.

Wieviele Möglichkeiten gibt es eigentlich, einen Rabatt einzuräumen?

  • Multiplikation (* 0.9)
  • Addition (+ (-5))
  • noch mehr?

Wie wäre es, wenn du für beide Methoden bzw. für beide Werte jeweils eine Spalte verwendest? Dann kannst du die Formel im PHP-Code fest implementieren und hast nur die beiden Werte, die du als Variable einsetzt.

echo "$verabschiedung $name";