Registrierungsfunktion: Was mache ich falsch?

gumpo03

Grünschnabel
Ich habe mit meinen leichten kenntnissen, einem tutorial über die einloggfunktion (nicht aber über die registrierung) und ein wenig herumprobierrerei versucht eine registrierungsfunktion für meine webside zu schreiben. Erstmal ein paar Infos:
Code:
Datenbank- Programm: MySql
Name der Datenbank: db985494-loginsystem
Name der Tabelle: Benutzerdaten

So jezt zu den Dateien:

regform.php
PHP:
<?php session_start (); ?> 
<html>  
<head>  
  <title>registrierung</title>  
</head>  

<body> 
<p>Hier könnt ihr euch <u><b>Registrieren:</b></u></p> 
<?php  
if (isset ($_REQUEST["fehler"]))  
{  
  echo "die daten sind ungültig";  
}  
?>  
<form action="registrieren.php" method="post">  
  Nikname: <input type="text" name="name" size="20"><br>  
  Kennwort: <input type="password" name="pwd" size="20"><br>
  Vorname: <input type="text" name="vorname" size="20"<br>
  Nachname: <input type="text" name="nachname" size="20"<br>
  <input type="submit" value="Login">  
</form>  
</body>  
</html>

registrieren.php
PHP:
<?php  
$sql = "SELECT ".  
    "Id, Nickname, Nachname, Vorname ".  
  "FROM ".  
    "benutzerdaten ".  
  "WHERE ".  
    "(Nickname like '".$_REQUEST["name"]."') AND ".  
    "(Kennwort = '".md5 ($_REQUEST["pwd"])."')AND".
    "(Vorname like '".$_REQUEST["vorname"]."') AND ".  
    "(Nachname like '".$_REQUEST["nachname"]."')";
     $benutzer[3]["Nickname"] = ["name"];  
     $benutzer[3]["Kennwort"] = ["pwd"];  
     $benutzer[3]["Nachname"] = ["vorname"];  
     $benutzer[3]["Vorname"] = ["nachname"];  
// Definition der Benutzer

$connectionid  = mysql_connect ("localhost", "***Benutzername***", "***Password***");  
if (!mysql_select_db ("db985494-loginsystem", $connectionid))  
{  
  die ("Keine Verbindung zur Datenbank");  
}  

// Zuerst alle Datensätze löschen um keine Dopplungen zu bekommen.  
mysql_query ("DELETE FROM benutzerdaten");  

// Daten eintragen  
while (list ($key, $value) = each ($benutzer))  
{  
  // SQL-Anweisung erstellen  
  $sql = "INSERT INTO ". 
    "benutzerdaten (Nickname, Kennwort, Nachname, Vorname) ". 
  "VALUES ('".$value["Nickname"]."', '". 
                       md5 ($value[pwd])."', '". 
                       $value["Nachname"]."', '". 
                       $value["Vorname"]."')";  
  mysql_query ($sql);  

  if (mysql_affected_rows ($connectionid) > 0)  s
  {  
    echo "Benutzer erfolgreich angelegt.<br>\n";  
  }  
  else  
  {  
   echo "Fehler beim Anlegen der Benutzer.<br>\n";  
  }  
}  
?>

So das müsste es gewesen sein.
Wenn ich die seite starte und auf "registrieren" klicke kommt folgende Fehlermeldung:
Code:
Parse error: syntax error, unexpected '[' in /data/multiserv/users/437440/projects/985494/www/de/registrieren.php on line 12

Ich hoffe ihr könnt mir helfen...
 
(!)Du solltest unbedingt die Daten vor der Datenbankabfrage escapen!!

Zu deinem Problem:
Ich habe noch nie sowas gesehen: ["name"]
Greift man damit auf die globalen Variablen zu?
 
Zuletzt bearbeitet:
Ich bin ein Blutiger anfänger ;) Ich habe mir 2 tutorials durchgelesen und dann per kopieren, einfügen die befehle so zusammengeschnippselt, wie ich dachte es müsste funktionieren, warscheinlich lag ich da aber falsch... Ich wollte die eingabe aus regform.php als variable speichern und dann in die datenbank eintragen lassen. Ich dachte alles was in [] steht ist eine variable...
 
Auf Variablen greift man per Dollarzeichen zu.
Aber ich wo sind denn deine ganzen Variablen mit [] definiert?

PS: Copy&Paste ist nicht immer die beste Lösung ;)
 
Also ich dachte, wenn jemand was in die Password-Box reischreibt, wird das als "psw" gespeichert, da der name der Box ja "psw" ist. Also habe ich angem´nommen, die variable für das passwordfeld ist "[psw]" (nach deinen tipps "$psw")
 
Die übergebenen Werte und Namen aus dem Formular werden in den Arrays $_GET und $_POST gespeichert, je nach dem wie du das Formular sendest.

Ich habe mal den Anfang etwas korrigiert:
PHP:
$sql = "SELECT ".   
    "Id, Nickname, Nachname, Vorname ".   
  "FROM ".   
    "benutzerdaten ".   
  "WHERE ".   
    "(Nickname like '".mysql_real_escape_string($_POST["name"])."') AND ".   
    "(Kennwort = '".md5 ($_POST["pwd"])."')AND". 
    "(Vorname like '".mysql_real_escape_string($_POST["vorname"])."') AND ".   
    "(Nachname like '".mysql_real_escape_string($_POST["nachname"])."')";
Wozu soll denn die Variable $benutzer da sein?

Außerdem löscht du mit dem Befehl
SQL:
mysql_query ("DELETE FROM benutzerdaten");
alle Datensätze aus der Tabelle! Ich glaube nicht, dass das so sein soll ;)
 
Tach, da ich auch erst paar Jahre PHP-Scripts schreibe, mal ein paar Tips, gerade für die Registrierung:

1. Daten werden an Script gesendet
2. Felder auf gültigkeit prüfen, d.h.:
Felder ausgefüllt? E-Mail Adresse auch wirklich eine? Passwort zu kurz? Falsche Zeichen verwendet (Stichwort: SQL Injektion), Leerzeichen am Anfang oder am Ende löschen, E-Mail Adresse in DB schon vorhanden? Benutzername in DB schon vorhanden? Weitere Eingaben prüfen: Ist die Telefonnummer nur aus Zahlen? usw.!

Also mein Registrierungsscript hat ein paar 100 Zeilen und da ist bis jetzt noch gar nichts falsches in der Datenbank gelandet.

Achja, Lege dir für den Verbindungsaufbau eine eigene PHP Datei an. Zum Beispiel "connection.php" und include sie dann. Auch für Funktionen usw... (Stichwort: Globale Dateien)
 
Ok und wie prüfe ich, wiefiele zeichen die eingabe hat/ob da überhaupt was drinne steht?

Hab mal den code nach euren tipps umgearbeitet:

PHP:
<?php
$sql = "SELECT ".   
    "Id, Nickname, Nachname, Vorname ".   
  "FROM ".   
    "benutzerdaten ".   
  "WHERE ".   
    "(Nickname like '".mysql_real_escape_string($_POST["name"])."') AND ".   
    "(Kennwort = '".md5 ($_POST["pwd"])."')AND". 
    "(Vorname like '".mysql_real_escape_string($_POST["vorname"])."') AND ".   
    "(Nachname like '".mysql_real_escape_string($_POST["nachname"])."')";  

     $benutzer[3]["Nickname"] = ($_POST"name");  
     $benutzer[3]["Kennwort"] = ($_POST"pwd")."');  
     $benutzer[3]["Nachname"] = ($_POST"nachname");  
     $benutzer[3]["Vorname"] = ($_POST"vorname");  
// Definition der Benutzer

$value"name" = ($_POST"name");
$value"pwd" = ($_POST"pwd");
$value"Nachname" = ($_POST"nachname");
$value"Vorname" = ($_POST"vorname");


$connectionid  = mysql_connect ("localhost", "***BENUTZER***", "***PASSWORD***");  
if (!mysql_select_db ("db985494-loginsystem", $connectionid))  
{  
  die ("Keine Verbindung zur Datenbank");  
}   

// Daten eintragen  
while (list ($key, $value) = each ($benutzer))  
{  
  // SQL-Anweisung erstellen  
  $sql = "INSERT INTO ". 
    "benutzerdaten (Nickname, Kennwort, Nachname, Vorname) ". 
  "VALUES ('".$value"name"."', '". 
                       md5 ($value"pwd")."', '". 
                       $value"Nachname"."', '". 
                       $value"Vorname"."')";  
  mysql_query ($sql);  

  if (mysql_affected_rows ($connectionid) > 0)  
  {  
    echo "Benutzer erfolgreich angelegt.<br>\n";  
  }  
  else  
  {  
   echo "Fehler beim Anlegen der Benutzer.<br>\n";  
  }  
}  
?>

aber es geht immer noch nicht...

Der Fehler ist jezt:
Code:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /data/multiserv/users/437440/projects/985494/www/de/registrieren.php on line 12
 
Zuletzt bearbeitet:
Bitte lies die Fehlermeldung, sie besagt, das ein String nicht erwartet ist.
==>Du hast die eckigen Klammern vergessen!

Ok und wie prüfe ich, wiefiele zeichen die eingabe hat/ob da überhaupt was drinne steht?
Einfach eine IF-Bedingung schreiben:
PHP:
if ($_POST['yourvar']=="aa")
{
}
# Du kannst auch empty() benutzen
if (empty($_POST['yourvar']))
{
}
 
Hab mal die Variablen in [] gesetzt:

PHP:
<?php
$sql = "SELECT ".   
    "Id, Nickname, Nachname, Vorname ".   
  "FROM ".   
    "benutzerdaten ".   
  "WHERE ".   
    "(Nickname like '".mysql_real_escape_string($_POST["name"])."') AND ".   
    "(Kennwort = '".md5 ($_POST["pwd"])."')AND". 
    "(Vorname like '".mysql_real_escape_string($_POST["vorname"])."') AND ".   
    "(Nachname like '".mysql_real_escape_string($_POST["nachname"])."')";  

     $benutzer[3]["Nickname"] = ($_POST["name"]);  
     $benutzer[3]["Kennwort"] = ($_POST["pwd"])."');  
     $benutzer[3]["Nachname"] = ($_POST["nachname"]);  
     $benutzer[3]["Vorname"] = ($_POST["vorname"]);  
// Definition der Benutzer

$value["name"] = ($_POST["name"]);
$value["pwd"] = ($_POST["pwd"]);
$value["Nachname"] = ($_POST["nachname"]);
$value["Vorname"] = ($_POST["vorname"]);


$connectionid  = mysql_connect ("localhost", "***USER***", "***PASSWORD***");  
if (!mysql_select_db ("db985494-loginsystem", $connectionid))  
{  
  die ("Keine Verbindung zur Datenbank");  
}   

// Daten eintragen  
while (list ($key, $value) = each ($benutzer))  
{  
  // SQL-Anweisung erstellen  
  $sql = "INSERT INTO ". 
    "benutzerdaten (Nickname, Kennwort, Nachname, Vorname) ". 
  "VALUES ('".$value["name"]."', '". 
                       md5 ($value["pwd"])."', '". 
                       $value["Nachname"]."', '". 
                       $value["Vorname"]."')";  
  mysql_query ($sql);  

  if (mysql_affected_rows ($connectionid) > 0)  
  {  
    echo "Benutzer erfolgreich angelegt.<br>\n";  
  }  
  else  
  {  
   echo "Fehler beim Anlegen der Benutzer.<br>\n";  
  }  
}  
?>

Geht aber immer noch nicht...

Fehlermeldung:
Code:
Parse error: syntax error, unexpected T_STRING in /data/multiserv/users/437440/projects/985494/www/registrieren.php on line 14


Ausserdem hab ich mal noch eine zweite reg. Funktion geschrieben, also völlig neu, geht aber immer noch nicht... Hier der Code:

PHP:
<?php
$name = $_POST["name"];
$pwd = $_POST["pwd"];
$vorname = $_POST["vorname"];
$nachname = $_POST["nachname"];
//Variablen zuweisen

@mysql_connect ("localhost", "***USER***", "***Password***") or die ("verbindung zu MySql Gescheitert");
@mysql_select_db ("db985494-loginsystem") or die ("Datenbankzugriff gescheitert");
@mysql_select_table ("benutzer") or die ("Verbindung zur Tabelle fehlgeschlagen");
//verbindung aufbauen´

{   
  $sql = "INSERT INTO ". 
    "benutzerdaten (Nickname, Kennwort, Nachname, Vorname) ". 
  "VALUES ('".$name."', '". 
                       md5 ($pwd)."', '". 
                       $nachname."', '". 
                       $vorname."')";  
  mysql_query ($sql);  

  if (mysql_affected_rows ($connectionid) > 0)  
  {  
    echo "Benutzer erfolgreich angelegt.<br>\n";  
  }  
  else  
  {  
   echo "Fehler beim Anlegen der Benutzer.<br>\n";  
  }  
}  
?>

Der Fehlercode lautet:
Code:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /data/multiserv/users/437440/projects/985494/www/123test/registrieren.php on line 2
 
Zurück