warum kann ich nicht $_POST in einen Sql befehl schreiben?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

also erstens , ein string wird in "..." eingeschlossen , etwas angehängt wird dann mit einem . gemacht

"hallo".$meinevariable."nochwas"

aber bei SQL solltest du jedes $_POST maskieren , sonst kann der client dich angreifen und im schlechtesten fall deine ganze datenbank zerstören .

ausserdem sollte bei SQL ein string , also zeichenkette in '...' gesetzt werden sonst sind es feldnamen , bei zahlen muss man das nicht, das sind dann einfach nur werte .

packt man die regeln zusammen sieht das so aus

$sql = "INSERT INTO User (Vorname,Nachname,Age) VALUES ('".$_POST['vorname']."','".$_POST['nachname']."','".$_POST['age']."');" ;

p.s. ich würde gleich PDO style lernen , dann kannst du die variablen mit platzhaltern im string als array übergeben und das ist dann auch sicher .

$sql = "INSERT INTO User (Vorname,Nachname,Age) VALUES (:vorname,:nachname,:alter);" ;
$daten = ["vorname"=>$_POST['vorname'],
          "nachname"=>$_POST['nachname'],
          "alter"=>$_POST['age']
         ];

und dann entsprechend den SQL befehl um das abzuschicken , siehe anleitung und erklärung https://code.tutsplus.com/de/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059




Hedhhdgtf 
Fragesteller
 08.05.2022, 15:42

Danke es hat funktioniert, jetzt kann ich endlich mal was speichern und abfragen wie zb für eine einkaufsliste. Hatte das nicht hinbekommen mit json oder anderen methoden. Ist nur für unwichtige daten, wenn es wichtig sein soll informiere ich mich nochmal über sql injections

1
TechPech1984  08.05.2022, 16:02
@Hedhhdgtf

ich kann dir auch gerne 2 dateien geben die es komplett vereinfachen und automatisch sicher machen .wenn ja schreib mich an , tauschen wir dann irgendwie aus .

1

Erstmal ist das kein Ausdruck, den PHP versteht:

$sql = "INSERT INTO User (Vorname,Nachname,Age) VALUES ("$_POST['vorname'], $_POST['nachname'], $_POST['age']") ;

Du verlässt nach den Anführungszeichen nach der "VALUES (" die Zeichenkette, um dann mehrere mit Komma getrennte ... ja, was eigentlich zu machen?

Probiere mal

$sql = "INSERT INTO User (Vorname,Nachname,Age) VALUES (".$_POST['vorname'].", ".$_POST['nachname'].", ".$_POST['age'].";");

Das sollte besser klappen.

Zweitens ist das Statement von der Sicherheit her schlecht, da es SQL-Injection ermöglicht.

Woher ich das weiß:Hobby – Hobby seit meiner Jugend
TechPech1984  08.05.2022, 13:56

die hochkommas bei den strings vergessen , so denkt es das es feldnamen sind .

3

Das funktioniert bei Arrays so nicht. Zwar kann man Variablen innerhalb von Double Quotes benutzen. Arrays in dieser Form allerdings nicht, dazu müssten diese in geschweiften Klammern umschlossen sein.

Dazu sind deine Werte vermutlich Strings und müssen von SQL her wieder in Single Quotes umschlossen werden.

Du hättest also z.B. etwas wie:

$sql = "INSERT INTO User (Vorname,Nachname,Age) VALUES ('{$_POST['vorname']}', '{$_POST['nachname']}', {$_POST['age']})";

Nix desto trotz ist sowas sehr anfällig für SQL Injection. Normalerweise nutzt man für sowas prepared Statements und bindet die entsprechenden Variablen an Platzhalter, die man im SQL String hat.

Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012