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

  • unbekannter Fehler in foreach()-Schleife

    Morgen,
    ich habe für meine seite ein CMS erstellt, welches auch super funktioniert. Jetzt wollte ich aber auf der Seite für die Registrierung einige Fehlerdefinitionen angeben bekomme aber NUR von meinem Server die Meldung:
    Code:
    Warning: Invalid argument supplied for foreach() in /var/customers/webs/ni102593_1/WIP/register.php on line 92
    Ich hab es durch mehrere Codeprüfer gejagt um die genaue Fehlerquelle zu finden bekam aber immer die Meldung, dass mein Code Fehlerfrei sei.

    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";
            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'];
                }
                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.";
            
    //und weitere Fehlerdefinitionen
            
    }
            if(
    count($errors)){
                 echo 
    "<div class=\"alert alert-danger alert-dismissable\">";
                 echo 
    "<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>";
                 echo 
    "<b>FEHLER!</b>";
                 foreach(
    $errors as $error)
                     echo 
    $error."<br>\n";
                 echo 
    "</div>";
                 echo 
    "<div class=\"form-group has-error\">";
                }
            else{
                
    // Daten in die Datenbanktabelle einfügen
                
    echo "Vielen Dank!\n<br>".
                     
    "Ihr Accout wurde erfolgreich erstellt.\n<br>".
                     
    "Sie können sich nun einloggen.\n<br>".
                     
    "<a href=\"login.php\">Zum Login</a>\n";
            }
        }
        
    ?>
                                    
        //Restlicher HTML Code
    kurz und bündig hier die IF, in der die Schleife ist
    PHP-Code:
    if(count($errors)){
                 echo 
    "<div class=\"alert alert-danger alert-dismissable\">";
                 echo 
    "<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>";
                 echo 
    "<b>FEHLER!</b>";
                 foreach(
    $errors as $error)
                     echo 
    $error."<br>\n";
                 echo 
    "</div>";
                 echo 
    "<div class=\"form-group has-error\">";
                } 


  • #2
    PHP-Code:
    var_dump($errors); 
    ?
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Kurz und bündig: logische Fehler wird ein Codeprüfer auch nicht erkennen.

      -> uninitialiserte Variable
      -> elseif ist kein else
      -> ungeprüfte Verwendung des falschen Variablentyps.

      [edit] Hmm, obwohl. count sollte eigentlich reichen.
      //und weitere Fehlerdefinitionen wäre dann vielleicht mal interessant.


      -> sowas führt zu sowas.
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Zum einen sollte "session_start(); " immer an die erste Zeile gestellt werden. Hast du dies bzgl. keine Fehlermeldung erhalten?

        Zum zweiten.

        Schau mal wie du die $errors gesetzt hast.

        Zum dritten:

        if(count($errors))
        ??????

        Wenn Anzahl der Errors dann??

        Also auch wenn die Anzahl der Errors 0 ist?? Geht vieleicht, aber ich würde da doch noch einen Vergleichsparameter setzen.

        Änder mal zum Spaß
        PHP-Code:
         foreach($errors as $error
        in
        PHP-Code:
         foreach($errors as $error=>$wert
        und lass dir den jeweiligen Wert ausgeben.

        Wenns nix zum foreachen gibt, gibts einen Fehler

        EDIT: USW. USW.

        Kommentar


        • #5
          Zum einen sollte "session_start(); " immer an die erste Zeile gestellt werden. Hast du dies bzgl. keine Fehlermeldung erhalten?
          Das stimmt nicht. Aber vor HTML muss es definitiv stehen.

          Wenn Anzahl der Errors dann??
          0 evaluiert zu falsch
          Änder mal zum Spaß
          Das hat doch eine ganz andere Bedeutung. Wozu soll das gut sein?
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Zitat von nikosch Beitrag anzeigen
            Das stimmt nicht. Aber vor HTML muss es definitiv stehen.
            Echt? Ich bekomme auch Fehlermeldungen wenn irgendwas an PHP davor steht. Wahrscheinlich meine PHP Version. Okay. Nehms zurück

            Zitat von nikosch Beitrag anzeigen
            0 evaluiert zu falsch
            Was eigentlich gemeint war. Sauberer finde ich aber einen Vergleichparameter bzgl. Stil. Wie auch immer.
            Zitat von nikosch Beitrag anzeigen
            Das hat doch eine ganz andere Bedeutung. Wozu soll das gut sein?
            Um zu sehen ob $errors überhaupt definiert ist.

            Was ist eigentlich das da?
            PHP-Code:
             while($row mysql_fetch_assoc($result)){
                                 
            $nicknames[] = $row['Nickname'];
                                 
            $emails[] = $row['Email'];
                        } 
            eigentlich doch so
            PHP-Code:
             while($row mysql_fetch_assoc($result)){
                                 
            $nicknames[] .= $row['Nickname'];
                                 
            $emails[] .= $row['Email'];
                        } 
            Und dann da:
            PHP-Code:
             $errors = array();
                    
            //Daten aus der Datenbank holen
                        
            $errors "Bitte benutzen Sie das Formular aus dem Registrierungsbereich"
            Du möchtest ein Array durchlaufen, dass du zwar zunächst als Array definierst, dann aber zum String ändert?

            [STRING] oder [ARRAY].

            Die Entscheidung liegt bei dir

            Kommentar


            • #7
              eigentlich doch so
              nein.
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Die Frage ist eher: Wie lautet der vollständige Code? Hier
                if(isset($_POST['submit']) AND $_POST['submit']=='Registrieren'){
                $errors = array();
                //Daten aus der Datenbank holen
                $errors = "Bitte benutzen Sie das Formular aus dem Registrierungsbereich";
                else{
                fehlt schon mal ne Klammer, auf der Basis brauchen wir nicht weiter raten
                --

                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                --

                Kommentar


                • #9
                  Echt? Okay. Dann werde ich jetzt Maler

                  Echt jetzt?

                  Ich dachte [] zeigt an, dass hier ein Array Element befüllt wird.
                  Wenn . fehlt wird doch nie ein weiteres Element befüllt.

                  Bitte um Aufklärung

                  Was kommt dann raus bei
                  PHP-Code:
                  for($i=0$i<10$i++){
                       
                  $testen[]=$i;
                  }
                  print_r($testen); 
                  Ich teste das mal. Lerne ja immer gerne dazu.

                  Getestet.

                  Okay. das selbe. Man lernt nie aus

                  Kommentar


                  • #10
                    unbekannter Fehler in foreach()-Schleife

                    Zitat von Labrar
                    Okay. das selbe. Man lernt nie aus
                    Naja, genau genommen stimmt das eben nicht.

                    PHP-Code:
                    $test[] = 1;
                    $test[] .= 1;

                    var_dump($test); 
                    Delirius

                    PHP - Grundlagen / PDO - Tutorial / PDO - Dokumentation

                    Kommentar


                    • #11
                      Okay. Der Unterschied würde mich interessieren.

                      Kommt bei mir das selbe raus.

                      Back to Toppic

                      Was ist damit:
                      PHP-Code:
                           if($_POST['submit']=='Registrieren'){
                                
                      $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'];
                                }
                          }
                           if(
                      trim(strlen($_POST['Nickname']))==0){
                                      
                      $errors[]= "Bitte geben Sie einen Nickname ein.";
                                  }else if(
                      strlen(trim($_POST['Nickname'])) < 3){
                                      
                      $errors[]= "Ihr Name muss mindestens 3 Zeichen lang sein.";
                              
                              } 
                              
                              if(
                      count($errors)){
                                   echo 
                      "<div class=\"alert alert-danger alert-dismissable\">";
                                   echo 
                      "<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>";
                                   echo 
                      "<b>FEHLER!</b>";
                                   foreach(
                      $errors as $error){
                                       echo 
                      $error."<br>\n";
                                   echo 
                      "</div>";
                                   echo 
                      "<div class=\"form-group has-error\">";
                                  }
                                     }else{
                                  
                      // Daten in die Datenbanktabelle einfügen
                                  
                      echo "Vielen Dank!\n<br>".
                                       
                      "Ihr Accout wurde erfolgreich erstellt.\n<br>".
                                       
                      "Sie können sich nun einloggen.\n<br>".
                                       
                      "<a href=\"login.php\">Zum Login</a>\n";
                              } 

                      Kommentar


                      • #12
                        unbekannter Fehler in foreach()-Schleife

                        Zitat von Labrar
                        Okay. Der Unterschied würde mich interessieren. Kommt bei mir das selbe raus.
                        Du hast meine 3 Zeilen Code sicher nicht ausprobiert, sonst würden die zwei Sätze nicht fallen.

                        Probier´ es einfach aus, dann verstehst du auch warum es eben nicht identisch ist.
                        Delirius

                        PHP - Grundlagen / PDO - Tutorial / PDO - Dokumentation

                        Kommentar


                        • #13
                          Wow geil. Wusste ich nicht. Danke.

                          Aber dann ist ja für den Threadersteller die Punktsetzung umso wichtiger, da er ja einen String setzt.

                          Also hatte ich unbewusst recht


                          Trotzdem noch eine Frage dazu

                          Ich habe bislang immer einen Punkt gesetzt und das so erfolgreich in jede Tabelle gespeichert.

                          INT Felder nehmen sowieso nur Nummern. Also wo genau liegt der Unterschied?

                          Anderstrum wirds dann sicherlich auch funktionieren.
                          Ist das also wirklich eine technische Frage oder eine Frage des Stils?

                          Kommentar


                          • #14
                            Also wo genau liegt der Unterschied?
                            Den Unterschied siehst Du, wenn Du das Errorreporting hoch drehst.


                            Du kannst auch $var .= 5; statt $var = 5; schreiben. Richtig korrekt ist das aber auch nicht.
                            --

                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                            --

                            Kommentar


                            • #15
                              Kurz um. Es geht beides, aber Stiltechnisch korrekt sollte man Regeltreu bleiben. Richtig?

                              Stop.

                              $var.=5 gibt bei mir einen Fehler wenn $var nicht gesetzt wurde.

                              Ansonsten macht der Befehl genau das was ich erwartet habe.

                              $var=1;
                              $var.=5;

                              echo $var;//Ausgabe 15

                              Edit: Gibt keinen Fehler. Hatte da noch Fliegendreck im Code ala ,.

                              Was ist die Regel?

                              Bzgl. Korrekt

                              . verwende ich nur bei eben gerade [] (Sofern ich die Arrays wirklich so befülle) oder eben bei Strings.
                              Numerisch macht das ja keinen Sinn (Ja manchmal).

                              Also hatte ich ja alles in allem Recht (Auch wenn ich nicht wusste, dass es bei Arrays auch ohne Punkt geht)

                              Strings mit .
                              Int mit +

                              Okay. Ich muss noch viel lernen

                              Sogar
                              PHP-Code:
                              $elem[]+=30;
                              $elem[]+=40;
                              print_r($elem); 
                              geht.

                              Harharhar


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

                              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.

                              Und vorallem

                              Welches ist der für den parser beste Weg?

                              Kommentar

                              Lädt...
                              X