array von a.php nach b.php



  • MAG schrieb:

    Ist foobar.php eine komplett andere Datei, oder wurde da vorher die andere irgendwie eingebunden?

    also in der foobar.php ist die datei foo.inc schon über ein include mit eingebunden



  • Zum einen überschreibst Du $myarr bei jedem Schleifendurchlauf mit dem aktuellen Datensatz, was zur Folge hat, dass bei der letzten Zuweisung $myarr == false ist, da mysql_fetch_array false zurückliefert, wenn kein Datensatz mehr vorhanden ist. Zweitens müsstest Du afaik $_GLOBALS und nicht $GLOBALS verwenden.

    Dein Code müsste also ca. so aussehen (ungetestet):

    class foo
    {
       global myarr;
    
       public function zeige()
       {
          // verbinde zu server etc.
          while( $row = mysql_fetch_array( $abfrage ) )
          {
             array_push($_GLOBALS["myarr"], $row);
             echo "<td>{$myarr['etwas']}</td>";
             // usw. - hier wird halt das array gefuellt ...
          }
       }
    
       public function groesse()
       {
          echo sizeof( $_GLOBALS["myarr"];
       }
    }
    

    Falls Du aber nur einen Datensatz ausliest, dann würde ich die while-Schleife durch eine Bedingung ersetzen:

    class foo
    {
       global myarr;
    
       public function zeige()
       {
          // verbinde zu server etc.
          if ( $_GLOBALS["myarr"] = mysql_fetch_array( $abfrage ) )
          {
             echo "<td>{$myarr['etwas']}</td>";
             // usw. - hier wird halt das array gefuellt ...
          }
       }
    
       public function groesse()
       {
          echo sizeof( $_GLOBALS["myarr"];
       }
    }
    


  • $GLOBALS sollte schon stimmen -> http://www.php.net/global
    Ansonsten sollte der Code von mantiz so klappen...



  • Ups, hätte ich doch nochmal nachgesehen. Das kommt davon, wenn man nicht mit globalen Variablen arbeitet, dann weiß man sowas nicht. 🙂

    Also, $GLOBALS sollte dann doch richtig sein, sorry.

    Danke für die Berichtigung. 🙂



  • erstmal danke für die antworten!

    woran könnte es liegen, wenn als fehlermeldung dann erscheint:
    First argument should be an array in... ?

    habe schon versucht die variable innerhalb der klasse global auch folgendermaßen zu deklarieren:

    var $myarr = array();
    

    gibt es da noch irgendwas zu beachten?



  • Wie sieht dein Code denn mittlerweile aus?



  • momentan sieht es so aus:

    foo.inc

    class foo
    {
       var $myarr = array();
    
       public function zeige()
       {
          // verbinde zu server etc.
          while( $row = mysql_fetch_array( $result ) )
          {
             array_push( $GLOBALS["myarr"], $row );
             echo "<td>{$myarr['etwas']}</td>";
             // usw. - hier wird halt das array gefuellt ...
          }
       }
    
       public function groesse()
       {
          echo sizeof( $GLOBALS["myarr"];
       }
    }
    

    der rest hat sich eigentlich nicht geändert - halt nur die sache mit dem array_push ist hinzugekommen.

    er ließt übrigens auch die anzahl der datensätze richtig aus. es wird also eine tabelle erstellt. nur halt ohne inhalt und mit der fehlermeldung, dass das erste argument in der array_push-funktion ein array sein sollte.



  • Wenn du auf das $myarr einer Foo-Instanz zugreifen willst, brauchst du $this->myarr



  • Ich führe es nochmal etwas aus.

    Du speicherst in der globalen Variablen $myarr eine Liste der Datensätze bzw. willst es tun. 🙂
    Innerhalb der Klasse legst Du eine Membervariable $myarr an, die mit der globalen Variable aber nichts zu tun hat. Da ich jetzt nicht genau weiß welche der beiden Variablen Du für die Liste der Datensätze nutzen möchtest hier beide Möglichkeiten:
    1. Du initialisiert die Variable $GLOBALS['myarr'] innerhalb von zeige()

    public function zeige()
       {
          $GLOBALS['myarr'] = array();
          // verbinde zu server etc.
          while( $row = mysql_fetch_array( $result ) )
          {
             array_push( $GLOBALS["myarr"], $row );
             echo "<td>{$myarr['etwas']}</td>";
             // usw. - hier wird halt das array gefuellt ...
          }
       }
    

    2. Du verwendest die Membervariable

    public function zeige()
       {
          // verbinde zu server etc.
          while( $row = mysql_fetch_array( $result ) )
          {
             array_push( $this->myarr, $row );
             echo "<td>{$this->myarr['etwas']}</td>";
             // usw. - hier wird halt das array gefuellt ...
          }
       }
    

    Hierfür benötigst Du natürlich ein Objekt der Klasse, oder Du machst die Variable static.

    Eine weitere Möglichkeit bestünde darin, dass Du alles lässt, wie es ist, aber vor dem Aufruf von zeige() dafür sorgst, dass $GLOBALS['myarr'] ein Array ist.

    Evtl. als Tip, ich mache es eigentlich immer so, wenn ich Datensätze aus ner DB hole:

    function listRecords() {
        // SQL-Statement
        $list = array();
        while ($row = mysql_fetch_assoc($result)) {
            array_push($list, $row);
        }
        return $list;
    }
    

    Dann könnte man eine eigene Funktion zeige() schreiben, die so aussehen könnte:

    function zeige($list) {
        foreach ($list as $key => $row) {
            echo '<tr>';
            echo '<td>' . $row['etwas'] . '</td>';
            // weitere Felder ausgeben
            echo '</tr>';
        }
    }
    

    Vorteil hierbei wäre, dass Du das holen der Datensätze und die Anzeige derer getrennt hast.



  • also erstmal vielen dank euch für die hilfreichen beiträge! 🙂
    mitlerweile funktioniert es nach der letzten anleitung. stand anscheined selbst etwas auf der langen leitung... 🙄


Anmelden zum Antworten