PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Duplicate entry '2005' for key 1


Greenhorn
28.11.2005, 17:18:16
Hi Leute, ich brauche mal bitte eure Hilfe.
Wenn ich die Daten von einem Formular in eine SQL Datenbank übertragen will bekomme ich die Fehlermeldung Duplicate entry '2005' for key 1.
Das komische an der Sache ist blos das ich auch ein Feld ID (int, auto Increment) in der Datenbank habe.
Sobald ich einen Datensatz in die Datenbank übertragen will wird die ID des Datensatzes auf 2005 gesetzt, will ich nun einen zweiten Datensatz hochladen wird diesem auch wieder die 2005 gegeben, drumm die Fehlermeldung vermute ich mal.
Aber warum bekommt das Feld ID den Wert 2005 zugewiesen und beginnt nicht ab eins zu zählen???
Das nächste was ich nicht verstehe: Ich habe mein script nach der Anleitung von selfphp geschrieben, allerdings wird der Datensatz der aus einem Formular in die Datenbank übertragen werden soll nicht in die Datenbank übertragen auser in dem Feld ID stehen keine Inhalte drin ( Name, Nachname, Nickname, Passwort, Email)
K.a. woran das liegt könnt ihr mir da helfen???


PS.: Wie es mein Nick schon sagt bin ich noch absolutes Greenhorn in SQL und php.

vt1816
28.11.2005, 17:30:09
Wie sieht Dein Code dazu aus ?

Greenhorn
28.11.2005, 17:31:59
<?php

if (""== $_POST['first_name'] OR $_POST['last_name']=="") {
echo "Please check your first- and last name!";
}

if (""== $_POST['nickname']) {
echo "Please insert nickname!";
}

if (""== $_POST['password']) {
die("Please insert password!");
}

if ($_POST['password']!=$_POST['password_again']) {
die ("Please repeat the right password!");
}


if (""==$_POST['email']) {
echo "Please insert E-mail adress";
}


if(isset($_post['first_name'], $_post['last_name'],
$_post ['nickname'], $_post['password'],
$_post ['email'])) {
die ("Bitte benutze das Formular aus der Anmeldung\n");
}

$link = mysql_connect('localhost', 'website_wow', '')
or die ('geht nicht');

mysql_select_db('wow',$link)
or die('geht a net');

$sql ="INSERT INTO passwords
(firstname, lastname, nickname, password, email, ID)
VALUES
('".addslashes(htmlspecialchars($_post['first_name']))."',
'".addslashes(htmlspecialchars($_post['last_name']))."',
'".addslashes(htmlspecialchars($_post['nickname']))."',
'".addslashes(htmlspecialchars($_post['password']))."',
'".addslashes(htmlspecialchars($_post['email']))."',
NOW())";

mysql_query($sql, $link) OR die(mysql_error());

echo "<p>es funktioniert</p>\n";

?>

Damir
28.11.2005, 19:03:01
Dein Fehler liegt hier:

NOW())";

Du versuchst ein Datum in ein Integer mit autoincrement einzufügene - die 2005 die du immer bekommst ist das aktuelle Jahr!!!!!!

Lass mal das now() weg....

Bye DAmir

Greenhorn
29.11.2005, 10:17:10
Dann bekomm ich blos ne Fehlermeldung.

Parse error: parse error, unexpected '>' in C:\Dokumente und Einstellungen\Marcel\Eigene Dateien\Website WoW\Website\anmeldung.PHP on line 49.

Auf den Trichter mit dem Datum bin ich auch schon gekommen aber wenn ich ID auf TinyInt setze kommt Duplicate entry '127' for key 1.
127 Währe ja die letzte Zahl bei TinyInt.
2005 ist doch aber nicht die letzte Zahl bei INT.
Auch wenn ich ID auf smallInt setze kommt die 2005er Meldung.

vt1816
29.11.2005, 11:10:54
Dann bekomm ich blos ne Fehlermeldung.

Parse error: parse error, unexpected '>' in C:\Dokumente und Einstellungen\Marcel\Eigene Dateien\Website WoW\Website\anmeldung.PHP on line 49.

Auf den Trichter mit dem Datum bin ich auch schon gekommen aber wenn ich ID auf TinyInt setze kommt Duplicate entry '127' for key 1.
127 Währe ja die letzte Zahl bei TinyInt.
2005 ist doch aber nicht die letzte Zahl bei INT.
Auch wenn ich ID auf smallInt setze kommt die 2005er Meldung.
$sql ="INSERT INTO passwords (firstname, lastname, nickname, password, email)
VALUES
('".addslashes(htmlspecialchars($_post['first_name']))."',
'".addslashes(htmlspecialchars($_post['last_name']))."',
'".addslashes(htmlspecialchars($_post['nickname']))."',
'".addslashes(htmlspecialchars($_post['password']))."',
'".addslashes(htmlspecialchars($_post['email']))."')";
sollte es bringen.

xabbuh
29.11.2005, 11:34:48
Auf den Trichter mit dem Datum bin ich auch schon gekommen aber wenn ich ID auf TinyInt setze kommt Duplicate entry '127' for key 1.
Warum setzt du die Spalte ID denn auf TINYINT? SMALLINT sollte schon sein, wenn du nicht auf maximale 256 Enträge beschränkt sein willst.

2005 ist doch aber nicht die letzte Zahl bei INT.
Das nicht, aber wenn schon ein Eintrag mit 2005 existiert, dann bekommst du natürlich ein Problem. Und das wird ziemlich häufig der Fall sein, da du ja nicht nur einen Eintrag pro Jahr vornimmst.

Greenhorn
29.11.2005, 13:54:55
Warum setzt du die Spalte ID denn auf TINYINT? SMALLINT sollte schon sein, wenn du nicht auf maximale 256 Enträge beschränkt sein willst.

Ich hatte tinyInt blos mal so zum Probieren gesetzt, nicht dauerhaft.


@McManne: Ich habe das Script jetzt so abgeändert aber das Problem besteht immer noch nur jetzt Duplicate entry '1' for key 1. (Also wenn ich nen zweiten Datensatz hinzufügen will)
Bei Autoincrement müsste er doch aber eigentlich hochzählen oder nicht???

Damir
29.11.2005, 14:31:56
Hi,

poste noch mal deinen Code und am besten noch die Struktur deiner Tabelle - dann finden wir schnell den Fehler;-))

Bye Damir

Greenhorn
29.11.2005, 15:12:38
Hab im Anhang einen Screenshot der Tabellenstruktur.


Hier mein script:

<?php

if (""== $_POST['first_name'] OR $_POST['last_name']=="") {
echo "Please check your first- and last name!";
}

if (""== $_POST['nickname']) {
echo "Please insert nickname!";
}

if (""== $_POST['password']) {
die("Please insert password!");
}

if ($_POST['password']!=$_POST['password_again']) {
die ("Please repeat the right password!");
}


if (""==$_POST['email']) {
echo "Please insert E-mail adress";
}


if(isset($_post['first_name'], $_post['last_name'],
$_post ['nickname'], $_post['password'],
$_post ['email'])) {
die ("Bitte benutze das Formular aus der Anmeldung\n");
}

$link = mysql_connect('localhost', 'website_wow', '')
or die ('geht nicht');

mysql_select_db('wow',$link)
or die('geht a net');

$sql ="INSERT INTO passwords
(firstname, lastname, nickname, password, email)
VALUES
('".addslashes(htmlspecialchars($_post['first_name']))."',
'".addslashes(htmlspecialchars($_post['last_name']))."',
'".addslashes(htmlspecialchars($_post['nickname']))."',
'".addslashes(htmlspecialchars($_post['password']))."',
'".addslashes(htmlspecialchars($_post['email']))."')";


mysql_query($sql, $link) OR die(mysql_error());

echo "<p>es funktioniert</p>\n";

?>

Damir
29.11.2005, 15:26:34
Hi,

du hast den auto increment nicht gesetzt!!!!!!

Schau dir mal die Grafik unter ID an - da steht unter Extras nichts!!!!!!

Also musst du noch nachtraeglich den Wert setzen.

Bye Damir

Greenhorn
29.11.2005, 16:11:16
Ja iss richtig muss ich beim rumprobieren vergessen haben wieder zu setzten.
Ändert aberauch nicht viel jetzt kommt halt Duplicate entry '0' for key 1.
Der zählt einfach nicht weiter, ich verstehe nicht warum.

Damir
29.11.2005, 16:49:06
Hi,

loesch doch einfach mal die Tabelle und lege sie neu an - bei ID einen autoincrement - NOT NULL und bei Standard einfach nichts hinein schreiben.

Vielleicht hilft es!!!!!

Bye Damir

Greenhorn
30.11.2005, 11:36:39
Jo danke das neu machen hats gebracht, autoincrement duntzt jetzt.
Nur meinen Datensatz tut er nicht übernehmen. Die Felder in meiner Tabelle bleiben alle leer,könnt ihr mir da bitte noch mal helfen???

Opendix
30.11.2005, 11:59:42
leer? also ein Datensatz wird eingetragen und die Felder sind leer?

dann wirds (so nehm ich an) wohl an deinem formular liegen... hast du als method aus post angegeben? stimmen die namen der Felder mit denen in $_POST[] überein?

Greenhorn
30.11.2005, 12:15:25
Ja das stimmt so weit alles, ich habe echt keine Ahnung waoran das liegt.

vt1816
30.11.2005, 13:06:54
mysql_select_db('wow',$link) or die('geht a net');

$sql ="INSERT INTO passwords (firstname, lastname, nickname, password, email)
VALUES
('".addslashes(htmlspecialchars($_post['first_name']))."',
'".addslashes(htmlspecialchars($_post['last_name']))."',
'".addslashes(htmlspecialchars($_post['nickname']))."',
'".addslashes(htmlspecialchars($_post['password']))."',
'".addslashes(htmlspecialchars($_post['email']))."')";
?> Füge zwischen den beiden o.g. Statments mal 'ne Ausgabe der Feldinhalte ein:

echo addslashes(htmlspecialchars($_POST['first_name'] ."\n";
echo addslashes(htmlspecialchars($_POST['last_name'])) ."\n";
echo addslashes(htmlspecialchars($_POST['nickname'])) ."\n";
echo addslashes(htmlspecialchars($_POST['password'])) ."\n";
echo addslashes(htmlspecialchars($_POST['email'])) ."\n";
Sind die Inhalte korrekt?

Greenhorn
30.11.2005, 13:32:03
Nee leider immer noch nicht die Felder bleiben nach wie vor leer, in der DB wird als einziges das Feld ID ausgefüllt aber das ist ja auch mit autoincrement gesetzt.

Greenhorn
30.11.2005, 13:35:09
Ja hat einen Mom. gedauert bis ich es begriffen habe :-).
Ja die Inhalte sind korrekt.
Die Db aber nach wie vor leer.

vt1816
30.11.2005, 14:21:26
Ja hat einen Mom. gedauert bis ich es begriffen habe :-).
Ja die Inhalte sind korrekt.
Die Db aber nach wie vor leer.
Ändere bitte $_post in $_POST an allen Stellen.

Greenhorn
30.11.2005, 14:32:35
Hey Klasse das wars, thx.

Damir
30.11.2005, 14:35:58
Das war ja ne schwere Geburt ;-))

Aber es hat Spass gemacht und geholfen hat es auch....

Bye Damir

Opendix
30.11.2005, 14:36:56
tz... und ich dachte immer gross-kleinschreibung sei php egal... scheinbar doch nicht immer :)

Greenhorn
30.11.2005, 14:42:04
Dacht ich eigentlich auch aberna ja so haben wir wensn alle was gelernt. :-)

Thx @ all.

Damir
30.11.2005, 16:30:26
Hi,

egal ist es nicht - ist auch gut so!!!!!

Leider sieht man manchmal vor lauter Bäume den Wald nicht - naja....

Bye Damir