werte in datenbank eintragen
david
- datenbank
hallo forum,
so will ich eintragen
$query="INSERT INTO kalenderdaten VALUES(NULL,'$Datum','$Uhrzeit','$Beschreibung')";
in meiner mysql datenbank:
-- Datenbank: kalender
kalender
DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci;kalenderdaten
kalenderdaten
(id
int(11) NOT NULL default '0',Datum
date NOT NULL default '0000-00-00',Uhrzeit
int(11) NOT NULL default '0',Beschreibung
varchar(100) collate latin1_general_ci NOT NULL default '',id
)kalenderdaten
Hi,
$query="INSERT INTO kalenderdaten VALUES(NULL,'$Datum','$Uhrzeit','$Beschreibung')";
Zwei Anmerkungen:
Ansonsten: Kriegst du gar nichts eingefüllt oder nur einen Satz? Du hast deine ID nur als NOT NULL default '0' definiert UND als Primary Key. Wenn du jetzt aber NULL als Wert angibst wird die DB (vermute ich) versuchen den Standardwert einzufügen. Ist der aber bereits vorhanden verletzt das das Primary Key-Constraint.
Entweder du gibst also einen eindeutigen Wert an oder du definierst die Spalte aus auto_increment o.ä.
MfG
Rouven
hallo
- Bitte poste mal ein "fertiges" Statement, d.h. mit befüllten Werten
meinst du damit die eingetragenen werte?geht nicht siehe unten
- Du solltest dir angewöhnen auch die beim Insert die Spalten mit anzugeben, also im Stil von INSERT INTO tab (s1, s2) VALUES (v1, v2)
ok
Ansonsten: Kriegst du gar nichts eingefüllt oder nur einen Satz?
es wird nix eingetragen
$query="INSERT INTO kalenderdaten VALUES(NULL,'$Datum','$Uhrzeit','$Beschreibung')";
$insert_ok=@mysql_query($query);
if($insert_ok==false){
echo("Eintrag konnte nicht eingetragen werden");
nur die fehlermeldung kommt zurück
Du hast deine ID nur als NOT NULL default '0' definiert UND als Primary Key.
wollte ihn auch als NULL definieren geht aber nicht(ppMyadmin - ich kann zwar ändern aber dem speichern is es wieder NOT NULL)
in meinem formulat hat der user ja sowieso nicht die möglichkeit eine id zu setzen
vielen dank
Hi,
- Bitte poste mal ein "fertiges" Statement, d.h. mit befüllten Werten
meinst du damit die eingetragenen werte?geht nicht siehe unten
Nein, ich meine das fertige Statement, also gewissermaßen
echo $query;
if($insert_ok==false){
echo("Eintrag konnte nicht eingetragen werden");
Gib mir mal noch mysql_error() mit aus. Oder nimm halt deine Ausgabe von oben und lass sie mal direkt in PHPMyAdmin laufen.
Du hast deine ID nur als NOT NULL default '0' definiert UND als Primary Key.
wollte ihn auch als NULL definieren geht aber nicht(ppMyadmin - ich kann zwar ändern aber dem speichern is es wieder NOT NULL)
Das ist klar, ein Primary Key darf auch nicht NULL werden. Nur du hast dem System nicht gesagt, wo es denn jetzt einen herzaubern soll - Bisher hast du ihr nur gesagt "wenn ich nichts sage, dann nimm 0". Es gibt zwei grundsätzliche Möglichkeiten:
MfG
Rouven
so vielen dank an alle jetzt gehts
stand irgendwie auf der leitung und hab den primary key mit autoincrement gleichgesetzt.
also NULL in der DB heisst wenn der user nix angibt nimm den standart wert!
wichtig autoincrement bei der id(NOT NULL) da sonst fehler weil werte (id) dopppelt.
NOT NULL heißt schrei wenn der user nix eingibt, sonderfall: die db befüllt die spalte selber durch autoincrement.oder?
$query="INSERT INTO kalenderdaten VALUES(NULL,'$Datum','$Uhrzeit','$Beschreibung')";
das script stammt ja von nem lehrer.
warum gibt man hier NULL an? es ist doch eh von der datenbank her geregelt
$insert_ok=@mysql_query($query,$link);
echo mysql_errno($link) . ": " . mysql_error($link). "\n";
--------er sagt dass das argument falsch is--------------
Ich fang mal hiermit an:
$query="INSERT INTO kalenderdaten VALUES(NULL,'$Datum','$Uhrzeit','$Beschreibung')";
warum gibt man hier NULL an? es ist doch eh von der datenbank her geregelt
Wenn man beim INSERT NICHT die Spalten angibt, dann müssen auch für alle Spalten (und in der richtigen Reihenfolge) Werte zugewiesen werden. Deine Tabelle hat vier Spalten, das Statement
INSERT INTO kalenderdaten VALUES ('$Datum', '$Uhrzeit', '$Beschreibung')
hätte der Datenbank Fragezeichen ins Gesicht getrieben: welcher Wert ist denn hier wofür?? Um das verwenden zu können brauchst du eben genau die Spaltennamen...
Wegen der Sache mit dem Primary-Key, da interpretierst du zu viel hinein.
NULL vs. NOT NULL
Jeder Spalte einer Tabelle kann als NULL oder eben als NOT NULL festgelegt werden. Umgangssprachlich ist NOT NULL nichts anderes als eine Pflichtangabe, während man eine NULL-bare Spalte getrost ignorieren kann.
PRIMARY KEY
Durch dieses Flag wird der Datenbank signalisiert, dass die angegebenen Spalte(n) (ja, dürfen auch mehrere sein) zusammen einen eindeutigen Wert in jeder möglichen Befüllung der Tabelle annehmen. Per Definition muss hierbei gelten, dass keiner der Werte NULL sein darf (deswegen setzt PHPMyAdmin dir das auch automatisch).
DEFAULT
Du kannst für jede Spalte einen Default-Wert angeben. Wenn du an die Datenbank rantrittst und bei einem INSERT keinen Wert angibst, wird dieser Wert automatisch eingetragen. Ist z.B. sehr praktisch wenn man einen Zeitstempel "last modified" mitführen möchte. Man setze den Defaultwert auf NOW oder CURRENT TIMESTAMP oder was auch immer die jeweilige Datenbank da gerne nimmt und schon spart man sich das Eintragen per Skriptsprache oder die Angabe beim SQL-Befehl.
MfG
Rouven
yo,
die syntax (ohne angaben von spaltennamen), die du beim INSERT verwendest, setzt vorraus, dass das DBMS alle spaltenwerte in der gleichen reihenfolge mit werten füllen kann. Falls du nicht alle Werte einträgst, dann musst du auch die Spalten, welche gefüllt werden sollen mit angegeben.
die ID spalte kannst du weglassen, falls es sich um eine spalte mit auto-increment hält. Da die spalte id bereits primary key ist, kannst du dir den contraint NOT NULL sparen. per defintiion ist jeder primary key NOT NULL und UNIQUE.
Ilja