Geburtstag richtig in die SQL Datenbank und auf dem Formular.

Thomas S

Grünschnabel
Hallo tutorials User,

leider komme ich derzeit nicht weiter mit meinem Login System :(.
Ich möchte gerne das das Formular die Möglichkeit bietet sein Geburtstag angeben zu können. Und das dies dann in die SQL Datenbank übernommen wird. Als Anfänger bin ich damit noch überfordert. Vielleicht könnt ihr mir Helfen?

SQL:
Code:
<?php
    error_reporting(E_ALL);
    include("mysql.php");
echo "<h1>Setup</h1>";

$sql = "DROP TABLE IF EXISTS USER";
@mysql_query($sql);
$sql = 'CREATE TABLE `User` ('
        . ' `ID` INT AUTO_INCREMENT NOT NULL, '
        . ' `Autologin` VARCHAR(32) NULL, '
        . ' `IP` VARCHAR(15) NULL, '
        . ' `SessionID` VARCHAR(32) NULL, '
        . ' `Nickname` VARCHAR(30) NOT NULL, '
        . ' `Passwort` VARCHAR(32) NOT NULL, '
        . ' `Email` VARCHAR(70) NOT NULL, '
        . ' `Show_Email` BOOL NULL, '
        . ' `Homepage` VARCHAR(70) NOT NULL, '
        . ' `Registrierungsdatum` DATE NULL, '
        . ' `Wohnort` VARCHAR(70) NOT NULL, '
        . ' `ICQ` VARCHAR(20) NOT NULL, '
        . ' `Bandname` VARCHAR(70) NOT NULL, '
        . ' `Geschlecht` VARCHAR(70) NOT NULL, '
        . ' `Geburtsdatum` VARCHAR(70) NOT NULL, '
        . ' `Avatar` VARCHAR(100) NOT NULL, '
        . ' `Letzter_Login` INT NOT NULL DEFAULT \'0\', '
        . ' `Letzte_Aktion` INT NOT NULL DEFAULT \'0\','
        . ' PRIMARY KEY (`ID`),'
        . ' UNIQUE (`Nickname`, `Email`)'
        . ' )';
if(mysql_query($sql))
         echo "<p>Tabelle 'User' erfolgreich erstellt</p>";
else {
         echo "<p>Tabelle 'User' konnte nicht erstellt werden.</p>";
         echo "<h2>Query</h2>\n";
         echo "<pre>".$sql."</pre>\n";
         echo "<h2>Fehlermeldung</h2>";
         echo "<p>".mysql_error()."</p>";
         die();
}

$sql = "DROP TABLE IF EXISTS User_Rechte";
@mysql_query($sql);
$sql = 'CREATE TABLE `User_Rechte` ('
        . ' `ID` INT AUTO_INCREMENT NOT NULL, '
        . ' `UserID` INT NOT NULL, '
        . ' `Recht` VARCHAR(100) NOT NULL, '
        . ' PRIMARY KEY (`ID`)'
        . ' )';

if(mysql_query($sql))
         echo "<p>Tabelle 'User_Rechte' erfolgreich erstellt</p>";
else {
         echo "<p>Tabelle 'User_Rechte' konnte nicht erstellt werden.</p>";
         echo "<h2>Query</h2>\n";
         echo "<pre>".$sql."</pre>\n";
         echo "<h2>Fehlermeldung</h2>";
         echo "<p>".mysql_error()."</p>";
         die();
}

    $sql = "INSERT INTO
                        User
                        (Nickname,
                         Email,
                         Show_Email,
                         Passwort,
                         Registrierungsdatum
                        )
            VALUES
                        ('',
                         'test@test.de',
                         '1',
                         '".md5(*****)."',
                         CURDATE()
                        )
           ";
if(mysql_query($sql))
         echo "<p>User ***** mit Passwort ***** erfolgreich erstellt</p>";
else {
         echo "<p>User ***** konnte nicht erstellt werden.</p>";
         echo "<h2>Query</h2>\n";
         echo "<pre>".$sql."</pre>\n";
         echo "<h2>Fehlermeldung</h2>";
         echo "<p>".mysql_error()."</p>";
         die();
}

    $sql = "SELECT
                        LAST_INSERT_ID()
           ";
    $result = mysql_query($sql);
    $ID = mysql_result($result,0);

    $sql = "INSERT INTO
                        User_Rechte
                        (UserID,
                         Recht
                        )
            VALUES
                        ('".$ID."',
                         *****
                        )
           ";
if(mysql_query($sql))
         echo "<p>Recht ***** erfolgreich zu User ***** hinzugefügt</p>";
else {
         echo "<p>Recht ***** konnte nicht zu User ***** zugeordnet werden</p>";
         echo "<h2>Query</h2>\n";
         echo "<pre>".$sql."</pre>\n";
         echo "<h2>Fehlermeldung</h2>";
         echo "<p>".mysql_error()."</p>";
         die();
}

    $sql = "INSERT INTO
                        User_Rechte
                        (UserID,
                         Recht
                        )
            VALUES
                        ('".$ID."',
                         'User *****'
                        )
           ";
if(mysql_query($sql))
         echo "<p>Recht 'User *****' erfolgreich zu User ***** hinzugefügt</p>";
else {
         echo "<p>Recht 'User *****' konnte nicht zu User ***** zugeordnet werden</p>";
         echo "<h2>Query</h2>\n";
         echo "<pre>".$sql."</pre>\n";
         echo "<h2>Fehlermeldung</h2>";
         echo "<p>".mysql_error()."</p>";
         die();
}

if(!file_exists("avatare")){
         if(mkdir("avatare"))
                 echo "<p>Ordner 'avatare' erfolgreich erstellt</p>";
         else {
                 echo "<p>Ordner 'avatare' konnte nicht erstellt werden</p>";
                 die();
         }
}

echo "<h2>Setup erfolgreich beendet!</h2>";

echo "<p>Zurück zur <a href=\"index.php\">Startseite</a></p>";

?>

und mein Formular:
PHP:
 <?php
    error_reporting(E_ALL);
    include("mysql.php");

    session_start();

    if(isset($_POST['submit']) AND $_POST['submit']=='Registrieren'){
        // Fehlerarray anlegen
        $errors = array();
        // Prüfen, ob alle Formularfelder vorhanden sind
        if(!isset($_POST['Nickname'],
                  $_POST['Passwort'],
                  $_POST['Passwortwiederholung'],
                  $_POST['Email'],
                  $_POST['Show_Email'],
                  $_POST['Homepage'],
                  $_POST['Wohnort'],
                  $_POST['ICQ'],
                  $_POST['Bandname'],
                  $_POST['Geschlecht'],
                  $_POST['Geburtsdatum']))
            // Ein Element im Fehlerarray hinzufügen
            $errors = "Bitte benutzen Sie das Formular aus dem Registrierungsbereich";
        else{
            // Prüfung der einzelnen obligatorischen Felder
            // Alle Nicknames und Emailadressen zum Vergleich aus der Datenbank holen
            $nicknames = array();
            $emails = array();
            $sql = "SELECT
                             Nickname,
                             Email
                     FROM
                             User
                    ";
            $result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
            while($row = mysql_fetch_assoc($result)){
                     $nicknames[] = $row['Nickname'];
                     $emails[] = $row['Email'];
            }
            // Prüft, ob ein Nickname eingegeben wurde
            if(trim($_POST['Nickname'])=='')
                $errors[]= "Bitte geben Sie einen Nickname ein.";
            // Prüft, ob der Nickname mindestens 3 Zeichen enthält
            elseif(strlen(trim($_POST['Nickname'])) < 3)
                $errors[]= "Ihr Name muss mindestens 3 Zeichen lang sein.";
            // Prüft, ob der Nickname nur gültige Zeichen enthält
            elseif(!preg_match('/^\w+$/', trim($_POST['Nickname'])))
                $errors[]= "Benutzen Sie bitte nur alphanumerische Zeichen (Zahlen, Buchstaben und den Unterstrich).";
            // Prüft, ob der Nickname bereits vergeben ist
            elseif(in_array(trim($_POST['Nickname']), $nicknames))
                $errors[]= "Dieser Nickname ist bereits vergeben.";
            // Prüft, ob eine Email-Adresse eingegeben wurde
            if(trim($_POST['Email'])=='')
                $errors[]= "Bitte geben Sie Ihre Email-Adresse ein.";
            // Prüft, ob die Email-Adresse gültig ist
            elseif(!preg_match('§^[\w\.-]+@[\w\.-]+\.[\w]{2,4}$§', trim($_POST['Email'])))
                $errors[]= "Ihre Email Adresse hat eine falsche Syntax.";
            // Prüft, ob die Email-Adresse bereits vergeben ist
            elseif(in_array(trim($_POST['Email']), $emails))
                $errors[]= "Diese Email-Adresse ist bereits vergeben.";
            // Prüft, ob ein Passwort eingegeben wurde
            if(trim($_POST['Passwort'])=='')
                $errors[]= "Bitte geben Sie Ihr Passwort ein.";
            // Prüft, ob das Passwort mindestens 6 Zeichen enthält
            elseif (strlen(trim($_POST['Passwort'])) < 6)
                $errors[]= "Ihr Passwort muss mindestens 6 Zeichen lang sein.";
            // Prüft, ob eine Passwortwiederholung eingegeben wurde
            if(trim($_POST['Passwortwiederholung'])=='')
                $errors[]= "Bitte wiederholen Sie Ihr Passwort.";
            // Prüft, ob das Passwort und die Passwortwiederholung übereinstimmen
            elseif (trim($_POST['Passwort']) != trim($_POST['Passwortwiederholung']))
                $errors[]= "Ihre Passwortwiederholung war nicht korrekt.";
        }
        // Prüft, ob Fehler aufgetreten sind
        if(count($errors)){
             echo "Ihr Account konnte nicht erstellt werden.<br>\n".
                  "<br>\n";
             foreach($errors as $error)
                 echo $error."<br>\n";
             echo "<br>\n".
                  "Zurück zum <a href=\"".$_SERVER['PHP_SELF']."\">Registrierungsformular</a>\n";
        }
        else{
            // Daten in die Datenbanktabelle einfügen
            $sql = "INSERT INTO
                           User
                            (Nickname,
                             Email,
                             Passwort,
                             Show_Email,
                             Registrierungsdatum,
                             Wohnort,
                             Homepage,
                             ICQ,
                             Bandname,
                             Geschlecht,
                             Geburtsdatum
                            )
                    VALUES
                            ('".mysql_real_escape_string(trim($_POST['Nickname']))."',
                             '".mysql_real_escape_string(trim($_POST['Email']))."',
                             '".md5(trim($_POST['Passwort']))."',
                             '".mysql_real_escape_string(trim($_POST['Show_Email']))."',
                             CURDATE(),
                             '".mysql_real_escape_string(trim($_POST['Wohnort']))."',
                             '".mysql_real_escape_string(trim($_POST['Homepage']))."',
                             '".mysql_real_escape_string(trim($_POST['ICQ']))."',
                             '".mysql_real_escape_string(trim($_POST['Bandname']))."',
                             '".mysql_real_escape_string(trim($_POST['Geschlecht']))."',
                             '".mysql_real_escape_string(trim($_POST['Geburtsdatum']))."'
                            )
                   ";
            mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
            echo "Herlich Willkommen auf !\n<br>".
                 "Ihr Accout wurde erfolgreich erstellt.\n<br>".
                 "Sie können sich nun mit Ihren Zugangsdaten einloggen.\n<br>".
                 "<a href=\"login.php\">Zum Login</a>\n";
        }
    }
    else {
        echo "<form ".
             " name=\"Registrierung\" ".
             " action=\"".$_SERVER['PHP_SELF']."\" ".
             " method=\"post\" ".
             " accept-charset=\"ISO-8859-1\">\n";
        echo "<h3>Deine Zugangsdaten:</h3>\n";
        echo "<span style=\"font-weight:bold;\" ".
             " title=\"min.3\nmax.32\nNur Zahlen, Buchstaben und Unterstrich\">\n".
             "Nickname :\n".
             "</span>\n";
        echo "<input type=\"text\" name=\"Nickname\" maxlength=\"32\">\n";
        echo "<br>\n";
        echo "<span style=\"font-weight:bold;\" ".
             " title=\"min.6\">\n".
             "Passwort :\n".
             "</span>\n";
        echo "<input type=\"password\" name=\"Passwort\">\n";
        echo "<br>\n";
        echo "<span style=\"font-weight:bold;\" ".
             " title=\"min.6\">\n".
             "Passwort wiederholen:\n".
             "</span>\n";
        echo "<input type=\"password\" name=\"Passwortwiederholung\">\n";
        echo "<br>\n";
        echo "<span style=\"font-weight:bold;\" ".
             " title=\"Ihre.Adresse@Ihr-Anbieter.de\">\n".
             "Email-Adresse:\n".
             "</span>\n";
        echo "<input type=\"text\" name=\"Email\" maxlength=\"70\">\n";
        echo "<br>\n";
        echo "<span>\n".
             "Email-Adresse anzeigen:\n".
             "</span>\n";
        echo "<input type=\"radio\" name=\"Show_Email\" value=\"1\"> ja\n";
        echo "<input type=\"radio\" name=\"Show_Email\" value=\"0\" checked> nein\n";
        echo "<h3>Persönliche Angeben:</h3>\n";
        echo "<span style=\"font-weight:bold;\">\n".
             "Homepage :\n".
             "</span>\n";
        echo "<input type=\"text\" name=\"Homepage\" maxlength=\"70\">\n";
        echo "<br>\n";
        echo "<span style=\"font-weight:bold;\">\n".
             "Wohnort :\n".
             "</span>\n";
        echo "<input type=\"text\" name=\"Wohnort\" maxlength=\"70\">\n";
        echo "<br>\n";
        echo "<span style=\"font-weight:bold;\">\n".
             "ICQ :\n".
             "</span>\n";
        echo "<input type=\"text\" name=\"ICQ\" maxlength=\"20\">\n";
        echo "<br>\n";
        echo "<span style=\"font-weight:bold;\">\n".
             "Bandname :\n".
             "</span>\n";
        echo "<input type=\"text\" name=\"Bandname\" maxlength=\"70\">\n";
        echo "<br>\n";
        echo "<span style=\"font-weight:bold;\">\n".
             "Geschlecht :\n".
             "</span>\n";
        echo "<input type=\"text\" name=\"Geschlecht\" maxlength=\"70\">\n";
        echo "<br>\n";
        echo "<span style=\"font-weight:bold;\">\n".
             "Geburtsdatum :\n".
             "</span>\n";
        echo "<input type=\"text\" name=\"Geburtsdatum\" maxlength=\"2\">\n";
        echo "<input type=\"text\" name=\"Geburtsdatum\" maxlength=\"2\">\n";
        echo "<input type=\"text\" name=\"Geburtsdatum\" maxlength=\"4\">\n";

        echo "<br>\n";
        echo "<input type=\"submit\" name=\"submit\" value=\"Registrieren\">\n";
        echo "<input type=\"reset\" value=\"Zurücksetzen\">\n";
        echo "</form>\n";
    }
?>

Bevor man die Registrierung abschickt soll man noch sein Geburtsdatum angeben (Pflichtfeld). Aber bekomme weder die 3 Felder neben dem "Geburtstag:" hin noch die Übernahme in die SQL Datenbank. Ich möchte später das die Datenbank das Alter errechnet und gegeben falls neben dem Geburtstag in einem Profil einträgt.

Gruß

Thomas
 
Hi,

das erste Problem ist, daß du alle drei Geburtstagsfelder gleich mit "Geburtsdatum" benannt hast. Häng da noch Tag, Monat und Jahr dran und die erste Hürde ist schon mal geschafft. Natürlich mußt du nach der Datenübernahme anschließend die drei Felder zu einem systemkonformen Datum zusammenbauen, also Jahr-Monat-Tag. Das war es schon.
 
Du könntest unter anderem auch einen Timestamp aus den drei Feldern machen. Dazu musst du diese zuerst wie oben beschrieben unterschiedlich benennen, da sonst keine Zuordnung möglich ist.

Du kannst dann einen Timestamp daraus erstellen:
PHP:
$timestamp = mktime(0, 0, 0, $_POST['monat'], $_POST['tag'], $_POST['jahr']);
//Das Format: mktime(stunde, minute, sekunde, monat, tag, jahr);
Den Timestamp kannst du einfach in ein Feld vom Typ INT in die Datenbank schreiben. Eine Länge von 11 sollte vorerst reichen.
 
Zurück