Problem mit PHP zu MySql

Hilmy

Mitglied
Hallo Leute

ich habe ein grösseres Problem damit, Daten aus einem Formular in meine MySql Datenbank zu schreiben.

Nach stundenlangem Versuchen habe ich es endlich geschafft, das mein script überhaupt was in meine Datenbank schreibt, leider schreibt es nur überhaupt nich was und wo und wie es sollte :confused:.

Das script sollte eigentlich neue Benutzer für mein Loginsystem anlegen, schafft dies aber leider nicht.

Ich habe bereits einen Benutzer, den ich direkt über MySql angelegt habe. Mei script schaft es einen neuen anzulegen, jedoch nur, wenn noch kein zweiter existiert. Dann heist es, Duplicate entry '' for key 3.

Falls noch kein zweiter existiert, beginnt es zwar ne neue linie in der tagenbank, schreibt nur leider das Passwort in das feld für den Benutzernamen, lässt dass Passwortfeld frei und schreibt mir die Mailadresse in das Feld für die SessionID:mad:.

Ich Post hier mal den code:
PHP:
<form method="post" action="newuser433.php">
        <label>Benutzername:</label><BR><input name="username" type="text"><p>
        <label>Passwort: </label><BR><input name="userpass" type="password" <?php;//id="userpass"><p>
        ?>
        <label>E-Mail: </label><BR><input name="usermail" type="text"><p>
        
        <input name="Eintragen" type="submit" id="login" value="Einloggen">
<p>
<?php;
print_r ($_POST);
echo $_POST[username];

$con= mysql_connect('localhost','fooname','foopass') or die(mysql_error());
     mysql_select_db('web176-angelokip',$con) or die(mysql_error());
     
$sql = INSERT INTO users VALUES ("$_POST[username]","$_POST[userpass]","NULL","$_POST[usermail]");
      
        
mysql_query($sql) OR die(mysql_error());        

echo $_POST[username];

mysql_close($con);

?>

Irgendwie funktioniert der Arrey $_POST[username] nicht richtig. $_POST lässt sich zwar mit PRINT_R komplet ausgeben und $_POST[username] auch mit echo, irgendwie wird $_POST[username] aber im script nicht richtig verarbeitet. Die anderen Teile von $_POST aber schon:confused:.

Ich wäre echt froh, wenn mir jemand mit diesem Problem helfen könnte.
Danke

Gruss Hilmy
 
Hallo @Hilmy

Die Art wie du die Variablen definierst ist wirklich sehr sehr ungünstig, wenn nicht sogar falsch.
Ein String muss innerhalb von " bzw. ' stehen.

Wenn du SQL definierst, muss es so geschehen:
PHP:
$sql = "INSERT INTO users 
           (username, userpass, whatever, usermail)
              VALUES
           ('". $_POST['username'] ."','". $_POST['userpass'] ."',NULL,'". $_POST['usermail'] ."'");

Also der String wird von "-Anfang bis "-Ende definiert.

Bei Insert empfielt es sich (um Fehler zu beheben und bei Änderungen der Datenbankstruktur keine allzugroßen probleme zu bekommen) bevor man die values einfügt, die Felder zu definieren.
In der Reihenfolge in dem dann die Values eingefügt werden.

Auf Arrayelemente, bei denen die Keys keine Zahlen sind, sollten auch mit ' bzw. " eingeklammert werden, damit der Kompiler weiß, dass es sich um einen String handelt.
also: $_POST['username']



Und ausserdem, denke ich wäre es gar nicht schlecht, wenn ein Feld userid mit primärkey auch existieren würde, da du dir mit Löschen und ähnlichem leichter tust ;)

Versuchs doch bitte mal

grüße SimonErich
 
Hallo simon

vielen dank für deine Hilfe.
Leider funtioniert es immer noch nicht. Hab jetzt einen pars error:
Parse error: syntax error, unexpected ')' in /home/sites/rauchefrei.ch/public_html/newuser4331.php on line 52

line 52 ist:
PHP:
('". $_POST['username'] ."','". $_POST['userpass'] ."',NULL,'". $_POST['usermail'] ."'");

Greetz Hilmy
 
Achso entschuldigung :)
Bin es ja so gewöhnt das query direkt in die Funktion zu schreiben und nicht zuerst in einen String, deshalb hab ich die geschlossene Klammer ausserhalb des Strings (zur Beendigung der Funktion).

So heißt es richtig:
PHP:
$sql = "INSERT INTO users 
           (username, userpass, whatever, usermail)
              VALUES
           ('". $_POST['username'] ."','". $_POST['userpass'] ."',NULL,'". $_POST['usermail'] ."')";
 
Vielen dank.
Das skript schreibt jetzt in meine Datenbank.:)
Hat immer noch ein par Probleme aber wenigstens schreibts jetzt rein.
das PW wird nicht alls MD5 gespeichert und in der darstellung der seite giebts noch ein par probleme aber darum muss ich mich wohl morgen kümmern. Sollte mal dringend pennen gehn. Muss morgen wieder früh raus.

Danke nochmals.

Gruss Hilmy
 
Hast du das Passwort in ein md5 umgewandelt ?
Das tut es nicht von selbst, denn woher sollte das Script denn wissen was ein PW ist ;)

md5 (Link)
heißt das Stichwort bzw. die Seite ;)

Grüße Simon
 
Hallo

Ich dachte eigentlich, dass ich meine datenbank so eingestellt habe, dass es das feld UserPass in einen MD5 umgewandelt wird. Offenbar funktioniert dies nicht so ganz.
Ist dies überhaupt möglich, oder muss ich dies bei jeder eingabe neu einstellen?
Und wie könnte ich dies in mein script einbauen?
Gruss Hilmy
 
Hallo @Hilmy

Du musst es bei jedem Insert bzw. Update automatisch zuerst in ein md5 verwandeln.
Ich hab dir den Link für die Funktion im post darüber geschickt.
Einfach die Funktion auf eine Variable anwenden:

PHP:
$userpass = md5($userpass);

macht daraus ein md5 string

Grüße Simon
 
Hallo Simon

viel dank, jetzt funktionierts. Entlich kann ich korekt neue user erstellen:).

Ein kleines problem hab ich allerding noch. ich habe allerdings keine ahnung, ob das hierher gehört, oder obs ein html problem ist.
Wen ich mein file öffne hat es darstellungs probleme. Ich hab auf meiner seite 4 tables. top mit grafik, links mit links, rechts mit main content und unten mit einem designed for firefox.
wenn ich mein file lade, wird nur der main content, allso das script für die datenbank, angezeigt. Wenn ich daten abgesendet habe und das file neu geladen wird, werden alle tables angezeigt:confused:.

Falls dies nicht hier hin passt, kann ichs auch gerne wo anders posten.

Gruss Hilmy
 
Kann mir das grad gar nicht vorstellen tut mir leid :D
Rufst du beim ersten Seitenaufruf die ganze Datei auf oder nur das Script ;) ?

Zeig mal bisschen mehr Code bitte :)
 
Zurück