Ich habe den Fehler gefunden. Der Punkt am Ende. Wobei mir schleierhaft ist, wo der auf einmal herkam, denn wie ihr seht, steht dieser ja hier auch nicht im ersten Post, obwohl ich es einfach nur rauskopiert habe.:(;ugl
[PHP]$sql = "
INSERT INTO entries
(ID,Beverage,Company,Brand,Country,Exchange,Category,Quantum)
VALUES
(‚‘,$beverage,$company,$brand,$country,‚$_POST[Exchange]‘,$category,‚$_POST[Quantum]‘)
".[/PHP]
Warum nimmst du denn übergebene Parameter ungeprüft in die Datenbank?
Ist dir denn nicht bewusst, das jeder diese Daten mit einer Zeile Code einfach löschen kann.
Du solltest nur Parameter übernehmen, die du auf Gültigkeit anhand einer Whitelist geprüft hast.
1. Beispiel für eine Whitelist:
Du erwartest im Formular Zahleneingaben von 1-31 für den Tag des Monats.
Dann nimmst du die Variable und prüfst auf Ziffern mit PHP: ctype_digit - Manual auf Validität. Alles was nicht zutrifft, wird verworfen und als Fehler gewertet.
Danach prüfst du ob der wert innerhalb des Gültigkeitsbereiches liegt. Da kann man dann entsprechend reagieren, zum Beipiel bei Werten grösser als 31 immer 31 nehmen oder einen Hinweis ausgeben für den Benutzer.
2. Beispiel für eine Whitelist:
Du erwartest im Formular eine Eingabe von Getränken, weisst aber nicht welche.
Dann lässt du nur Zeichen aus dem Alphabet zu plus die deutschen Umlaute. weiterhin begrenzt du die Länge.
Alles was nicht zutrifft, wird verworfen und als Fehler gewertet.
Niemals übernimmst du PHP: Superglobals - Manual ungeprüft in dein SQL Statement wie du das hier gemacht hast:
[PHP]VALUES
(‚‘,$beverage,$company,$brand,$country,‚$_POST[Exchange]‘,$category,‚$_POST[Quantum]‘) [/PHP]
$_POST[Exchange] - nimm das raus und ändere es ab in eine normale Variable, die du vorab prüfst
$_POST[Quantum] - das selbe
Empty oder isset?
Du verwendest empty um zu prüfen ob ein übergebener Parameter leer ist.
Wenn du aber eine „0“ erwartest ist das bei empty FALSE.
Du solltest dir angewöhnen isset zu benutzen, da dort nur geprüft wird ob der übergebene Parameter einen Inhalt hat.
„0“ als Eingabe wird also bei isset akzeptiert, bei empty nicht.
Die Anführungsstriche kannst du alle weglassen:
[PHP]if (isset($_POST[Beverage])) {$beverage = NULL;} else {$beverage = $_POST[Beverage];}[/PHP] direkt danach kommt die Prüfung!