Unknown colum in 'field list'

Radhad

Erfahrenes Mitglied
Hallo zusammen,

ich scheine in nachfolgendem Script einen Fehler zu haben, finde ihn aber absolut nicht. Habe jetzt schon bestimmt 30 min. rumprobiert, aber bin zu keiner Lösung gekommen. Beim Speichern aus dem Forumalr kommt immer folgender Fehler:
Unknown column '<variable>' in 'field list'

Hier mein Quelltext zum speichern der Formulardaten:
PHP:
<?php
	session_start();
	include("connect.php");
	$sql = 'INSERT INTO cup (name, turnierformat, statusid, userid, maxteams) VALUES ('.$_POST["cupname"].','.$_POST["turnierformat"].',0,'.$_SESSION["userid"].','.$_POST["maxteams"].')';
	if(mysql_query($sql) or die(mysql_error()))
	{
		$sql = "SELECT cupid FROM cups WHERE userid = ".$_SESSION["userid"]." AND status = 0";
		$result = mysql_query($sql);
		$data = mysql_fetch_array($result);
		header ("Location: index.php?include=cup&cupid=".$data[0]."");
	}
	else
	{
		echo 'Cup "'.$_POST["cupname"].'" konnte nicht erstellt werden!<br><a href="index.php?include=cupnew">Zurück</a>';
	}
?>
 
Richtig ;) und zusätzlich noch CupID, welche der primary key ist und auf auto_increment gesetzt wurde. Hier nochmal die komplette Struktur von der Tabelle 'cup':

CupID - primary key, auto_increment
Name
Turnierformat - foreign key
StatusID - foreign key
UserID - foreign key
MaxTeams
 
Hallo!

Denke daran dass es einen Unterschied zwischen Gross- und Kleinschreibung gibt. ;)

Gruss Dr Dau
 
Hallo,

dein sql sollte so lauten:

INSERT INTO cup (cupid, name, turnierformat, statusid, userid, maxteams) VALUES (NULL, '.$_POST["cupname"].','.$_POST["turnierformat"].',0,'.$_SESSION["userid"].','.$_POST["maxteams"].')'

Und wie schon geschrieben, Groß- und Kleinschreibung beachten.

Wie heißt deine Relation: Deine Insert läuft auf cup und deine Select-Anfrage auf cups? In welcher Zeile wird der Fehler gemeldet?

Gruß.
 
öhm, nem, eben nicht ;) Bei SQL ist das egal! Dafür mache ich das schon zu lange ;) Ich versteh nur einfach nicht, wo der Fehler herkommt, bzw. was er aussagen soll.

Fallbeispiel:
Im Formular gebe ich für "cupname" z.B. Testcup ein, wähle das Turnierformat "Liga" (value=1) und 8 Teams für "maxteams". Nun klicke ich auf speichern, und die Fehlermeldeung heißt: "Unknown column 'Testcup' in 'field list'.

Vielleicht wird es jetzt deutlicher, wo der fehler sein könnte. Ich auch schon 5 mal die POST-Variablen und deren schreibweise überprüft, alle identisch (wenn du im PHP Code Groß- und Kleinschreibung meintest, dann berücksichtige ich sie dort).

[EDIT]
@Cheops: Das hat keine Auswirkungen, ob ich cupid mit reinnehme oder nicht!
 
Zuletzt bearbeitet:
Also bei mir unterscheidet MySQL schon zwischen Gross- und Kleinschreibung..... egal ob nun mit einem PHP Script oder auf der Konsole.

Versuche es mal so:
PHP:
    $sql = "INSERT INTO `cup` (`name`, `turnierformat`, `statusid`, `userid`, `maxteams`) VALUES ('".mysql_real_escape_string($_POST['cupname'])."', '".mysql_real_escape_string($_POST['turnierformat'])."', '0', '".mysql_real_escape_string($_SESSION['userid'])."', '".mysql_real_escape_string($_POST['maxteams'])."')";
Ansonsten lass Dir mal das Array von $_POST und $_SESSION ausgeben.
 
Hum... kommt folgendes raus anhand des Fallbeispiels:

Testcup
1
1
8
Unknown column 'Test' in 'field list'

Die Daten sind alle richtig. Das Script habe ich von aus meinem Newsscript übernommen, da geht es einwandfrei. Und ich brauch da auch nicht auf Groß- und Kleinschreibung achten :/

[EDIT]
Mit deinem SQL-String hat's nun geklappt. Werde ich mal alle darauf umstellen. Was genau bringt eigentlich "mysql_real_escape_string" ? Steht das auch im Manual? *noch nie gesehen*

Danke nochmals :)
 
Zuletzt bearbeitet:
Mann mann mann :)
Ihr habt beide Recht. Wenn ich Anführungszeichen vor und nach dem Tabellen- und Spaltenname setzte MUSS ich auf die Groß- und Kleinschreibung achten. Wenn ich das nicht mache muss ich auch nicht auf die Groß- und Kleinschreibung achten.

Quelle

Tobee
 
Radhad hat gesagt.:
Was genau bringt eigentlich "mysql_real_escape_string" ? Steht das auch im Manual? *noch nie gesehen*
mysql_real_escape_string() steht auch im PHP-Manual und schützt Dich vor einer SQL-Injektion.

@tobee, ohne die `` bekommt man z.b. auch bei Namen wie z.b. "User-ID" ein Problem, weil dann das "-" als Minuszeichen gewertet wird.
Aber man sollte eh möglichst auf Sonderzeichen verzichten.
Aber genauso gut könnte man ja auch z.b. eine Spalte "UserID" und eine Spalte "userid" haben..... über den Sinn lässt sich natürlich streiten. ;)
Ich habe mir jedenfalls angewöhnt Spaltennamen etc. in `` zu schreiben und Strings in ' '.
In einem String könnten ja auch Leerzeichen und Kommata vorkommen..... dieses würde beim Value zum Chaos führen. ;)
 
Zurück