graffcon
Mitglied
Hallo Leute,
ich bin noch nicht sehr bewandert in OOP unter PHP . Bei der Umarbeitung eines kleinen prozedural programmierten News-Systems zu OOP bin ich auf folgendes Problem gestoßen.
Die Klasse news sorgt für die Ausgabe der News-Meldungen und enthält eine Blätterfunktion.
Die Klasse Database sorgt für die Datenbankverbindung:
Die Datei vars.inc enthält die Zugangsdaten:
Das Anwendungsskript sieht wie folgt aus:
Ich habe in dem gesamten Code keinen syntaktischen Fehler finden können. Wo steckt der logische Fehler?
Danke schon mal im Vorraus, an die, die mir helfen können...
mfg
Graffcon
ich bin noch nicht sehr bewandert in OOP unter PHP . Bei der Umarbeitung eines kleinen prozedural programmierten News-Systems zu OOP bin ich auf folgendes Problem gestoßen.
Die Klasse news sorgt für die Ausgabe der News-Meldungen und enthält eine Blätterfunktion.
PHP:
<?php
/* Datei: news.class
* Zweck: Enthält Methoden, um News-Meldungen anzuzeigen
*/
class News
{
private $pos;
private $count = "5";
private $table;
private $cxn;
function __construct( mysqli $cxn,$table_name)
{
$this->cxn = $cxn;
if(is_string($table_name))
{
$sql = "SHOW TABLES LIKE '$table_name'";
$result = $this->cxn->query($sql);
if($result->num_rows < 1)
{
throw new Exception("$table_name ist keine gültige Tabelle in der Datenbank!<br>");
return FALSE;
}
else
{
$this->table = $table_name;
}
}
else
{
throw new Exception("Der zweite Parameter ist keine gültige Tabelle!");
return FALSE;
}
}
function show_news()
{
$pos = $this->setPos();
$count = $this->count;
$sql = "SELECT * FROM $this->table ORDER BY news_datetime DESC LIMIT $pos,$count";
if(!$query = $this->cxn->query($sql))
{
throw new Exception("Konnte Abfrage nicht starten!<br>".$this->cxn->error);
return FALSE;
}
else
{
while($news = mysqli_fetch_array($query))
{
$ts=$news['news_datetime'];
$unixtime = mktime(substr($ts,11,12),substr($ts,14,15),substr($ts,17,18),substr($ts,5,6),substr($ts,8,9),substr($ts,0,4));
echo "<table border=\"1\" style=\"border-style: solid\" cellspacing=2 cellpadding=10 width=\"400\" align=\"center\">\n
<tr>\n
<td width=\"300\" height=\"10\">\n".$news['news_header']."</td>\n
<td>".date("j.n.y H:i",$unixtime)."</td>\n
</tr>\n
<tr>\n
<td height=\"100\" colspan=\"2\">\n".$news['news_main']."</td>\n
</tr>\n
<tr>\n
<td height=\"10\" colspan=\"2\"> </td>\n
</tr>\n
</table>\n";
}
}
}
function blaetter($table,$field)
{
if(!is_string($table) || !is_string($field))
{
throw new Exception("1. und 2. Parameter muessen Strings sein!");
exit();
}
else
{
$result = $this->cxn->query("SELECT $field FROM $table");
$menge = $result->num_rows;
$wieviel_seiten = $this->count_pages($menge,$this->count);
//Ausgabe der Seitenlinks:
echo "<div align=\"center\">";
echo "<b>Seite:</b> ";
//Ausgabe der Links zu den Seiten
for($a=0; $a < $wieviel_seiten; $a++)
{
$b = $a + 1;
//Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
if($seite == $b)
{
echo " <b>$b</b> ";
}
//Aus dieser Seite ist der User nicht, also einen Link ausgeben
else
{
echo " <a href=\"?seite=$b\">$b</a> ";
}
}
echo "</div>";
}
}
private function count_pages($result,$max)
{
if(!is_numeric($result) or !is_numeric($max))
{
throw new Exception("Parameter muessen numerisch sein!");
return FALSE;
}
else
{
//Errechnen wieviele Seiten es geben wird
$pages = $result / $max;
return $pages;
}
}
private function getPage()
{
if(!isset($_GET['page']))
{
$this->page = 1;
}
else
{
$this->page = $_GET['page'];
}
}
private function setPos()
{
$this->pos = $this->page * $this->count - $this->count;
}
}
Die Klasse Database sorgt für die Datenbankverbindung:
PHP:
<?php
/* Klasse: Database
* Zweck: Klasse zur Verbindung mit einer MySQL-Datenbank
*/
class Database
{
private $cxn;
private $database_name;
private $host;
private $user;
private $password;
function __construct($filename)
{
include("$filename");
if(!$this->cxn = new mysqli($host,$user,$passwd))
{
throw new Exception("Datenbank nicht verfügbar. Versuchen Sie es später erneut.");
email("admin@graffecke.de","DB-Problem","MySQL-Server antwortet nicht. ".$this->cxn->error());
exit();
}
$this->host = $host;
$this->user = $user;
$this->password = $passwd;
}
function useDatabase($dbname)
{
if(!$result = $this->cxn->query("SHOW DATABASES"))
{
throw new Exception("Datenbank nicht verfügbar. Versuchen Sie es später erneut.");
email("admin@graffecke.de","DB-Problem","MySQL-Server antwortet nicht. ".$this->cxn->error());
exit();
}
else
{
while($row = $result->fetch_row())
{
$databases[] = $row[0];
}
}
if(in_array($dbname,$databases) || in_array(strtolower($dbname),$databases))
{
$this->database_name = $dbname;
$this->cxn->select_db($dbname);
return TRUE;
}
else
{
throw new Exception("Datenbank $dbname nicht gefunden.");
return FALSE;
}
}
function getConnection()
{
return $this->cxn;
}
function getDatabaseName()
{
return $this->database_name;
}
}
?>
Die Datei vars.inc enthält die Zugangsdaten:
PHP:
<?php
$host = "localhost";
$user = "xxxxxxx";
$passwd = "xxxxx";
$database = "news_system";
?>
Das Anwendungsskript sieht wie folgt aus:
PHP:
<?php
require_once("Database.class");
require_once("news.class");
$frage = "antwort";
$incfile = "vars.inc";
if($frage == "antwort")
{
try
{
$db = new Database($incfile);
$db->useDatabase("news_system");
}
catch(Exception $e)
{
echo $e->getMessage;
exit();
}
try
{
$news = new News($db->getConnection(),"news");
$news->show_news();
$news->blaetter("news","news_ID");
}
catch(Exception $e)
{
echo $e->getMessage;
exit();
}
}
else
{
echo "Frage entspricht leider nicht antwort!<br>";
}
?>
Ich habe in dem gesamten Code keinen syntaktischen Fehler finden können. Wo steckt der logische Fehler?
Danke schon mal im Vorraus, an die, die mir helfen können...
mfg
Graffcon