Ankündigung

Einklappen
Keine Ankündigung bisher.

unbekannter Fehler in foreach()-Schleife

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    $var.=5 gibt bei mir einen Fehler wenn $var nicht gesetzt wurde.
    Genau das tut der andere Code auch.

    $var=1;
    $var.=5;

    echo $var;//Ausgabe 15
    Strings mit .
    Int mit +
    Du laberst hier echt nur Müll.

    Also hatte ich ja alles in allem Recht
    Nein.
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    Kommentar


    • #17
      Warum kommt IMMER der erste Fehler (bitte benutze das registrierungsformular)

      Kommentar


      • #18
        und dann als frage zum ersten problem: warum funktioniert der code hier:
        PHP-Code:
        <?php
            error_reporting
        (E_ALL);
            include(
        "mysql.php");

            
        session_start();

            if(isset(
        $_POST['submit']) AND $_POST['submit']=='Registrieren'){
                
        $errors = array();
                if(!isset(
        $_POST['Nickname'],
                          
        $_POST['Passwort'],
                          
        $_POST['Passwortwiederholung'],
                          
        $_POST['Email'],
                          
        $_POST['Show_Email'],
                          
        $_POST['Homepage'],
                          
        $_POST['Wohnort'],
                          
        $_POST['Steam'],
                          
        $_POST['YouTube']))
                    
        $errors "Bitte benutzen Sie das Formular aus dem Registrierungsbereich";
                else{
                    
        $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'];
                             
        $Steam[] = $row['Steam'];
                             
        $YouTube[] = $row['YouTube'];
                    }
                    if(
        trim($_POST['Nickname'])=='')
                        
        $errors[]= "Bitte geben Sie einen Nickname ein.";
                    elseif(
        strlen(trim($_POST['Nickname'])) < 3)
                        
        $errors[]= "Ihr Name muss mindestens 3 Zeichen lang sein.";
                    elseif(!
        preg_match('/^\w+$/'trim($_POST['Nickname'])))
                        
        $errors[]= "Benutzen Sie bitte nur alphanumerische Zeichen (Zahlen, Buchstaben und den Unterstrich).";
                    elseif(
        in_array(trim($_POST['Nickname']), $nicknames))
                        
        $errors[]= "Dieser Nickname ist bereits vergeben.";
                    if(
        trim($_POST['Email'])=='')
                        
        $errors[]= "Bitte geben Sie Ihre Email-Adresse ein.";
                    elseif(!
        preg_match('§^[\w\.-]+@[\w\.-]+\.[\w]{2,4}$§'trim($_POST['Email'])))
                        
        $errors[]= "Ihre Email Adresse hat eine falsche Syntax.";
                    elseif(
        in_array(trim($_POST['Email']), $emails))
                        
        $errors[]= "Diese Email-Adresse ist bereits vergeben.";
                    if(
        trim($_POST['Passwort'])=='')
                        
        $errors[]= "Bitte geben Sie Ihr Passwort ein.";
                    elseif (
        strlen(trim($_POST['Passwort'])) < 6)
                        
        $errors[]= "Ihr Passwort muss mindestens 6 Zeichen lang sein.";
                elseif(
        in_array(trim($_POST['Steam']), $Steam))
                        
        $errors[]= "Diese Steam-ID ist bereits vergeben.";
                elseif(
        in_array(trim($_POST['YouTube']), $YouTube))
                        
        $errors[]= "Dieser Nickname ist bereits vergeben.";
                    if(
        trim($_POST['Passwortwiederholung'])=='')
                        
        $errors[]= "Bitte wiederholen Sie Ihr Passwort.";
                    elseif (
        trim($_POST['Passwort']) != trim($_POST['Passwortwiederholung']))
                        
        $errors[]= "Ihre Passwortwiederholung war nicht korrekt.";
                }
                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{
                    
        $sql "INSERT INTO
                                   User
                                    (Nickname,
                                     Email,
                                     Passwort,
                                     Show_Email,
                                     Registrierungsdatum,
                                     Wohnort,
                                     Homepage,
                                     Steam,
                                     YouTube
                                    )
                            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['Steam']))."',
                                     '"
        .mysql_real_escape_string(trim($_POST['YouTube']))."'
                                    )
                           "
        ;
                    
        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".
                     
        "Steam:\n".
                     
        "</span>\n";
                echo 
        "<input type=\"text\" name=\"Steam\" maxlength=\"70\">\n";
                echo 
        "<br>\n";
                echo 
        "<span style=\"font-weight:bold;\">\n".
                     
        "YouTube:\n".
                     
        "</span>\n";
                echo 
        "<input type=\"text\" name=\"YouTube\" maxlength=\"70\">\n";
                echo 
        "<br>\n";
                echo 
        "<br>\n";
                echo 
        "<input type=\"submit\" name=\"submit\" value=\"Registrieren\">\n";
                echo 
        "<input type=\"reset\" value=\"Zurücksetzen\">\n";
                echo 
        "</form>\n";
            }
        ?>

        Kommentar


        • #19
          Weil die Logik ne andere ist?
          [COLOR="#F5F5FF"]--[/COLOR]
          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
          [COLOR="#F5F5FF"]
          --[/COLOR]

          Kommentar


          • #20
            Also bei dem Diskussionsverlauf weiß ich ehrlich gesagt gar nicht, ob der TE seine Problem mittlerweile lösen konnte.

            Nur nochmal als kurzen Überblick:
            Ich hab es durch mehrere Codeprüfer gejagt um die genaue Fehlerquelle zu finden bekam aber immer die Meldung, dass mein Code Fehlerfrei sei.
            Die Codeprüfer möchte ich sehen! Jedenfalls hast Du den geposteten Code nicht irgendwo durchgejagt, dran vorbei höchstens:
            PHP-Code:
            //HTML CODE                             
            <?php 
                error_reporting
            (E_ALL); 
                include(
            "mysql.php"); 

                
            session_start(); 

                if(isset(
            $_POST['submit']) AND $_POST['submit']=='Registrieren'){ 
                    
            $errors = array(); 
                    
            //Daten aus der Datenbank holen 
                        
            $errors "Bitte benutzen Sie das Formular aus dem Registrierungsbereich"// <-- MÖÖÖP #1!
                    
            else{ // <-- MÖÖÖP #2!
            1. Du sagst $errors ist ein Array und weist diesem dann einen String zu. Schonmal von Dynamic Typecast gehört?!

            2. ...und das ist der Fehler, dem jeder Codeprüfer auffallen hätte müssen, wie kann ein ELSE-Block beginnen, ohne den IF zuvor zu schliessen?!

            Die Hinweise kamen hier zwar auch bereits von anderen, aber ich vermute, daß der TE die wichtigsten überlesen hat!
            Insbesondere in Bezug auf die Invalid-Argument-Meldung vermute ich, daß $errors zur Zeit der Verarbeitung mit foreach kein Array ist.
            Hätte längst geklärt sein können, wenn man direkt bei Post #2 von tkausl aufgepasst hätte!

            Alles andere wurde bereits angesprochen.
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #21
              Zitat von Arne Drews Beitrag anzeigen
              Nur nochmal als kurzen Überblick:
              Die Codeprüfer möchte ich sehen! Jedenfalls hast Du den geposteten Code nicht irgendwo durchgejagt, dran vorbei höchstens:

              1. Du sagst $errors ist ein Array und weist diesem dann einen String zu. Schonmal von Dynamic Typecast gehört?!

              2. ...und das ist der Fehler, dem jeder Codeprüfer auffallen hätte müssen, wie kann ein ELSE-Block beginnen, ohne den IF zuvor zu schliessen?!
              nikosch hat es auch schon gesagt. der gepostete code ist sicherlich nicht der, der im programm des TE steht.

              das if-else-konstrukt wie er es hier gepostet hat wird sicherlich zu einem parse error führen und er hätte sicherlich keinen sonstigen fehler mehr bekommen, weil php dann abbricht.

              (wenn ich irgendwann zeit finde, werd ich mal nen ausführlichen guide schreiben, wie man code sinnvoll kürz um ihn im forum zu posten. werden zwar nur vielleicht 20% lesen, aber immerhin
              nervt einfach immer so verstümmelten code zu lesen)

              dann wollen wir mal dem labrar mal ein paar grundlagen zum programmieren beibringen:

              Edit: Trotz allem ist das doch alles doof.
              Ich meine es gibt Zig Wege zum Ziel.

              Wie lautet die Regel?
              die regeln für operatoren findet man im manual logischer weise unter operatoren
              http://php.net/manual/de/language.operators.php

              sachen wie +=, -=, *=, /= ect gelten für die meisten programmiersprachen.

              z.b.
              PHP-Code:
              $var += 1
              ist die kurzschreibweise für
              PHP-Code:
              $var $var 1
              heißt: nimmt die variable $var, addiere sie mit 1 und weise das ergebnis der variable $var zu.
              hier erkennt man auch das problem
              "nimmt die variable $var" führt logischerweise zu einem fehler, weil $var nocht nicht definiert ist. php ist bei noch nicht definierten variablen ja netter, wirft nur ne notice und initialisiert die variable beim ersten aufruf. viele andere sprachen sind da weniger nett und lassen so einen code gar nicht durchgehen.

              das selbe gilt für
              PHP-Code:
              $var .= 'hallo'
              kurzschreibweise für
              PHP-Code:
              $var $var 'hallo'
              das "." dafür da ist, dass strings verkettet werden, hast du hoffentlich ja schon festgestellt.

              Wie lautet die Regel? Wird die vom Team im Vorfeld festgelegt? Ist es den Proggern imTeam einfach nur egal was der Vorgänger macht? Da sollte es doch auch Stilregeln geben.
              wichtigste regel: bei voll aufgedrehtem error-reporting dürfen absolut keine meldungen kommen.

              edit:
              PHP-Code:
              $var=array();
              $var[] = 
              heißt für php in etwa erstelle im array $var ein neues element mit dem index "maximum der bereits vorhandenen indizes + 1" und dem inhalt 1

              PHP-Code:
              $var=array();
              $var[] += 
              müsste für php in etwa folgendes heißen erstelle im array $var ein neues element mit dem index "maximum der bereits vorhandenen indizes + 1" und dem inhalt null (= initialiesierung), nimm dann dessen inhalt, addiere ihn mit 1 und weise das ergebnis dem gerade erstellten element zu.
              bringt leider keine meldung. allerdings nur, wegen der automatischen initialisierung, die php macht.

              das hier bringt dagegen eine notice
              PHP-Code:
              $var[] += 
              liebe Grüße
              Fräulein Dingsda

              Kommentar


              • #22
                bringt leider keine meldung.
                Hmm, tatsächlich.
                [COLOR="#F5F5FF"]--[/COLOR]
                [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                [COLOR="#F5F5FF"]
                --[/COLOR]

                Kommentar


                • #23
                  Zum Ausgangsproblem:

                  count reicht nicht zum abtesten, wenn $errors kein array ist
                  PHP-Code:
                  $errors "Bitte benutzen Sie das Formular aus dem Registrierungsbereich";   //kein Array!, vermutlich nur [] vergessen


                  if(count($errors)){  //
                       
                  foreach($errors as $error)  
                            echo 
                  $error."<br>\n";

                  Warning: Invalid argument supplied for foreach() in ...

                  Edit: Steht schon in #20, hatte ich überlesen.

                  Kommentar


                  • #24
                    Es hatte hier im Forum mal jemand eine Signatur, die hier sehr gut passt: Es wurde bereits alles gesagt, nur noch nicht von jedem!
                    Competence-Center -> Enjoy the Informatrix
                    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                    Kommentar

                    Lädt...
                    X