MySQL INSERT INTO trägt nicht alle Daten aus Formular ein

08/26/2012 14:52 kimuraaa#1
Hallo, ich wollte mir eine kleine Regi basteln.
Dabei stoße ich auf das Problem, dass Username sowie Password eingetragen werden aber die E-Mail nicht. Hier einmal der komplette Code sowie DB:

Das Formular:
PHP Code:
<link rel="stylesheet" type="text/css" href="../style.css" />
<
h3>Registrierung</h3>
<
form action="index.php?page=reg" method="post" id="regist">
<
table width="400" border="0" align="center">
  <
tr>
    <
td align="left"><b>Benutzername:</b></td>
    <
td><input name="user" type="text" size="30" maxlength="30" /></td>
  </
tr>
  <
tr>
    <
td align="left"><b>Passwort:</b></td>
    <
td><input name="pass" type="password" size="30" maxlength="30" /></td>
  </
tr>
  <
tr>
    <
td align="left"><b>E-Mail</b></td>
    <
td><input name="email" type="text" size="30"/></td>
  </
tr>
</
table>
<
input name="submit" type="submit" value="Registrieren" />
</
form
Die MySQL-Tabelle:
PHP Code:
--
-- 
Tabellenstruktur für Tabelle `user`
--

CREATE TABLE IF NOT EXISTS `user` (
  `
idint(11NOT NULL AUTO_INCREMENT,
  `
uservarchar(30COLLATE latin1_german2_ci DEFAULT NULL,
  `
passvarchar(30COLLATE latin1_german2_ci DEFAULT NULL,
  `
emailvarchar(50COLLATE latin1_german2_ci DEFAULT NULL,
  
PRIMARY KEY (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=42 ;

--
-- 
Daten für Tabelle `user`
-- 
Der PHP-Code:

PHP Code:
<?php

$server 
'';
$username '';
$password '';

mysql_connect($server$username $password)
or die(
"Verbindung zur Datenbank konnte nicht hergestellt werden");

mysql_select_db("") or die ("Datenbank konnte nicht ausgewählt werden"); 


$user $_POST['user'];
$pass $_POST['pass'];
$email $_POST['email'];


if(isset(
$_POST['submit'])){
$md5 md5($pass);

mysql_query("INSERT INTO user (user, pass, email) VALUES ('$user', '$md5', '$email') LIMIT 1");


}
?>
Die MySQL-Daten passen natürlich.

Hoffe, da kann mir wer helfen
08/26/2012 15:18 -b4ck#2
Also bei mir kommt
Quote:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 1' at line 1
Ohne LIMIT 1 werden die Daten mit email eingetragen
08/26/2012 15:49 kimuraaa#3
Hm, stimmt nun gehts bei mir auch, hatte vorher nur das Problem, das die Datenbankeinträge doppelt gemacht wurden, danke dir :)
08/26/2012 15:51 -b4ck#4
Gerne :)
08/26/2012 17:49 kimuraaa#5
Um das Thema nochmal aufzugreifen, wie kann ich nun prüfen ob die Felder, user pass email, befüllt sind?

Anhand des bisherigen Scriptes oben...
08/26/2012 17:59 mdna#6
Entweder schon beim eintragen überprüfen ob was drin ist ansonsten ne Fehlermeldung ausgeben.
Beim absenden des Formulars auf Inhalt prüfen (Javascript) oder aber mit PHP wieder ausgeben lassen --> SELECT * FROM user WHERE user='$user' <-- würde jetzt noch mit mysql_fetch_object verarbeiten und dann ausgeben und überprüfen.

MfG, Mdna
08/26/2012 18:10 -b4ck#7
Also per Javascript würde ich es nicht machen.
Du kannst auch per if abfrage prüfen ob das Feld leer ist.
08/26/2012 18:25 mdna#8
Quote:
Originally Posted by -b4ck View Post
Also per Javascript würde ich es nicht machen.
Du kannst auch per if abfrage prüfen ob das Feld leer ist.
Mit Javascript kann man es schon überprüfen bevor es nur in berührung mit PHP kommt, das is deutlich effektiver ;)

Und in welcher Sprache willste die If-Abfrage machen?
08/26/2012 18:29 -b4ck#9
Quote:
Originally Posted by mdna View Post
Mit Javascript kann man es schon überprüfen bevor es nur in berührung mit PHP kommt, das is deutlich effektiver ;)

Und in welcher Sprache willste die If-Abfrage machen?
Ja aber Javascript kann ich einfach aus stellen.
Ganz einfach mit php:rolleyes:
08/26/2012 18:31 DasPrinzip.#10
Du kannst es so abfragen:
PHP Code:
if($_POST["name"] == ""){ 
  echo 
"name ist leer!"
}
else 

 echo 
"name hat den Inhalt \"".$_POST["name"]."\"!"

Oder auch mit der Funktion empty()

PHP Code:
if ( empty ( $d ) )
{
  echo 
'Variable $d ist leer.<br />';

08/26/2012 18:33 mdna#11
Nun warum nich, grundsätzlich würde ich das ganze nochmal mit JScript überprüfen.
Außerdem --> mit ner entsprechenden Option kann man verhindern das die Seite ohne JScript einfach so geht ;D
08/26/2012 20:12 Hiris#12
Quote:
Originally Posted by mdna View Post
Nun warum nich, grundsätzlich würde ich das ganze nochmal mit JScript überprüfen.
Außerdem --> mit ner entsprechenden Option kann man verhindern das die Seite ohne JScript einfach so geht ;D
Nie auf clientseitige überprüfungen verlassen!
08/26/2012 20:22 mdna#13
Ganz verlassen sowieso nicht, aber überprüfen und direkt abfangen wenn da schon ein Feld leer ist, spart Traffic und Serverperformance, da nicht das ganze PHP-Script aufgerufen werden muss sondern nur ein Formular.

MfG, Mdna
08/26/2012 20:34 Synatex#14
Teilweise richtig mdna*.

Letztendlich benutzen wir JavaScript doch nur für die User, damit die Überprüfungen direkt dargestellt werden. Wenn man rein technisch gesehen eine Überprüfung beim Formular vornimmt und dann noch einmal bei PHP hat man unnützen Code in JavaScript.

Was machst du denn, wenn die Leute die Werte faken? Also quasi die Überprüfung einfach überspringen und dann leere Werte übergeben? Ist ja nicht allzuschwer, mit einer kurzen Deaktivierung von JS...

Es sollten alle Daten die einfach kommen noch einmal von PHP überprüft werden (bzw. NodeJS).
08/26/2012 20:50 mdna#15
Um jetzt nicht ne ewige Grundsatzdiskussion über Überprüfung und soweiter anzufangen (oder eher um sie frühzeitig zu stoppen) --> mal wieder back to topic:
Wie die Mehrheit schon gesagt hat solltest du deine Daten BEVOR du sie in die DB schreibst mit PHP überprüfen, siehe dazu Codebeispiel von DasPrinzip

MfG, Mdna