SoKoBaN schrieb:
INSERT INTO bedeutet, das ein Datensatz in bestimmte Spalten einer Tabelle geschrieben werden.
Du hast die Datensätze und die Tabelle angegeben aber nicht die Spalten, wo welche Variable landen soll.
Wer hat dir denn so einen Quatsch erzählt / beigebracht?
Wenn eine Tabelle 3 Spalten hat, dann bewirkt
INSERT INTO tabelle VALUES($var1, $var2, $var3)
dass $var1 in die erste, $var2 in die zweite und $var3 in die dritte Spalte der Datebank-Tabelle geschrieben wird. Welche Spalte die erste, zweite oder dritte ist hängt davon ab wie die Tabelle angelegt wurde. Die Spalte die beim "CREATE TABLE" Befehl zuerst angegeben wird ist auch die erste Spalte. In phpMyAdmin sind die Spalten der Tabelle in der Struktur-Ansicht ebenfalls in dieser Reihenfolge angezeigt.
INSERT INTO tabelle (spalte1, spalte2, spalte3) VALUES ($var1, $var2, $var3)
ist entweder hilfreich für Anfänger, vergessliche Leute oder Programmierer, die mit großen Datenbank Tabellen arbeiten. Man sieht dadurch eben im Quellcode direkt welche Spalte die nächste ist. Außerdem kann man mit
INSERT INTO tabelle (spalte1, spalte3, spalte2) VALUES ($var1, $var3, $var2)
die Reihenfolge der Spalten beliebig variieren. Die Reihenfolge der ersten Klammer (mit dem Spaltennamen der Datenbank Tabelle) sollte dann jedoch entsprechend in der zweiten Klammer (mit den Werten) angepasst werden.
SoKoBaN schrieb:
Machs so:
PHP:
$res = mysql_query("INSERT INTO web_regusers (spalten_name_1, spalten_name_2, spalten_name_3) VALUES('$Benutzername','$Passwort','$EMail')");
mysql_query($res) or die ("Unable to insert into database.");
$num = mysql_affected_rows();
if ($num > 0)
{ echo 'all done';}
else
{ echo 'Datensatz wurde nicht eingetragen!'; }
Das ist eine Möglichkeit, die ich persönlich jedoch zu unübersichtlich finde und außerdem frage ich mich warum die Funktion mysql_query() zwei mal aufgerufen werden muss/soll und warum die Funktion mysql_affected_rows() aufgerufen wird. mysql_affected_rows() macht in meinen Augen sinn, wenn ich mit dem SQL Befehl UPDATE Datensätze ändere und wissen möchte wieviele Datensätze insgesamt geändert wurden. Für ein INSERT reicht zur Überprüfung Rückgabewert der Funktion mysql_query() ... Daraus ergibt sich folgender Code, der durch weniger Funktionsaufrufe auch noch schneller ist, was man bei solch kleinen PHP Scripten jedoch nicht merkt:
PHP:
// SQL Befehl in der Variablen $sql_befehl speichern
$sql_befehl = "INSERT INTO web_regusers (spalten_name_1, spalten_name_2, spalten_name_3)
VALUES ('$Benutzername','$Passwort','$EMail')";
// Datenbankzugriff mit dem SQL Befehl aus der Variablen $sql_befehl
// und Speichern des Ergebnisses in der Variablen $res (TRUE/FALSE)
$res = mysql_query($sql_befehl);
// Prüfen, ob der SQL Befehl erfolgreich ausgeführt wurde oder nicht
// und entsprechende Ausgaben machen
if ($res)
{
echo 'all done';
}
else
{
echo 'Datensatz wurde nicht eingetragen!';
}
SoKoBaN schrieb:
Für die Zeit des Probierens solltest du dir auch alle möglichen Fehlermeldungen ausgeben lassen.
An den Anfang der Datei ein error_reporting(E_ALL);
Damit siehst du alle Fehler, Warnungen und Nachrichten von PHP. Erleichtert die Fehlersuche ungemein.
Auch wenn Nachrichten (Notice) nerven, dein Script ist erst sauber, wenn diese nicht mehr auftreten.
Statt: mysql_query($res) or die ("Unable to insert into database."); schreibst du mysql_query($res) or die (mysql_error());
Damit bekommst du den Fehler von MySQL, sofern einer vorliegt.
Dem ist nichts hinzuzufügen
Liebe Grüße
Patrick