[OOP] Array das durch while ging zurückgeben

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

  • [OOP] Array das durch while ging zurückgeben

    Hallo,

    da ich im Moment dabei bin meine doch sehr zargen OOP Kenntnisse zu vertiefen bin ich dabei ein kleines CMS zu schreiben nur leider habe ich am Anfang schon einige Probleme. Und zwar hole ich aus einer Datenbank (MySQL) Artikel die ich per while alle ausgeben oder besser in einem Array speichern will, um sie später Smarty zu übergeben.

    Nur leider funktioniert das Ganze nicht ganz, da ich keine Array zurückgegeben bekommen sondern nen boolean mit false und ich weiß absoluut nicht warum. Aber ich werde mal den Snibbel der Klasse posten damit man sich das mal ansehen kann.

    PHP-Code:
    function artikel($aId=-1)
            {
                
    $this->db=new database(WPCMS_DB_HOST,WPCMS_DB_USER,WPCMS_DB_PW,WPCMS_DB_DATABASE);    
                if (
    is_array($aId))
                {
                    
    $this->prepareData($aId);    
                }
            }
        function 
    getArticle()
            {
                
    $sql="SELECT * FROM artikel";
                
    $result=$this->db->query($sql);
                while (
    $row=$this->db->fetchArray($result))
                {
                    
    //multiarray erzeugen um auf die Spaltennamen zuzugreifen 
                    
    $row[]= new artikel($row);                    
                }
                echo 
    var_dump($row);
                return 
    $row;                
            }
            
            
            function 
    prepareData($array)
            {
                foreach (
    $array as $key=>$value)
                {
                    
    $this->$key $value;
                }    
            } 
    Bin für jede Hilfe dankbar würde mich vielleicht auch über nen Snibbel freuen der sowas mal ungefähr zeigt wie das funktionieren könnte.

  • #2
    Hallo Proggy,

    so geht es nicht.
    in der while-Schleife überschreibst du $row bei jedem Durchlauf;
    nachdem alle Zeilen der Artikel-Tabelle durch sind, gibt fetchArray() false zurück anstatt eines assoziativen Array, weil einfach keine Datensätze mehr da sind;

    Ich hab' noch nicht verstanden, was Du willst aber probiere folgendes

    PHP-Code:
    function getArticle()
            {
                
    $aReturn=array();
                
    $sql="SELECT * FROM artikel";
                
    $result=$this->db->query($sql);
                while (
    $row=$this->db->fetchArray($result))
                {
                    
    //multiarray erzeugen um auf die Spaltennamen zuzugreifen 
                    
    $aReturn[]= new artikel($row);                    
                }
                
    //echo var_dump($row);
                
    return ($aReturn);                
            } 
    nice day
    Quickborner

    Kommentar


    • #3
      Hallo danke erstmal für deine Antwort, dass sieht schonmal besser aus nur leider habe ich jetzt das Problem, dass wenn ich das außerhalb der Klasse durch foreach laufen lasse habe ich die beiden Objecte einmal die der DB und denn die von der Artikelklasse.

      Ich hatte eigentlich vor durch
      PHP-Code:
      $row[]=new artikel
      das Array $row durch forach laufen zu lassen in getArray() um die Schlüssel als Eigenschaft in der Klasse zu haben und um später nochmal drauf zugreifen zu können (wenn ich sie denn endlich mal ausgegeben bekomme. ).

      Später wird denn im Script welches auf die Klasse zugreift eine weitere Methode aufgerufen um eine Variable mit Werten zu belegen die ich in Smarty denn ausgeben kann.

      Also ungefähr so
      PHP-Code:
      <?PHP 
      $art
      =new artikel;
      $artArray=$art->getArticle();
      foreach (
      $artArray as $key=>$value)
      {
        
      $value=$art->prepareData;
      }
      ?>
      Ich hoffe ich habe das einigermaßen verständlich ausgedrückt.

      Kommentar


      • #4
        Hat sich erledigt ich habe nen Snibbel in der Internet Pro von diesem Monat gefunden, wenns jemanden interessiert der kann mir ja ne PN schicken.

        Kommentar


        • #5
          Original geschrieben von Proggy
          Hat sich erledigt ich habe nen Snibbel in der Internet Pro von diesem Monat gefunden, wenns jemanden interessiert der kann mir ja ne PN schicken.
          pn's sind nur für user mit * aktiviert ... warum postest du den snippet nicht einfach?
          Kissolino.com

          Kommentar


          • #6
            Achso das wust ich nicht (ja ich weiß ich hät nachschauen können )

            Hmm ob die das witzig finden wenn man den Code einfach postet... ach egal ich machs einfach. *gg*
            PHP-Code:
            <?php
              
            class anzeigen {
                private 
            $aufruf;
                function 
            __construct() {
                  
            $this->aufruf = new abfrage("localhost""root""***""***");
                }
                function 
            __destruct() {
                  unset(
            $this->aufruf);
                }
                function 
            bereitstellen() {
                  
            $abfrage $this->aufruf->abfragen("SELECT * FROM artikel");
                  
            $ergebnisse = array();
                  
            $i 0;
                  while (
            $ergebnis $abfrage->fetch_assoc()) {
                    
            $datum strtotime($ergebnis["datum"]);
                    
            $differenz mktime() - $datum;
                    if(
            $differenz < (120 24 60 60)) {
                      
            $ergebnisse[$i] = $ergebnis;
                      
            $i++;
                    }
                  }
                  return 
            $ergebnisse;
                }
                function 
            bereitstellen_alle() {
                  
            $abfrage $this->aufruf->abfragen("SELECT * FROM artikel");
                  
            $ergebnisse = array();
                  
            $i 0;
                  while (
            $ergebnis $abfrage->fetch_assoc()) {
                    
            $ergebnisse[$i] = $ergebnis;
                    
            $i++;
                  }
                  return 
            $ergebnisse;
                }
                function 
            formatieren($ergebnisse$css 1) {
                  
            $news "";
                  if (
            $css) {
                    foreach (
            $ergebnisse as $ergebnis) {
                      
            $titel html_entity_decode($ergebnis["titel"], ENT_QUOTES);
                      
            $inhalt html_entity_decode($ergebnis["inhalt"], ENT_QUOTES);
                      
            $news .= "<span class='titel'>";
                      
            $news .= $titel "</span><br />";
                      
            $news .= "<span class='inhalt'>";
                      
            $news .= $inhalt "</span><br />";
                    }
                  } else {
                    
            $news .= "<table><tr><th>Titel</th><th>Inhalt</th></tr>";
                    foreach (
            $ergebnisse as $ergebnis) {
                      
            $titel html_entity_decode($ergebnis["titel"], ENT_QUOTES);
                      
            $inhalt html_entity_decode($ergebnis["inhalt"], ENT_QUOTES);        
                      
            $news .= "<tr><td>" .  $titel;
                      
            $news .= "</td><td>" $inhalt;
                      
            $news .= "</td></tr>";
                    }
                    
            $news .= "</table>";
                  }
                  return 
            $news;      
                }
                function 
            formatieren_bearbeiten($ergebnisse) {
                  
            $news "";
                  foreach (
            $ergebnisse as $ergebnis) {
                    
            $titel html_entity_decode($ergebnis["titel"], ENT_QUOTES);
                    
            $inhalt html_entity_decode($ergebnis["inhalt"], ENT_QUOTES);
                    
            $news .= "<a href='bearbeiten.php?datei=" urlencode($ergebnis["id"]) . "'>";
                    
            $news .= $titel "</a><br />";
                    
            $news .= "<span class='inhalt'>";
                    
            $news .= $inhalt "</span><br />";
                  }
                  return 
            $news;      
                }
              }
            ?>
            PS: ist aber ne PHP 5 Version bei 4 müssen nen paar kleine Änderungen vorgenommen werden.
            EDIT:
            benutzername und passwort entfernt von mrhappiness
            Zuletzt geändert von mrhappiness; 08.09.2004, 16:14.

            Kommentar

            Lädt...
            X