Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] SQL-Abfrage zeigt immer nur ein Ergebnis

Einklappen

Neue Werbung 2019

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

  • [Erledigt] SQL-Abfrage zeigt immer nur ein Ergebnis

    Hallo Zusammen,

    ich habe Versucht dieses Tutorial um eine Datenbankanbindung zu erweitern. Leider wird mir immer nur ein Ergebnis angezeigt, obwohl in der Datenbank mehrere vorhanden sind.

    Ich habe die Ausgabe bisher immer so gemacht und wollte diese nun in das MVC Pattern einarbeiten.

    Hier einmal ein bisschen Code:

    index.php
    PHP-Code:
    <?php

    // unsere Klassen einbinden
    include('classes/controller.php');
    include(
    'classes/model.php');
    include(
    'classes/view.php');

    // $_GET und $_POST zusammenfasen, $_COOKIE interessiert uns nicht.
    $request array_merge($_GET$_POST);
    // Controller erstellen
    $controller = new Controller($request);
    // Inhalt der Webanwendung ausgeben.
    echo $controller->display();

    ?>
    controller.php
    PHP-Code:
    <?php

        
    class Controller{

            private 
    $request null;
            private 
    $template '';
            private 
    $view null;

            
    /**
             * Konstruktor, erstellet den Controller.
             *
             * @param Array $request Array aus $_GET & $_POST.
             */
            
    public function __construct($request){
                
    $this->view = new View();
                
    $this->request $request;
                
    $this->template = !empty($request['view']) ? $request['view'] : 'default';
            }

            
    /**
             * Methode zum anzeigen des Contents.
             *
             * @return String Content der Applikation.
             */
            
    public function display(){
                
    $view = new View();
                switch(
    $this->template){
                    case 
    'entry':
                        
    $view->setTemplate('entry');
                        
    $entryid $this->request['id'];
                        
    $entry Model::getEntry($entryid);
                        
    $view->assign('geraetenr'$entry['geraetenr']);
                        
    $view->assign('softwarevers'$entry['softwarevers']);
                        
    $view->assign('hersteller'$entry['hersteller']);
                        
    $view->assign('seriennr'$entry['seriennr']);
                        
    $view->assign('status'$entry['status']);
                        break;
                        
                    case 
    'default':
                    default:
                        
    $entries Model::getEntries();
                        
    $view->setTemplate('default');
                        
    $view->assign('entries'$entries);
                }
                
    $this->view->setTemplate('site');
                
    $this->view->assign('site_title'Geräteverwaltung');
                $this->view->assign('
    site_footer', '&copy2014');
                $this->view->assign('
    site_content', $view->loadTemplate());
                return $this->view->loadTemplate();
            }
        }

    ?>
    model.php
    PHP-Code:
    <?php

        
    /**
         * Klasse für den Datenzugriff
         */

        
    class Model {

            
    /**
             * Gibt alle Einträge zurück.
             *
             * @return Array Array von Einträgen.
             */
            
    public static function getEntries(){
                include 
    'db_connect.php';
                
    $db = new DBConnection();
                
    $sql 'SELECT * FROM scanner ORDER BY id DESC';
                
    $result  $db->runQuery($sql);
                
    $rows $result->num_rows;
                if (
    $rows != 0) {
                    while (
    $row $result->fetch_object()) {
                        
    $entries = array(
                            array(
                                
    "id"            => $row->id
                                
    "geraetenr"    => $row->geraetenr
                                
    "softwarevers"    => $row->softwarevers,
                                
    "hersteller"    => $row->hersteller,
                                
    "seriennr"        => $row->seriennr,
                                
    "status"        => $row->status
                            
    )
                        );
                    }
                }

                return 
    $entries;
            }
        }

    ?>
    view.php
    PHP-Code:
    <?php

        
    class View{

            
    // Pfad zum Template
            
    private $path 'templates';
            
    // Name des Templates, in dem Fall das Standardtemplate.
            
    private $template 'default';

            
    /**
             * Enthält die Variablen, die in das Template eingebetet
             * werden sollen.
             */
            
    private $_ = array();

            
    /**
             * Ordnet eine Variable einem bestimmten Schl&uuml;ssel zu.
             *
             * @param String $key Schlüssel
             * @param String $value Variable
             */
            
    public function assign($key$value){
                
    $this->_[$key] = $value;
            }


            
    /**
             * Setzt den Namen des Templates.
             *
             * @param String $template Name des Templates.
             */
            
    public function setTemplate($template 'default'){
                
    $this->template $template;
            }


            
    /**
             * Das Template-File laden und zurückgeben
             *
             * @param string $tpl Der Name des Template-Files (falls es nicht vorher 
             *                         über steTemplate() zugewiesen wurde).
             * @return string Der Output des Templates.
             */
            
    public function loadTemplate(){
                
    $tpl $this->template;
                
    // Pfad zum Template erstellen & überprüfen ob das Template existiert.
                
    $file $this->path DIRECTORY_SEPARATOR $tpl '.php';
                
    $exists file_exists($file);

                if (
    $exists){
                    
    // Der Output des Scripts wird n einen Buffer gespeichert, d.h.
                    // nicht gleich ausgegeben.
                    
    ob_start();

                    
    // Das Template-File wird eingebunden und dessen Ausgabe in
                    // $output gespeichert.
                    
    include $file;
                    
    $output ob_get_contents();
                    
    ob_end_clean();
                        
                    
    // Output zurückgeben.
                    
    return $output;
                }
                else {
                    
    // Template-File existiert nicht-> Fehlermeldung.
                    
    return 'could not find template';
                }
            }
        }
        
    ?>
    default.php
    PHP-Code:
    <table>
        <caption>Scanner:</caption>
        <thead>
            <tr>
                <th align="center">ID</th>
                <th align="center">Gerätenummer</th>
                <th align="center">Softwareversion</th>
                <th align="center">Hersteller</th>
                <th align="center">Seriennummer</th>
                <th align="center">Status</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <?php
                    
    foreach($this->_['entries'] as $entry){
                
    ?>
                        <td align="center"><?php echo $entry['id']; ?></td>
                        <td align="center"><?php echo $entry['geraetenr']; ?></td>
                        <td align="center"><?php echo $entry['softwarevers']; ?></td>
                        <td align="center"><?php echo $entry['hersteller']; ?></td>
                        <td align="center"><?php echo $entry['seriennr']; ?></td>
                        <td align="center"><?php echo $entry['status']; ?></td>
                <?php
                    
    }
                
    ?>
            </tr>
        </tbody>
    </table>
    Die Abfrage soll solange laufen, wie Einträge vorhanden sind. Das tut sie auch wenn ich das ganze ohne das Pattern mache... Wo liegt mein Denkfehler? Kann mir Jemand auf die Sprünge helfen?

    Gruß
    derAzubi


  • #2
    Wie wärs wenn du nur den relevanten Code postest? Ansonsten die Zuweisung in der while-Schleife in model.php sieht nicht korrekt aus und wirft im schlimmsten Fall sogar eine Meldung das $entries nicht definiert ist.

    btw. Mit dem Tutorial hätte ich spätestens nach array_merge($_GET, $_POST) aufgehört.

    Kommentar


    • #3
      Zitat von Tropi Beitrag anzeigen
      Wie wärs wenn du nur den relevanten Code postest? Ansonsten die Zuweisung in der while-Schleife in model.php sieht nicht korrekt aus und wirft im schlimmsten Fall sogar eine Meldung das $entries nicht definiert ist.

      btw. Mit dem Tutorial hätte ich spätestens nach array_merge($_GET, $_POST) aufgehört.
      Was sieht denn für dich nicht korrekt aus? Solange in $row die Einträge aus $result zugewiesen werden, schreibe die Einträge in ein 2 Dim Array. Habe ich da einen Denkfehler?

      Zu dem Tutorial:
      Es war das einzige, welches das Pattern leicht verständlich erklärt hat. Hast du eventuell ein besseres zur Hand?

      Gruß

      Edit: Ich werd das nächste mal drauf achten, dass ich nur die wichtigen Stellen poste! Sry!

      Kommentar


      • #4
        Zitat von derAzubi Beitrag anzeigen
        Was sieht denn für dich nicht korrekt aus? Solange in $row die Einträge aus $result zugewiesen werden, schreibe die Einträge in ein 2 Dim Array. Habe ich da einen Denkfehler?
        Ja, denn du überschreibst das Array bei jedem Durchlauf, anstatt ein zusätzliches Element hinzuzufügen.

        Zitat von derAzubi Beitrag anzeigen
        Zu dem Tutorial:
        Es war das einzige, welches das Pattern leicht verständlich erklärt hat. Hast du eventuell ein besseres zur Hand?
        Nicht zur Hand. Aber es gibt hier einen gepinnten Thread zu Grundlagen und ansonsten findet sich mit dem Stichwort "MVC" hier im Board sicher auch einiges.

        Kommentar


        • #5
          Kein Denkfehler, aber den Gedanken falsch umgesetzt. Denke ich.

          PHP-Code:
          if ($rows != 0) { 
                          while (
          $row $result->fetch_object()) { 
                              
          $entries = array( 
                                  array( 
                                      
          "id"            => $row->id,  
                                      
          "geraetenr"    => $row->geraetenr,  
                                      
          "softwarevers"    => $row->softwarevers
                                      
          "hersteller"    => $row->hersteller
                                      
          "seriennr"        => $row->seriennr
                                      
          "status"        => $row->status 
                                  

                              ); 
                          } 
                      } 

                      return 
          $entries;

          // entspricht:
          $test = array(
              array(
          'test1'=> 1)
          );
          $test = array(
              array(
          'test2'=> 2)
          );
          $test = array(
              array(
          'test3'=> 3)
          );
          echo 
          'Elemente im Array $test: '.count($test); // 1 
          Du überschreibst dein return-Array jedes mal.

          Too late, nvm.
          Was passiert in deinem Programm eigentlich, wenn nichts returned wird?
          Relax, you're doing fine.
          RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

          Kommentar


          • #6
            Zitat von Tropi Beitrag anzeigen
            Ja, denn du überschreibst das Array bei jedem Durchlauf, anstatt ein zusätzliches Element hinzuzufügen.
            Vielen lieben Dank! Ich weiß nicht warum, aber mir ist es einfach nicht aufgefallen... $result->fetch_assoc() und $entries[] = $row bringt hier das richtige Ergebnis zum Vorschein.

            Zitat von Tropi Beitrag anzeigen
            Nicht zur Hand. Aber es gibt hier einen gepinnten Thread zu Grundlagen und ansonsten findet sich mit dem Stichwort "MVC" hier im Board sicher auch einiges.
            Ich werde mal ein bisschen rumstöbern. Der Grundlagen Thread ist schon mal ein guter Einstieg. Vielen Dank für den Tipp!

            Gruß

            Kommentar

            Lädt...
            X