SQL - INSERT INTO - Problem

neopayne

Erfahrenes Mitglied
Hallo,

Frage: Was ist an diesem Code falsch? die Tabelle heisst test und die spalte heisst folder und der wert wird auch in <i>ordner</i> übergeben.

PHP:
$newfol = "INSERT INTO test (folder) VALUES ('$_POST[ordner]')";
 
Hallo,

1.) wenn du ein Array mit nicht numerischen Index ansprichst ($_POST), muß der Index in Hochkommas angegeben werden
PHP:
//falsch
$_POST[ordner]
//richtig
$_POST['ordner']

2.)
PHP:
 $newfol = "INSERT INTO test (folder) VALUES ('$_POST[ordner]')";
Hier wird $_POST[folder] durch die umgebenden " ' " als String behandelt - nicht als Variable. Statt dessen solltest du den gesamten SQL-String an dieser Stelle unterbrechen, die Variable anhängen und anschließend wieder fortführen:
PHP:
// habe auch gleich den Index angepasst ;-)
$newfol = "INSERT INTO test  (folder) VALUES ('".$_POST['ordner']."')";

mfg Bloddy
 
Innerhalb von " " funktioniert in der Regel auch $_POST[ordner], sauberer ist aber auf jeden Fall die letzte Lösung.
Poste doch mal den Code drumherum, nicht nur die Queryzuweisung an eine Variable.
 
sorry bloddy newbie hat so auch nicht funktioniert

Hier mal ein größerer Teil des Codes:
PHP:
if($_POST['action']=="delete")  {
	$del = mysql_query("DELETE FROM test WHERE folder='$_POST[ordner]'");
	rmdir("../gallerys/$_POST[ordner]");
	chmod("../gallerys/$_POST[ordner]", 0777);
	if($del)  {
		echo "<br><br><br><b><font face=Arial size=3><center>Galerie wurde gelöscht</font></b>";
	} else {
		echo "Fehler";
	}
}
 
dein Codeschnippsel hat zwar mit dem zuvor geposteten nicht viel zu tun, aber trotzdem sind auch dort alle von mir aufgezeigten Fehlerquellen enthalten. Hast du mal versucht, meine geposteten Hinweise umzusetzen?

Weiterhin halte ich es sicherheitstechnisch für sehr relevant, vor der blinden Erstellung des per POST übergebenen Ordnernamens, diesen zum Beispiel mittels preg_match auf einen konformen Namen hin zu überprüfen. Weiterhin solltest du im Querry den übergeben String escapen, um SQL-Injections zu vermeiden.

mfg Bloddy
 
ja ich habe deine Vorschläge alle umgesetzt... nur da es nicht funktioniert hat habe ich wieder den ursprünglischen code gepostet.

sicherheitstechnisch muss ich keine Bedenken haben da sich diese Seiten in einem passwortgeschützten Beriech befinden werden.

etwas eigenartig ist das keine Fehlermeldung von MySQL oder von PHP erscheint es kommt die Bestätungsnachricht aber es wird nichts in die Datenbank eingefügt.
 
Also in deinem zuletzt geposteten Code wird garantiert nichts in eine Datenbank eingefügt.. Dafür ist "DELETE FROM" einfach nicht geeignet ;)
 
sry da hab ich den falschen Teil kopiert! :suspekt:

das ist der Richtige:
PHP:
if($_POST['action']=="new")  {
	$newfol = "INSERT INTO test  (folder) VALUES ('".$_POST['ordner']."')"; 
	mkdir("../gallerys/$_POST[newgalerie]");
	chmod("../gallerys/$_POST[newgalerie]", 0777);
	if($newfol){
		echo "<br><br><br><b><font face=Arial size=3><center>Galerie wurde erstellt</font></b>";
	} else {
		echo "<br><br><br><b><center>Fehler</b>";
	}
}
 
Zurück