AnalphaBestie: variable aus einer funktion in einer neue übergeben...

Hallo alle.

Ich habe 2 funktionen, einmal shownews() und einmal showcoments().

Ich möchte nun in der showcoments() die $newsid haben, die aber in den shownews() steht ;).

$scom = "select * from newscoments WHERE zu=".$newsid." order by id desc ";

so gehts leider net...
Kann mir jemand sagen wie dann ?

MFG AnalphaBestie

  1. Hi,

    Ich möchte nun in der showcoments() die $newsid haben, die aber in den shownews() steht ;).

    wenn beide Funktionen aus dem selben Scope aufgerufen werden, gibt es genau einen (sauberen) Weg:

    • shownews() liefert $newsid als Rückgabewert zurück,
    • showcomments() erwartet einen entsprechenden Übergabeparameter.

    Cheatah

    1. Hi,

      Moin

      Ich möchte nun in der showcoments() die $newsid haben, die aber in den shownews() steht ;).

      wenn beide Funktionen aus dem selben Scope aufgerufen werden, gibt es genau einen (sauberen) Weg:

      • shownews() liefert $newsid als Rückgabewert zurück,
      • showcomments() erwartet einen entsprechenden Übergabeparameter.

      häää ??? ich habe nix verstanden.
      also wirklich.... nix!

      Cheatah

      AnalphaBestie

      1. Hi,

        • shownews() liefert $newsid als Rückgabewert zurück,
        • showcomments() erwartet einen entsprechenden Übergabeparameter.

        häää ??? ich habe nix verstanden.

        hm. Die Begriffe sollten eigentlich in Programmier-Grundkenntnissen vorhanden sein. Im Code macht sich das etwa so bemerkbar:

        ...
        $x = shownews();
        ...
        showcomments($x);
        ...
        function shownews() {
          ...
          return $newsid;
        }

        Cheatah

        1. Hallo!

          hm. Die Begriffe sollten eigentlich in Programmier-Grundkenntnissen vorhanden sein. Im Code macht sich das etwa so bemerkbar:

          kommt wohl daher das PHP meist von Leuten ohne Programmier-Grundkenntnisse verwendet wird ;-)

          Aber dann tun wir mal was für die Grundlagen: Was bedeutet "Scope"?

          Grüße
          Andreas

          1. Halihallo Andreas

            hm. Die Begriffe sollten eigentlich in Programmier-Grundkenntnissen vorhanden sein. Im Code macht sich das etwa so bemerkbar:

            kommt wohl daher das PHP meist von Leuten ohne Programmier-Grundkenntnisse verwendet wird ;-)

            I wo... ;)

            Aber dann tun wir mal was für die Grundlagen: Was bedeutet "Scope"?

            Namensraum oder Block. Wenn du zwei Variablen hast, die in derselben Prozedur definiert sind gehören sie zwingend auch zum selben Scope.

            Viele Grüsse

            Philipp

            1. Hallo!

              Aber dann tun wir mal was für die Grundlagen: Was bedeutet "Scope"?

              Namensraum oder Block. Wenn du zwei Variablen hast, die in derselben Prozedur definiert sind gehören sie zwingend auch zum selben Scope.

              Prozedur ist dasselbe wie eine Funktion, oder? Werden die Funktionen in PERL nicht so genannt? Aber wenigstens in VB! Aber ich verstehe.

              Grüße
              Andreas

              PS: Aber man kann ja auch aus einer Funktion auf eine andere zugreifen!

              1. Hi,

                PS: Aber man kann ja auch aus einer Funktion auf eine andere zugreifen!

                das liegt daran, dass beide Funktionen im globalen Scope liegen. Es gibt (viele) Sprachkonzepte, die Funktionen in Funktionen erlauben - dann kannst Du von einer anderen, ganz außen liegenden Funktion nicht auf die innen liegende zugreifen (manche erlauben das dann wieder in Form von Objektpfaden o.ä.).

                Wichtig ist, dass man selbst den Überblick darüber behält, welche Objekte - Variablen, Funktionen, Klassen, ... - an welcher Stelle verfügbar sind.

                Cheatah

                1. so nun nochmal, vertanden habe ichs noch net
                  das ist der quelltext:

                  function shownews() { // wennn id übergeben - newsdetails

                  $newsresult = mysql_query("SELECT * FROM newsnews WHERE id=".mysql_escape_string($_GET["id"])."");
                          if ($newsrow = mysql_fetch_array($newsresult)) {
                              do {
                                  $newsid = $newsrow[id];
                                  $newsdate = date("$this->dateformat", $newsrow[date]);
                                  $newsposter = $newsrow[poster];
                                  $newsbetreff = $newsrow[betreff];
                                  $newstext = $newsrow[text];
                                  echo "  ID = <b>$newsid</b> <br>
                                          DATE = <b>$newsdate</b> <br>
                                          POSTER = <b>$newsposter</b> <br>
                                          BETREFF = <b>$newsbetreff</b> <br>
                                          NEWS = $newstext <br>\n";
                              } // do
                              while($newsrow = mysql_fetch_array($newsresult));
                          } // if
                          echo "<hr><h3>Comments:</h3>";
                      } // function
                      function showcoments(){
                      $scom = "select * from newscoments order by id desc ";
                      $rcom = mysql_query($scom);
                      $comnum = mysql_num_rows($rcom);
                      for ($i=0;$i<$comnum;$i++)
                     {
                      $ocom = mysql_fetch_object($rcom);
                      echo '<b><a href="mailto:'.$ocom->postermail.'">'.$ocom->poster.'</a></b> '.$ocom->date.'';
                      echo  ' - <a href="http://www.ackro.de/news/admin/newsadmin.php?action=editcoment&id='.$ocom->id.'">Edit</a> | <a href="http://www.ackro.de/news/admin/newsadmin.php?action=delcoment&id='.$ocom->id.'">Delete</a>';
                      echo '<br><br>'.$ocom->text.' ';
                     }

                  }

                  nicht kommplett aber sollte reichen.

                  $scom = "select * from newscoments order by id desc ";
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                  da liegt das problem, WHERE zu=die_news_id_von_shownews

                  ich weiss nicht wie ich ihm erkläre das er die variable $newsid von den shownews zu nehmen hat ;)

                  MFG ANalphaBestie

                  -der nicht wirklich programmierer vorkenntnisse hat :)

                  1. Hi,

                    so nun nochmal, vertanden habe ichs noch net

                    ernstgemeinter Ratschlag: Du solltest einen Informatikkurs belegen. All das, was in diesem Thread gesagt wurde sind Grundlagen, die während des Programmierens jederzeit instinktiv angewendet werden müssen.

                    if ($newsrow = mysql_fetch_array($newsresult)) {
                                do {
                                    $newsid = $newsrow[id];

                    Du deklarierst diese Variable also unter einer bestimmten Bedingung, andernfalls nicht. Es kann ergo nicht mal vorausgesetzt werden, dass sie existiert.

                    ich weiss nicht wie ich ihm erkläre das er die variable $newsid von den shownews zu nehmen hat ;)

                    Den nötigen Code habe ich in </?m=121425&t=21835> quasi direkt nutzbar genannt.

                    -der nicht wirklich programmierer vorkenntnisse hat :)

                    Umso mehr gilt mein Rat von oben :-)

                    Cheatah

                    1. na mal sehen on ichs hinbekomm ;)

                  2. so nun nochmal, vertanden habe ichs noch net
                    das ist der quelltext:

                    als erstes _warum_ verwendest Du beide Funktionen? Warum führst Du den Code nicht direkt aus? Ich denke da liegt das Problem, denn wenn Du bewußt Funktionen einesetzen würdest hättest Du dieses Problem nicht!

                    Oder hast Du das gemacht da Du die Funktionen beide mehrmals aufrufen willst? Vielleicht solltest  Du auch beides in eine Funktion packen, obwohl das so schon logich ist, Du müßtest halt aus der Funktion shownews() heraus an gewünschter Stelle die Funktion showcoments() aufrufen - aber mit enzsprechendem Parameter, also

                    showcoments($newsid)

                    und das müßtest Du unten in der Funktion berücksichtigen

                    function showcoments($newsid){
                        echo "hier ist Deine NewsID: ".$newsid;
                        ....
                    }

                    ich kann Dir nur dringend empfehlen ein bisschen im Manual zu lesen, vor allem das: http://www.php.net/manual/de/functions.php

                    Grüße
                    Andreas

                    <--- Der auch keinerlei Vorkenntnisse hat, nichtmal basic und erst langsam anfängt einige Grundlagen zu verstehen, und der langsam merkt das der unbequemere Weg erst ein paar Grundlagen zu lernen meist der schnellere ist...

            2. Hi Philipp,

              Namensraum oder Block. Wenn du zwei Variablen hast, die in derselben Prozedur definiert sind gehören sie zwingend auch zum selben Scope.

              Wäre da 'Gültigkeitsbereich' vielleicht noch treffender?

              Viele Grüße,
              Martin