class für mysql-Funktion

visiondpc

Erfahrenes Mitglied
Hallo,
ich habe mich mal ein wenig an der objektorientierten Programmierung versucht. Allerdings habe ich dadurch ein ziemliches Problem mit der Datenbank bekommen bei dem ich mal Hilfe bräuchte
Der Aufbau ist folgender:
Ich habe meine index.php in die ich mittels require() eine global.php einbinde. In der global.php werden sämtliche Klassen eingebunden und aufgerufen.
Das ganze sieht dann so aus:
class_db.php
PHP:
class db
{
	var $db_host; 
	var $db_user;
	var $db_passwd;
	var $db_name;
	var $connection;
	var $result = array();
	
	function db($db_host, $db_user, $db_passwd, $db_name)
	{
		$this->db_host = $db_host;
		$this->db_user = $db_user;
		$this->db_passwd = $db_passwd;
		$this->db_name = $db_name;
		$this->connect_db();
	}
	
	function connect_db()
	{
		$this->connection = @mysql_connect($this->db_host, $this->db_user, $this->db_passwd);
		if(!$this->connection)
			$this->error('Verbindung fehlgeschlagen');
		if($this->db_name!='')
			$this->select_db($this->db_name);
	}
	
	function select_db($db_name = '')
	{
		if($database!='')
			$this->db_name = $db_name;
		if(!@mysql_select_db($this->db_name, $this->connection))
			$this->error('Ungültige Datebank');
	}
	
	function query($query, $limit = 0, $offset = 0)
	{
		if($limit!=0)
			 $query .= " LIMIT $offset, $limit";
		$this->result = mysql_query($query, $this->connection);
		return $this->result;
	}
	
	function fetch_array($query)
	{
		$this->query = $query;
		$this->result = mysql_fetch_array($this->query);
		return $this->result;
	}
...
}

global.php
PHP:
<?php
require('./lib/config.php'); # enthält db_zugangsdaten

# database
require('./lib/class_db.php');
$db = &new db($db_host, $db_user, $db_passwd, $db_name);

# template
require('./lib/class_template.php');
$template = &new template();

...
?>

und die index.php
PHP:
require('./global.php');

if(isset($_POST[submit]))
{
	$query = $db->query("SELECT * FROM user");
	if($db->num_rows($query)==1)
	{
		foreach($result as $key=>$value)
		{
			$str .= $key." - ".$value."\n<br />";
		}
	}
}

eval ('$template->template_out("'.str_replace('"', '\\"', $template->get_template('test') ).'");');

Durch den Aufruf $db->query() scheint das Skript allerdings garnicht erst in die Methode hineinzuspringe.
Seltsamerweise funtioniert die Ausgabe des Templates die auf die gleiche Weise definiert ist problemlos.
 
Zuletzt bearbeitet:
PHP:
if($db->num_rows($query)==1)

Was bringt dir diese Bedingung?
Da ich denke, dass deine num_rows() auf mysql_num_rows verweist.
Du prüfst ob das Ergebnis 1 ist, falls ja, gehst du in eine Schleife. Aber sobald es mehr als einen Eintrag ist, ist deine Bedingung falsch und sie wird nicht ausgeführt.

Weiterhin wird $result nirgendswo definiert?
 
Momentan steht nur ein Datensatz in der Tabelle deswegen ist das kein Problem.
Bis zu dieser Stelle kommt das Skript aber erst garnicht, weil wie beschriebe $query = $db->query("SELECT * FROM user"); garnicht erst in die Funktion aufruft.
Ich habe das mal getestet, indem ich in die Methode query() an erster Stelle ein echo "Test"; gesetzt habe und selbst das wird nicht ausgegeben.
Es scheint so, als könnte ich von der index.php garnicht erst auf die Klasse db zugreifen.
 
in der Funktion select_db prüfst du
PHP:
if($database!='')
die Variable $database ist aber sonst nirgends deklariert und soll vermutlich $db_name lauten!

MfG
 
Zurück