Ankündigung

Einklappen
Keine Ankündigung bisher.

Return gibt nichts zurück!

Einklappen

Neue Werbung 2019

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

  • Return gibt nichts zurück!

    Hey Community, ich habe irgendwie ein kleines Problem.
    Meine Funktion gibt kein Return zurück. Hier mal zu meinem Code:

    PHP-Code:
        public function getPosts($topic_id) {
            
    $topic_id $this->mysqli->real_escape_string($topic_id);
            
    $result $this->mysqli->query("SELECT * FROM ncms_forum_posts WHERE `topic_id` = '".$topic_id."'");
            if(
    $result->num_rows 0) {
                
    $forumPosts = array();
                while(
    $row $result->fetch_assoc()) {
                    
    $forumPosts[] = $row;
                }
                return 
    $forumPosts;
            } else {
                return 
    "Es hat noch niemand zu diesem Post einen Beitrag geschrieben!";
            }
        } 
    Nunja, sonst bekomme ich folgende Fehlermeldung zurück, als mein Return:
    Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\templates\post.tpl.php on line 52

    Ist ja klar, weil es NULL ist bzw. keine Posts hat.
    Wenn ich nun ein Post erstelle funktioniert alles, aber ich will falls kein Post vorhanden ist das folgendes zurückgegeben wird:
    "Es hat noch niemand zu diesem Post einen Beitrag geschrieben!"

    - Juka


  • #2
    Ist ja klar, weil es NULL ist bzw. keine Posts hat.
    Falsch. Is ja klar, weil Du versuchst, über die Fehlermeldung zu iterieren. Insofern guckst Du in den falschen Codeteil.
    --

    „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


    • #3
      Zitat von nikosch Beitrag anzeigen
      Falsch. Is ja klar, weil Du versuchst, über die Fehlermeldung zu iterieren. Insofern guckst Du in den falschen Codeteil.
      Zeile 52:
      PHP-Code:
      <?php foreach($Forum->getPosts($_GET['id']) as $post) { ?>

      Kommentar


      • #4
        Ja.
        --

        „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


        • #5
          Zitat von nikosch Beitrag anzeigen
          Ja.
          Ich verstehe nicht genau, wo Du nun hinaus willst. :S

          #EDIT - Ich habe mal var_dump() auf $Forum->getPosts($_GET['id']) gemacht, nun bekomme ich meinen Return. Wie mach ich das genau mit der Foreach Schleife?

          Kommentar


          • #6
            Zitat von Juka Beitrag anzeigen
            Ich verstehe nicht genau, wo Du nun hinaus willst. :S
            • Wenn du MySQLi verwendest, dann verwende doch direkt Prepared Statements.
            • Der folgende Rückgabewert ist ein String und kein Array, weshalb foreach damit nichts anfangen kann:

              PHP-Code:
              return "Es hat noch niemand zu diesem Post einen Beitrag geschrieben!"

            Kommentar


            • #7
              Warum antwortet ein Postings-Getter mit einem String wenn man von ihm eigentlich erwartet ein Array, das optional Posts enthält, zurückzugeben ?

              Ich würde die ganze Methode überdenken, wenn ich du wär.
              [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

              Kommentar


              • #8
                Zitat von Juka Beitrag anzeigen
                Ich verstehe nicht genau, wo Du nun hinaus willst. :S

                #EDIT - Ich habe mal var_dump() auf $Forum->getPosts($_GET['id']) gemacht, nun bekomme ich meinen Return. Wie mach ich das genau mit der Foreach Schleife?
                1. Die "getPosts" Methode sollte IMMER ein Array zurückliefern (leer oder gefüllt).
                2. Nachdem die "getPosts" aufgerufen wurde, wird der Rückgabewert überprüft. Wenn "leer" => Meldung, wenn gefüllt => foreach Schleife.
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar


                • #9
                  Oder einfach . . .

                  PHP-Code:
                  public function getPosts($topic_id) {
                   
                  // Code . . .
                   
                  else{
                        return array(
                  "Es hat noch niemand zu diesem Post einen Beitrag geschrieben!");
                       }

                  Gruß

                  Kommentar


                  • #10
                    Zitat von Günni Beitrag anzeigen
                    Oder einfach . . .

                    PHP-Code:
                    public function getPosts($topic_id) {
                     
                    // Code . . .
                     
                    else{
                          return array(
                    "Es hat noch niemand zu diesem Post einen Beitrag geschrieben!");
                         }

                    Gruß
                    Nein. Die Methode getPosts() gibt die Posts eines Forum-Threads zurück - und zwar nur Posts eines Forums-Threads. Keine Messages.

                    Bei dem Aufruf deiner Methode kann man sich nie sicher sein was der Rückgabewert nun genau sein wird.

                    Kommentar


                    • #11
                      Zitat von tr0y Beitrag anzeigen
                      Warum antwortet ein Postings-Getter mit einem String wenn man von ihm eigentlich erwartet ein Array, das optional Posts enthält, zurückzugeben ?

                      Ich würde die ganze Methode überdenken, wenn ich du wär.
                      Zitat von lstegelitz Beitrag anzeigen
                      1. Die "getPosts" Methode sollte IMMER ein Array zurückliefern (leer oder gefüllt).
                      2. Nachdem die "getPosts" aufgerufen wurde, wird der Rückgabewert überprüft. Wenn "leer" => Meldung, wenn gefüllt => foreach Schleife.
                      Zitat von jprangenberg Beitrag anzeigen
                      Nein. Die Methode getPosts gibt die Posts eines Forum-Threads zurück - und zwar nur Posts eines Forums. Keine Messages. Eine Methode hat genau eine Aufgabe!
                      [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                      Kommentar


                      • #12
                        Würde ich nicht so machen... die Methode heisst "getPosts" und das ist ihre Aufgabe. Ein leeres Array signalisiert von ganz alleine, das noch keine Posts gemacht wurden - ein Array mit einem Eintrag hingegen suggeriert, das tatsächlich ein Post vorhanden ist.

                        edit: zu spät
                        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                        Kommentar


                        • #13
                          Zitat von tr0y Beitrag anzeigen
                          Hups, ich habe den Post von lstegelitz gekonnt überlesen! Sorry!

                          Kommentar


                          • #14
                            // auch mal ne frage
                            Ok, getPosts gibt mir ein array, leer oder gefüllt, wenn sie erfogreich durchgelaufen ist.
                            falls es aber4 zu irgendwelchen problemen kommt, im aufruf der methode(falsche argumente/falsche(r) datentyp/anzahl) oder im erfassen der Posts umstellen der schnittstellen, wathever, wie kann ich dann nen fehler zurückgeben? ne exeption werfen?

                            auch wenn sich das jetzt sehr akademisch anhört,. so kämpfe ich doch ab und an mit sowas.

                            Kommentar


                            • #15
                              Exception werden oder gleich einen Iterator, kein Array zurückgeben, der dann auch eine Meldung enthalten kann.
                              --

                              „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

                              Lädt...
                              X