Benutzer in Datenbank registrieren

Derak

Grünschnabel
Ich beschäftige mit erst seit einiger Zeit mit PHP und hab daher auch noch net so viel Ahnung . Mein derzeitiges Problem ist, dass ich es einfach net hinbekomme einen Benutzer in der Datenbank zu registrieren.

mein PHP-code sieht so aus:


<?php
include "connect.php";
echo "<pre>\n";
print_r($_POST);
echo "</pre>\n";
if(!isset($_POST['Name'], $_POST['Passwort'],
$_POST['Email'])) {
echo "<h2>Bitte registrieren Sie sich.</h2>\n";
echo '<form action="registrieren.php" method="post" class="registrieren">
<ol>
<li>
<label for="name">Name</label>
<input type="text" name="Name" id="Name" />
</li>
<li>
<label for="passwort">Passwort</label>
<input type="password" name="Passwort" id="Passwort" />
</li>
<li>
<label for="email">E-Mail</label>
<input type="text" name="Email" id="Email" />
</li>
<li>
<input type="submit" name="submit" value="Speichern" />
<input type="reset" name="submit" value="Zurücksetzen" />
</li>
</ol>
</form>';
}
if(!isset($_POST['Name'], $_POST['Passwort'],
$_POST['Email'])) {
die("Bitte benutzen Sie das Formular für die Registrierung.");
}

if(trim($_POST['Name']) == "") {
die("Bitte geben sie einen Namen ein");
}
if(trim($_POST['Passwort']) == "") {
die("Bitte geben sie einen Titel ein");
}
if(trim($_POST['Email']) == "") {
die("Bitte geben sie einen Text ein");
}
$sql = "INSERT INTO benutzer
(ID, Name, Passwort, Email)
VALUES ('".$_POST['Name']."',
'".$_POST['Passwort']."',
'".$_POST['Email']."',
NOW())";

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

echo "<p>Vielen Dank für ihren Eintrag.</p>\n";

?>


Ich hab ein Formular in der registrierung.php
Die Daten vom Formular werden an die gleiche PHP-Datei geschickt und sind auch im Array vorhanden. Meine Datenbank besitzt eine Tabelle mit 4 Spalten (ID, Name, Passwort, Email).
Das Array wird nun an die Datenbank geschickt aber der Benutzer wird nicht richtig eingetragen. Das heißt der Name wird in die Spalte ID gespeicht, das Passwort in der Spalte Name und die Email in der Spalte Passwort. Es ist also alles um eine Spalte verschoben. Die Spalte ID ist ist definiert als auto_increment und Primärschlüssel aber irgendwie klappt das net mit den richtigen eintragen.....
Weiß jemand warum bzw. hat einen bessern code für mich. Weiß auch net ob der richtig geschrieben ist...
Und noch ein anderes Problem ist aufgetreten. Das Passwort wird nicht mit MD5 verschlüsselt. Gibt es da einen php-code der das macht?
 
will eigentlich nur wissen wie ich es schaffe das man sich registrieren kann und die daten in der datenbank richtig gespeichert werden.
 
Dir fehlen 2 Funktion...
1. Formular ok, daten werden auch via Post versand...
2. Kontrolle ok, das die daten ungleich ""
3. Aufbau des querys... (Beinhaltet einen kleine Fehler)...
Und dann fehlt dir etwas, falls es nicht in der include datei enthalten ist....
Du führst deinen mysql Query aus obwohl du noch keine verbindung aufgebaut hast...
schau mal bei php.net rein und such mal: mysql_connect & mysql_select_db....
Dann kannst du auch via
mysql_query($query); die Datenabspeichern...

copy & past....
PHP:
 $link = mysql_connect('localhost', 'mysql_user',  'mysql_password');
if (!$link) {
    die('Verbindung nicht möglich : ' . mysql_error());
}
// benutze Datenbank foo
$db_selected = mysql_select_db('foo', $link);
if (!$db_selected) {
    die ('Kann foo nicht benutzen : ' . mysql_error());
}


ansonsten Aufbau deines Querys...
INSERT INTO benutzer
(ID, Name, Passwort, Email)
VALUES
('".$_POST['Name']."', '".$_POST['Passwort']."','".$_POST['Email']."',NOW())";

Es sollen in deinem Query
ID => NAME, NAME => Passwort, Email => Email & NOW() verfällt.

Das Feld ID sollte autoimcremt sein (vorlaufende Nr.) Datentyp INT und dein Query sollte so aussehen.

INSERT INTO benutzer
(Name, Passwort, Email, Time)
VALUES
('".$_POST['Name']."', '".$_POST['Passwort']."','".$_POST['Email']."',NOW())


Schau dir dann nochmal aus sicherheitsgründen die funktion mysql_real_escape_string bei php.net an...
 
Zuletzt bearbeitet:
Genau,
für die letzte Query von R00Ki3 benötigt deine Tabelle allerdings noch eine Spalte "Time". Die hast du laut deiner eigenen Aussage ja nicht. Der Sinn der Spaltennamen im INSERT-Statement ist ja, zu definieren, welche folgenden Values in welche Spalten geschrieben werden sollen. Das hast du eben ein bisschen verdreht.

Um das Passwort MD5-gehasht zu speichern musst du das auch im INSERT-Statement definieren:
PHP:
$sql = "INSERT INTO benutzer (Name, Passwort, Email, Time) VALUES
       ('".$_POST['Name']."', MD5('".$_POST['Passwort']."'),'".$_POST['Email']."',NOW())";
Sicherer als MD5() ist allerdings SHA1().
Und md5 und sha1 sind übrigens keine Verschlüsselungen, sondern Hash-Funktionen. Nur so als Anmerkung zu Terminologie. ;)
 
vielen dank für die hilfreichen antworten. werde ich gleich mal ausprobieren....

habs ausprobiert und es kommt die fehlermeldung:

Column count doesn't match value count at row 1
 
Zuletzt bearbeitet:
Was sagt uns das?
"Column count doesn't match value count"
"Die Anzahl der Spalten (column count) stimmt nicht mit der Anzahl der Werte (value count) überein"
PHP:
$sql = "INSERT INTO benutzer (x) VALUES (y)";
Die Anzahl der Werte bei x stimmt also nicht mit der Anzahl der Werte bei y überein!
Der Sinn der Spaltennamen im INSERT-Statement ist ja, zu definieren, welche folgenden Values in welche Spalten geschrieben werden sollen.


Wie sieht denn deine Abfrage aus?
 
also wenn ich das schreibe kommt die fehlermeldung

PHP:
$sql = "INSERT INTO benutzer 
			(ID, Name, Passwort, Email) 
			VALUES
       	('','".$_POST['Name']."',MD5('".$_POST['Passwort']."'),'".$_POST['Email']."',NOW())";

und wenn ich das schreibe auch

PHP:
$sql = "INSERT INTO benutzer 
			(Name, Passwort, Email) 
			VALUES
       				('".$_POST['Name']."', MD5('".$_POST['Passwort']."'),'".$_POST['Email']."',NOW())";

ich weiß ja nicht...vielleicht stelle ich mich ja auch nur zu blöd an. wenn ich die ID spalte in der Datenbank wegnehme, dann geht das aber ich brauche die ID damit die Daten von den Benutzern eindeutig definiert sind.....Vielleicht hat noch jemand ne Idee woran es liegt. Die erste Variante vom PHP-Code hab ich von einer englischen Seite wo steht wie man das Problem mit der Fehlermeldung löst. Aber geht auch net. Die Spalte ID ist als auto_increment, PRIMARY und Dateityp int definiert.
Hier mal der link zur Seite:

http://htmlfixit.com/cgi-tutes/tuto...y_Column_Count_Does_Not_Match_Value_Count.php
 
Alles richtig!
Der einzige Fehler den du machst, ist, dass du ja als letzten Value noch die aktuelle Zeit mit NOW() in eine Spalte schreiben willst. Du hast aber in deiner Tabelle gar keine Spalte um diese Information zu speichern. Oder zumindest gibst du sie im Statement nicht an.

Es muss also heißen:
PHP:
$sql = "INSERT INTO benutzer 
            (Name, Passwort, Email) 
            VALUES
                       ('".$_POST['Name']."', MD5('".$_POST['Passwort']."'),'".$_POST['Email']."')";
Oder, wenn du eine Spalte hast, die die Zeit speichern kann (und diese Spalte Time heißt), dann so:
PHP:
$sql = "INSERT INTO benutzer 
            (Name, Passwort, Email, Time) 
            VALUES
                       ('".$_POST['Name']."', MD5('".$_POST['Passwort']."'),'".$_POST['Email']."',NOW())";
Was du dann vorne mit der ID machst kommt bei deinen beiden Versionen aufs gleiche raus.

Edit: Ach und, SHA1() ist besser als MD5() ;)
 
Zuletzt bearbeitet:
Zurück