Geburtsdatum von select fenstern mit einem $ POST abschicken

Michael17

Mitglied
Hallo zusammen ,
bin schon leicht verzweifelt:(
Wie bekomme ich das hin das der nachfolgende Code mit
PHP:
'".mysql_real_escape_string(trim($_POST['Geburtsdatum']))."',
abgeschickt wird ?

Danke vorab

PHP:
    $Monatsnamen = array(1 => 'Januar',
                   2 => 'Februar',
                         3 => 'März',
                         4 => 'April',
                         5 => 'Mai',
                         6 => 'Juni',
                         7 => 'Juli',
                         8 => 'August',
                         9 => 'September',
                         10 => 'Oktober',
                         11 => 'November',
                         12 => 'Dezember'
                   );

    echo "       <select name=\"Geburtsdatum\">\n";
    echo "       <option value=\"0\">Tag</option>\n";
    for($i=1;$i<=31;$i++){
        echo "<option value=\"".$i."\">".$i.".</option>\n";
    }

    echo "       </select>\n";
    echo "       <select name=\"Geburtsdatum\">\n";
    echo "       <option value=\"0\">Monat</option>\n";
    for($i=1;$i<=12;$i++){
        echo "<option value=\"".$i."\">".$Monatsnamen[$i]."</option>\n";
    }

    echo "       </select>\n";
    echo "       <select name=\"Geburtsdatum\">\n";
    echo "       <option value=\"0\">Jahr</option>\n";
    for($i=2000;$i>=1900;$i--){
        echo "<option value=\"".$i."\">".$i."</option>\n";
    }

    echo "       </select>\n";


?>
 
Du kannst den Namen eines HTML-Form-Elements nicht mehrmals vergeben. Wenn du mehr als ein SELECT-Feld hast, müssen die unterschiedliche Namen haben. Auf der PHP-Seite müsstest du die Inhalte der HTML-Form-Elemente dann mit einander verbinden. Anhand deines Codes dürfte das ungefähr so laufen:

PHP:
    $Monatsnamen = array(1 => 'Januar',
                   2 => 'Februar',
                         3 => 'März',
                         4 => 'April',
                         5 => 'Mai',
                         6 => 'Juni',
                         7 => 'Juli',
                         8 => 'August',
                         9 => 'September',
                         10 => 'Oktober',
                         11 => 'November',
                         12 => 'Dezember'
                   );

    echo "       <select name=\"Tag\">\n";
    echo "       <option value=\"0\">Tag</option>\n";
    for($i=1;$i<=31;$i++){
        echo "<option value=\"".$i."\">".$i.".</option>\n";
    }

    echo "       </select>\n";
    echo "       <select name=\"Monat\">\n";
    echo "       <option value=\"0\">Monat</option>\n";
    for($i=1;$i<=12;$i++){
        echo "<option value=\"".$i."\">".$Monatsnamen[$i]."</option>\n";
    }

    echo "       </select>\n";
    echo "       <select name=\"Jahr\">\n";
    echo "       <option value=\"0\">Jahr</option>\n";
    for($i=2000;$i>=1900;$i--){
        echo "<option value=\"".$i."\">".$i."</option>\n";
    }

    echo "       </select>\n";

Dann die das speichern:

PHP:
'".mysql_real_escape_string( sprintf("%d.%d.%d", $_POST['Tag'], $_POST['Monat'], $_POST['Jahr']) )."',
 
Den oberen Code hatte ich auch erst genau wie von dir jetzt berrichtigt auch schon gehabt, dake aber auch für den weiteren Hinweiß, bin noch Anfänger dafür bin ich für alle zusätzlichen Infos Dankbar.
Aber mit dem Einfügcode verstehe ich noch nicht.
bei mir sieht das ja jetzt so aus
PHP:
$sql = "INSERT INTO
                           User
                            (Nickname,
                             Email,
                             Passwort,
                             Show_Email,
                             Registrierungsdatum,
                             Wohnort,
                             Homepage,
                             Geburtsdatum,
                             AIM,
                             YIM,
                             MSN
                            )
                    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( sprintf("%d.%d.%d", $_POST['Tag'], $_POST['Monat'], $_POST['Jahr']) )."',
                             '".mysql_real_escape_string(trim($_POST['Geburtsdatum']))."',
                             '".mysql_real_escape_string(trim($_POST['AIM']))."',
                             '".mysql_real_escape_string(trim($_POST['YIM']))."',
                             '".mysql_real_escape_string(trim($_POST['MSN']))."'
                            )
demnach müsste ich ja in meiner sql Datenbank ja statt einer Spalt drei einfügen .... oder verstehe ich das jetzt falsch ?
 
Nicht unbedingt. Ich habe im Beispiel gezeigt, das man die drei verschiedenen Form-Elemente zu einer Zeichenkette zusammenfügen kann. Hier nochmal der Code dafür:

PHP:
sprintf("%d.%d.%d", $_POST['Tag'], $_POST['Monat'], $_POST['Jahr'])

sprintf() baut einen String anhand eines vorgegebenen Formats (Parameter 1 = "%d.%d.%d") zusammen. In unserem Fall sind es integere Zahlen (Ganzzahlen), welche durch den Format-Code %d vorgegeben werden. Alle weiteren Parameter, also die drei Form-Elemente werden also als Ganzzahlen interpretiert und in den String eingefügt. Der String selbst wird von sprintf() als Rückgabe zurückgegeben und könnte mit echo ausgegeben oder direkt als Parameter an eine weitere Funktion übergeben werden.

Ich hoffe, ich hab es nicht zu kompliziert erklärt. Jedenfalls sparst du dir mit sprintf() die Verwendung von mysql_real_escape_string() - in diesem Falle.
 
Also ich kann dir mal sagen bin schon am Ende aber gebe nicht auf und muss mal loswerde das ich mich schon mal sehr freue eine Antwort zu bekommen.
Ich habe mir auch Bücher besorgt die mir einwenig helfen, aber ich Checke das noch nicht.
eine dumme Zeile sage ich immer aber ich will es auch verstehen können. Damit wir die gleiche sprache sprechen schiebe ich mal meinen Code rein damit du genau weißt was ich gerne möchte;)
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['Geburtsdatum'],
                  $_POST['AIM'],
                  $_POST['YIM'],
                  $_POST['MSN']))
            // 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,
                             Geburtsdatum,
                             AIM,
                             YIM,
                             MSN
                            )
                    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['Geburtsdatum']))."',
                             '".mysql_real_escape_string(trim($_POST['AIM']))."',
                             '".mysql_real_escape_string(trim($_POST['YIM']))."',
                             '".mysql_real_escape_string(trim($_POST['MSN']))."'
                            )
                   ";
            mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
            echo "Vielen Dank!\n<br>".
                 "Ihr Accout wurde erfolgreich erstellt.\n<br>".
                 "Sie können sich nun mit Ihren Daten 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 "<h5>Obligatorische Angaben</h5>\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 "<h5>Freiwillige Angaben</h5>\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".
             "Geburtsdatum :\n".
             "</span>\n";

// hier dachte ich mit die selectboxen        echo "<input type=\"text\" name=\"Geburtsdatum\" maxlength=\"20\">\n";
        echo "<br>\n";
        echo "<span style=\"font-weight:bold;\">\n".
             "AIM :\n".
             "</span>\n";
        echo "<input type=\"text\" name=\"AIM\" maxlength=\"70\">\n";
        echo "<br>\n";
        echo "<span style=\"font-weight:bold;\">\n".
             "YIM :\n".
             "</span>\n";
        echo "<input type=\"text\" name=\"YIM\" maxlength=\"70\">\n";
        echo "<br>\n";
        echo "<span style=\"font-weight:bold;\">\n".
             "MSN :\n".
             "</span>\n";
        echo "<input type=\"text\" name=\"MSN\" maxlength=\"70\">\n";
        echo "<br>\n";
        echo "<input type=\"submit\" name=\"submit\" value=\"Registrieren\">\n";
        echo "<input type=\"reset\" value=\"Zurücksetzen\">\n";
        echo "</form>\n";
    }
?>
und damit nicht jeder sich an das Format yyyy-mm-dd halten muss dachte ich mir das mit den Vorgaben wäre dann besser.
Ich hatte schon ein schönes Regitrierscript, aber ich wollte unbedingt eins mit Avatar haben.
Außerdem wollte ich das Geburtsdatum als Pflichtfeld noch einbenden, aber da ich schon seit 4 Tagen mit dem Geburtstag drann bin lasse ich mir damit auch noch Zeit;)
 
Zuletzt bearbeitet:
Du hast also eine Spalte mit dem Namen Geburtstdatum in einer Tabelle mit dem Namen User. Dort wird ein Datum eingefügt, also hat die Spalte einen Datentypen "DATE". Wenn du den Tag, den Monat und das Jahr als separate Formular-Elemente anbietest, musst du sie - um sie in diese Spalte einfügen zu können - zu einem Datum umwandeln. Du kannst das so machen:

PHP:
            // Geburtsdatumsstring erstellen
            $Geburtsdatum = sprintf("%d-%d-%d", $_POST['Jahr'], $_POST['Monat'], $_POST['Tag']);

            // Daten in die Datenbanktabelle einfügen
            $sql = "INSERT INTO
                           User
                            (Nickname,
                             Email,
                             Passwort,
                             Show_Email,
                             Registrierungsdatum,
                             Wohnort,
                             Homepage,
                             Geburtsdatum,
                             AIM,
                             YIM,
                             MSN
                            )
                    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($Geburtsdatum)."',
                             '".mysql_real_escape_string(trim($_POST['AIM']))."',
                             '".mysql_real_escape_string(trim($_POST['YIM']))."',
                             '".mysql_real_escape_string(trim($_POST['MSN']))."'
                            )
                   ";
 
Ich sage es ja, jetzt bekomme ich mal super Hilfe und nun :(

Parse error: syntax error, unexpected ';' in C:\xampp\htdocs\loginscript\registrierung.php on line 113


PHP:
        else{
$Geburtsdatum = sprintf("%d-%d-%d", $_POST['Jahr'], $_POST['Monat'], $_POST['Tag']);
            // Daten in die Datenbanktabelle einfügen
            $sql = "INSERT INTO
                           User
                            (Nickname,
                             Email,
                             Passwort,
                             Show_Email,
                             Registrierungsdatum,
                             Wohnort,
                             Homepage,
                             Geburtsdatum,
                             AIM,
                             YIM,
                             MSN
                            )
                    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($Geburtsdatum)."',
                             '".mysql_real_escape_string(trim($_POST['AIM']))."',
                             '".mysql_real_escape_string(trim($_POST['YIM']))."',
                             '".mysql_real_escape_string(trim($_POST['MSN']))."'
                            )
Zeile 113                   ";
            mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
            echo "Vielen Dank!\n<br>".
                 "Ihr Accout wurde erfolgreich erstellt.\n<br>".
                 "Sie können sich nun mit Ihren Daten einloggen.\n<br>".
                 "<a href=\"login.php\">Zum Login</a>\n";
        }
    }


Fehler der Ausgabe^^ gefunden musste noch ein ) rein

PHP:
'".mysql_real_escape_string(trim($Geburtsdatum))."',

Jetzt kommt aber

Ihr Account konnte nicht erstellt werden.
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\loginscript\registrierung.php on line 78
 
Zuletzt bearbeitet:
Das liegt an dieser Zeile:

PHP:
$errors = "Bitte benutzen Sie das Formular aus dem Registrierungsbereich";

$errors wird weiter unten als Array (for-each-Schleife) behandelt, hier machst du einen String daraus. Richtiger wäre vermutlich

PHP:
$errors[] = "Bitte benutzen Sie das Formular aus dem Registrierungsbereich";
 
Das liegt an dieser Zeile:

PHP:
$errors = "Bitte benutzen Sie das Formular aus dem Registrierungsbereich";

$errors wird weiter unten als Array (for-each-Schleife) behandelt, hier machst du einen String daraus. Richtiger wäre vermutlich

PHP:
$errors[] = "Bitte benutzen Sie das Formular aus dem Registrierungsbereich";
Danke habe ich gemacht, aber leider immer noch

Ihr Account konnte nicht erstellt werden.
Bitte benutzen Sie das Formular aus dem Registrierungsbereich

wenn ich die selectfelder und das was dazugehört alles weg mache geht es aber.
Da muss es noch einen zusammenhang geben den ich nicht finde:(
 
Du prüfst, ob $_POST['Geburtsdatum'] existiert - einen Wert enthält. Und zwar in diesem Code-Teil:

PHP:
        if(!isset($_POST['Nickname'],
                  $_POST['Passwort'],
                  $_POST['Passwortwiederholung'],
                  $_POST['Email'],
                  $_POST['Show_Email'],
                  $_POST['Homepage'],
                  $_POST['Wohnort'],
                  $_POST['Geburtsdatum'],
                  $_POST['AIM'],
                  $_POST['YIM'],
                  $_POST['MSN']))

Wenn du das auf Tag, Monat und Jahr statt Geburtsdatum prüfst, sollte die Kondition wahr sein und damit die Meldung nicht ausgegeben werden. Ich weiß nicht, wie du deine Form-Elemente jetzt genau benannt hast, aber hier wäre ein Beispiel:

PHP:
        if(!isset($_POST['Nickname'],
                  $_POST['Passwort'],
                  $_POST['Passwortwiederholung'],
                  $_POST['Email'],
                  $_POST['Show_Email'],
                  $_POST['Homepage'],
                  $_POST['Wohnort'],
                  $_POST['Tag'],           /* Form-Element für den Geburtstag - Tag */
                  $_POST['Monat'],       /* Form-Element für den Geburtstag - Monat */
                  $_POST['Jahr'],          /* Form-Element für den Geburtstag - Jahr */
                  $_POST['AIM'],
                  $_POST['YIM'],
                  $_POST['MSN']))
 
Zurück