Albert: Absichern um es in die Datenbank zu schreiben

Hallo, bis jetzt bin ich ein eifriger Mitleser in diesem Forum. Jetzt habe ich eine Frage. Ich möchte die Daten aus einem Formular in eine Datenbank schreiben.

Diese sollen ja vorher überprüft werden auch Dinge die nicht in die Datenbank sollen.

$datensatz = "INSERT INTO adressen(
	vorname,
	nachname
	) VALUES 
	(
	'".mysqli_real_escape_string($_POST['vorname'])."',
	'".mysqli_real_escape_string($_POST['nachname'])."'
	)";

Das bekomme ich dann:

Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given

Aber ich glaube auch das es nicht der richtige Ansatz ist.

  1. Hey,

    mysqli_real_escape_string()

    Die Funktion braucht als ersten Parameter das Datenbank Objekt. (Siehe Manual) Also etwa mysqli_real_escape_string($db, 'string').

    Aber ich glaube auch das es nicht der richtige Ansatz ist.

    Naja, mit der Erfahrung kommt die Kenntnis. Da könnte man sich dann bevorzugt dieses hier anschauen. Oder etwas zusammengefasst.

    Oder man geht etwas langsamer an die Sache heran und schaut nach Sachen wie sprint_f gekoppelt mit mysqli_real_escape_string(). Oder nach prepare.

    Gruß
    Jo

  2. Tach!

    Ich möchte die Daten aus einem Formular in eine Datenbank schreiben. Diese sollen ja vorher überprüft werden auch Dinge die nicht in die Datenbank sollen.

    Wenn du inhaltliche Dinge benennen und prüfen kannst, dann diese.

    Daten in eine Datenbank zu schreiben, und dafür ein SQL-Statement zu verwenden ist aber völlig unabhängig davon. Die Daten müssen unabhängig von deren Herkunft und Püfung oder Prüfbarkeit auf korrekte Weise in das Statement eingefügt werden. Oder du nimmst alternativ Prepared Statements mit Platzhaltern und separater Datenübergabe, dann existiert das Problem gleich gar nicht.

    $datensatz = "INSERT INTO adressen(
    	vorname,
    	nachname
    	) VALUES 
    	(
    	'".mysqli_real_escape_string($_POST['vorname'])."',
    	'".mysqli_real_escape_string($_POST['nachname'])."'
    	)";
    

    Das bekomme ich dann:

    Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given

    Ja, siehe Handbuch. Die Funktion hätte gern als ersten Parameter die Verbindung übergeben.

    Aber ich glaube auch das es nicht der richtige Ansatz ist.

    Doch, schon. Aber es gibt mit den Prepared Statements einen besseren. Nimm dazu lieber PDO, das ist bedienerfreundlicher als mysqli.

    Siehe http://php.net/manual/en/pdo.prepared-statements.php, Beispiele 1 bis 3. (Die Beispiele 4 bis 6 sind ein anderes Thema.)

    dedlfix.