Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Rückgabewert

Einklappen

Neue Werbung 2019

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

  • Problem mit Rückgabewert

    Hi all,

    ich habe mir grade eine kleine Funktions geschrieben, die mir die "ParentId" eines Menüpunktes zurückliefern soll.
    Eigentlich funktioniert sie auch, aber ich kann seltsamerweiße den Rückgabewert nicht verwenden

    Das Ding sieht so aus:
    Code:
    function getParent($pid)
    {	
    	$strSQL = "SELECT pid, uid FROM tbl_faqbaum WHERE uid = '$pid';";
    	$id = mysql_fetch_object(mysql_query($strSQL));
    	if ($id->pid <> 0)
    	{
    	 getParent($id->pid);
    	}
    	else
    	{
    	 echo "Rückgabewert:".$id->uid;
    	 return $id->uid;
    	}
    }
    Der Witz ist das das echo ausgegeben wird und der Rückgabewert an sich stimmt, wenn ich jetzt allerdings einer Variablen das Ergebnis zuweisen will um damit zu arbeiten <? $intId = getParent(6) ?> funktioniert es nicht und die Var. bleibt leer.

    Iirgendwie stehe ich auf dem schlauch wo mein Fehler liegt. Wahrscheinlich wird es wieder was saublödes sein, aber ich bin echt genervt mittlerweile weil ich es einfach net finde und hoffe ihr könnt mir weiterhelfen!
    Vielen Dank,
    greets ben


  • #2
    Code:
    return getParent($id->pid)
    ...würde ich auf den ersten Blick sagen. Und äh was isn <>??

    Kommentar


    • #3
      <> == !=
      Developers-Guide.net
      Senseless

      Kommentar


      • #4
        Zitat von Zergling
        Und äh was isn <>??
        !=

        Kommentar


        • #5
          hab ich doch gesagt.
          wobei ==!== besser finde
          Developers-Guide.net
          Senseless

          Kommentar


          • #6
            jo leute,

            danke für eure "hilfreichen" antworten.
            Könnt ihr net bidde n extra-thread aufmachen wenn ihr hier über Vergleichsopratoeren diskuieren wollt aufmachen ?

            Fände es nämlich fett wenn für die Leute die vieleicht mal ne gescheite Antwort zu sagen haben sich nich durch den Müll kämpfen müssen.

            Danke,
            Ben

            Kommentar


            • #7
              Du hast die gewünschte Antwort doch schon.

              Kommentar


              • #8
                Re: Problem mit Rückgabewert

                Zitat von BennySHS
                Code:
                function getParent($pid)
                {	
                	$strSQL = "SELECT pid, uid FROM tbl_faqbaum WHERE uid = '$pid';";
                	$id = mysql_fetch_object(mysql_query($strSQL));
                	if ($id->pid <> 0)
                	{
                	 getParent($id->pid);
                	}
                	else
                	{
                	 echo "Rückgabewert:".$id->uid;
                	 return $id->uid;
                	}
                }
                Ich habe dir bereits geantwortet. Was
                Code:
                echo "Rückgabewert:".$id->uid;
                return $id->uid;
                Soll weiß ich absolut nicht, entweder echo oder return, aber nicht beides. Und wenn $id->pid != 0 (oder von mir aus <> 0) ist, machst du ein GetParent ins Leere! Zwar wird echo ausgeführt, aber du hast bereits den return "verschlafen" ^^

                Also bitte Antworten durchlesen und ausprobieren bevor du meckerst.

                Abgesehen davon ist deine Tabellen-Struktur schlecht gewählt. Was ist, wenn es nun richtig schön tiefe Antwort-Bäume gibt, dann hangelst du dich den ganzen Weg so nach oben??

                Kommentar


                • #9
                  Tja scheinbar sieht er vor lauter "Müll" den eigentlichen "Wert" nicht.

                  Naja wer schon die erste Antwort nicht mehr richtig liest, hat es schon schwer...
                  Developers-Guide.net
                  Senseless

                  Kommentar


                  • #10
                    moin nochmals =)

                    Saraneus schrieb:
                    Du hast die gewünschte Antwort doch schon.
                    Die einzige Antwort die ich bekommen habe, war das ich den Rückgabewert auf
                    return getParent($id->pid)
                    ändern soll. Habe ich natürlich ausprobiert, und es endet darin das Apache abschmiert. Ich will ja auch keinnen Funktionsaufruf zurückgeben, sondern einen Wert.

                    Zergling schrieb:
                    Ich habe dir bereits geantwortet. Was
                    Code:
                    echo "Rückgabewert:".$id->uid;
                    return $id->uid;

                    Soll weiß ich absolut nicht, entweder echo oder return, aber nicht beides.
                    Das echo war lediglich da um zu überprüfen ob die Funktion den erwünschten Wert zurückliefert. Das tut sie auch.
                    Außerdem wäre es mir neu das es verboten ist vor einem Return-Statement mit echo eine Textausgabe zu machen - ich lasse mich aber gerene eines besseren belehren.
                    Auf jeden Fall funktioniert es mit oder ohne echo nicht.


                    Zergling schrieb:
                    Und wenn $id->pid != 0 (oder von mir aus <> 0) ist, machst du ein GetParent ins Leere! Zwar wird echo ausgeführt, aber du hast bereits den return "verschlafen" ^^
                    Also wenn $id->pid != 0 bedeutet das, das dieses Element noch ein übergordnetes Element hat, worauf hin die Funktion erneut aufgerufen wird.
                    Wie ich bereits geschrieben habe, die Funktion liefer mir das richtige Ergebnis zurück, was ja durch die korrekte ausgabe des echos bewiesen sein sollte.
                    Warum die Funktion aber ihren Wert nicht zurückgeben kann weiß ich immer noch nicht. (am echo liegt es nicht ^^)

                    Zergling schrieb:
                    Also bitte Antworten durchlesen und ausprobieren bevor du meckerst.
                    Jo hab ich ja ausprobiert, und es geht nicht.


                    Zergling schrieb:
                    Abgesehen davon ist deine Tabellen-Struktur schlecht gewählt. Was ist, wenn es nun richtig schön tiefe Antwort-Bäume gibt, dann hangelst du dich den ganzen Weg so nach oben??
                    Vieleicht ist es nicht die megageek-lösung, aber wenn doch recht große Projekte wie Typo3 die selbe Struktur benutzen, mach ich mir da wegen der Performance keine gedanken.

                    Greets,
                    ben

                    Kommentar


                    • #11
                      Zitat von BennySHS
                      Ich will ja auch keinnen Funktionsaufruf zurückgeben, sondern einen Wert.
                      Warum rufst du dann getParent rekursiv auf und verwendest den Rückgabewert nicht?

                      Kommentar


                      • #12
                        Ich wette du hast Zergling falsch verstanden und das gemacht:
                        PHP-Code:
                        <?php
                        function getParent($pid)
                        {   
                           
                        $strSQL "SELECT pid, uid FROM tbl_faqbaum WHERE uid = '$pid';";
                           
                        $id mysql_fetch_object(mysql_query($strSQL));
                           if (
                        $id->pid <> 0)
                           {
                            
                        getParent($id->pid);
                           }
                           else
                           {
                            echo 
                        "Rückgabewert:".$id->uid;
                            return 
                        getParent($id->uid);
                           }
                        }
                        ?>
                        das schmiert ab, ist klar weil: endlosschleife

                        das wäre aber korrekt:
                        PHP-Code:
                        <?php
                        function getParent($pid)
                        {   
                           
                        $strSQL "SELECT pid, uid FROM tbl_faqbaum WHERE uid = '$pid';";
                           
                        $id mysql_fetch_object(mysql_query($strSQL));
                           if (
                        $id->pid <> 0)
                           {
                            return 
                        getParent($id->pid);
                           }
                           else
                           {
                            echo 
                        "Rückgabewert:".$id->uid;
                            return 
                        $id->uid;
                           }
                        }
                        ?>
                        Wer eine Antwort auch noch umsetzen kann, ist besser dran...
                        Developers-Guide.net
                        Senseless

                        Kommentar


                        • #13
                          Zerpflück ihn doch nicht gleich mit einer Vermutung. Außerdem hat er Recht damit, dass einige Beiträge offtopic und damit störend sind.

                          Kommentar


                          • #14
                            Dass Typo3 die Struktur verwendet kann ja sein, aber die verwenden wohl kaum diese getParent() Funktion


                            Warren hat dir die Lösung jetzt gepostet, genau wie ich es meinte, müsste so funktionieren. Abgesehen davon ist es einfach schlechter Stil, echo/print und return zu mischen, noch dazu wenn echo praktisch das selbe ausgibt wie return liefert.


                            Ein


                            PHP-Code:
                            <?php  
                            printf
                            ("Rückgabewert: %u"$id getParent(15));  
                            ?>

                            wäre sauberer und eindeutiger. Außerdem verstehe ich nicht was die Ausgabe überhaupt soll, sie wird ja wohl immer 0 sein ^^

                            Kommentar


                            • #15
                              Oh mann, vielleicht steht das echo nur zu Debugzwecken drin. Liegt doch nahe, wenn was nicht funktioniert

                              Kommentar

                              Lädt...
                              X