kostenloser Webspace werbefrei: lima-city


Fehler: Invalid argument supplied for foreach()...

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    h******************g

    Ich habe ein Problem mit der Überprüfung einer Checkbox!

    Der Fehler: Warning: Invalid argument supplied for foreach() in (...) registrierung.php on line 82
    - Es muss an der Checkbox liegen, da der Fehler erst nach dem Einbau der Checkbox kam!

    Die Zeile 82:
    foreach($errors as $error)


    Der PHP-Code:
    <?php
        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['AIM'],
                      $_POST['YIM'],
                      $_POST['MSN'],
                      $_POST['nutzungsbedingungen']))
                // 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.";
                // Homepage-versammlung Nutzungsbedingungen
                if (trim($_POST['nutzungsbedingungen'])=='')
                    $errors[]= "Bitte akzeptieren Sie die Nutzungsbedingungen.";
            }
            // 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,
                                 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['ICQ']))."',
                                 '".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=\"http://www.homepage-versammlung.de/index.php\">Zum Login</a>\n";
            }
        }
        else {
            echo "<form ".
                 " name=\"Registrierung\" ".
                 " action=\"".$_SERVER['PHP_SELF']."\" ".
                 " method=\"post\" ".
                 " accept-charset=\"ISO-8859-1\">\n";
            echo "<h2 class=\"h-2h\">&raquo; Obligatorische Angaben</h2>\n";
            echo "<span style=\"font-weight:bold;\" ".
                 " title=\"min.3\nmax.32\nNur Zahlen, Buchstaben und Unterstrich\">\n".
                 "Nickname :\n".
                 "</span>\n";
            echo "<input class=\"normalinput\" 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 class=\"normalinput\" 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 class=\"normalinput\" 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 class=\"normalinput\" 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 "<h2 class=\"h-2h\">&raquo; Freiwillige Angaben</h2>\n";
            echo "<span style=\"font-weight:bold;\">\n".
                 "Homepage :\n".
                 "</span>\n";
            echo "<input class=\"normalinput\" type=\"text\" name=\"Homepage\" maxlength=\"70\">\n";
            echo "<br>\n";
            echo "<span style=\"font-weight:bold;\">\n".
                 "Wohnort :\n".
                 "</span>\n";
            echo "<input class=\"normalinput\" type=\"text\" name=\"Wohnort\" maxlength=\"70\">\n";
            echo "<br>\n";
            echo "<span style=\"font-weight:bold;\">\n".
                 "ICQ :\n".
                 "</span>\n";
            echo "<input class=\"normalinput\" type=\"text\" name=\"ICQ\" maxlength=\"20\">\n";
            echo "<br>\n";
            echo "<span style=\"font-weight:bold;\">\n".
                 "AIM :\n".
                 "</span>\n";
            echo "<input class=\"normalinput\" type=\"text\" name=\"AIM\" maxlength=\"70\">\n";
            echo "<br>\n";
            echo "<span style=\"font-weight:bold;\">\n".
                 "YIM :\n".
                 "</span>\n";
            echo "<input class=\"normalinput\" type=\"text\" name=\"YIM\" maxlength=\"70\">\n";
            echo "<br>\n";
            echo "<span style=\"font-weight:bold;\">\n".
                 "MSN :\n".
                 "</span>\n";
            echo "<input class=\"normalinput\" type=\"text\" name=\"MSN\" maxlength=\"70\">\n";
            echo "<br>\n";
            echo "<input type=\"checkbox\" name=\"nutzungsbedingungen\" value=\"1\"> Ich akzeptiere die Nutzungsbedingungen!";
            echo "<br>\n";
            echo "<br>\n";
            echo "<input class=\"loginbuttonb\" type=\"submit\" name=\"submit\" value=\"Registrieren\">\n";
            echo "<input class=\"loginbuttonb\" type=\"reset\" value=\"Zurücksetzen\">\n";
            echo "</form>\n";
        }
    ?>
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich glaube mit diesem befehl:
    $errors = "Bitte benutzen Sie das Formular aus dem Registrierungsbereich";


    ...machst Du aus dem array wieder eine normale variable, weswegen foreach da nix anzeigen will.

    richtig wäre:
    $errors[] = "Bitte benutzen Sie das Formular aus dem Registrierungsbereich";
  4. Autor dieses Themas

    h******************g

    Jetzt kommt (egal bei welchen Fehler) nur die Meldung: "Bitte benutzen Sie das Formular aus dem Registrierungsbereich", also war das wohl nicht der Fehler, den ich Suche, oder? :wink:
  5. homepage-versammlung schrieb:
    Jetzt kommt (egal bei welchen Fehler) nur die Meldung: "Bitte benutzen Sie das Formular aus dem Registrierungsbereich", also war das wohl nicht der Fehler, den ich Suche, oder? :wink:

    wurde denn 'Nickname' und Passwort' und Passwortwiederholung und 'Email'] und Show_Email' und Homepage und Wohnort und ICQ' und 'AIM und YIM und MSN und nutzungsbedingungen gesendet? (sprich ausgefüllt)
    Wurde nämlich nur eines vergessen ist ja die bedingung erfüllt.
    mach mal folgenden code ganz an den anfang:
    foreach ($_POST as $var => $value)
    {echo $var."  =  ".$value." <br>"}

    (ungetestet)
    ..um zu überprüfen ob alle gesendet wurden (bzw was gesendet wurde)
  6. Autor dieses Themas

    h******************g

    Die Meldung "Bitte benutzen Sie das Formular aus dem Registrierungsbereich" soll aber nur kommen, wenn ein Formularfeld fehlt!
    Wenn etwas nicht ausgefüllt wird, soll eine dieser Meldungen kommen:
    // 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.";
                // Homepage-versammlung Nutzungsbedingungen
                if (trim($_POST['nutzungsbedingungen'])=='')
                    $errors[]= "Bitte akzeptieren Sie die Nutzungsbedingungen.";
  7. tja aber dein code funktioniert so nicht.
    entweder es sind alle ausgefüllt und dann geht es weiter bei else oder nicht und dann kommt die Meldung "Bitte benutzen Sie das Formular aus dem Registrierungsbereich".
    Du musst wohl nochmal nachdenken wie du das erreichst was du willst.
    Dein ursprüngliches Problem jedenfalls wurde behoben.....

    Beitrag zuletzt geändert: 29.8.2010 21:49:25 von simuliertes
  8. Autor dieses Themas

    h******************g

    simuliertes schrieb:
    tja aber dein code funktioniert so nicht.
    entweder es sind alle ausgefüllt und dann geht es weiter bei else oder nicht und dann kommt die Meldung "Bitte benutzen Sie das Formular aus dem Registrierungsbereich".
    Du musst wohl nochmal nachdenken wie du das erreichst was du willst.
    Dein ursprüngliches Problem jedenfalls wurde behoben.....

    Wenn ich die Checkbox aber weglasse, kommt keine (PHP-)Fehlermeldung und es funktioniert einwandfrei! (auch die Fehlermeldungen)
  9. Ja sorry , ich habe im letzten post quark erzählt.
    Habe den Code getestet und tatsächlich 'nutzungsbedingungen' wird nur gesendet, wenn die checkbox ausgefüllt ist, ansonsten kommt nix.

    Edit: also lass in der ersten abfrage ersteinmal $_POST[' 'nutzungsbedingungen' '] weg und frage einfach im else teil ab
    if (isset($_post[' nutzungsbedingungen']))
            {if ($_post[' nutzungsbedingungen'] == 1)
            {
                //nutzungsbedingungen akzeptiert
            }else{
                  //nicht akzeptiert
            }
    }else
    {
         //nicht akzeptiert
    }


    das wäre jedenfalls die unsaubere aber schnellste Lösung

    Beitrag zuletzt geändert: 29.8.2010 22:22:59 von simuliertes
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!