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
controller.php
model.php
view.php
default.php
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
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();
?>
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', '© 2014');
$this->view->assign('site_content', $view->loadTemplate());
return $this->view->loadTemplate();
}
}
?>
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;
}
}
?>
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ü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';
}
}
}
?>
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>
Gruß
derAzubi
Kommentar