Datenbankausgabe bei class

Divo1984

Erfahrenes Mitglied
Hallo ihr Lieben,

ich beschäftige mich grad mit dem Thema "classes" und habe folgende 2 Dateien geschrieben:

PHP:
<?php
include ("classes/class_sessionSite.php");
include ("classes/class_news.php");
$site = new sessionSite();
$news = new news();

$site->setTitel("Testseite");
$site->header();
$news->anzeigen();
$site->footer();
?>

und

PHP:
<?php 
class news
{
	private $newsArray = array();
	
	public function __construct()
	{
		$this->newsArray['1']['news']= "Erste News!";
		$this->newsArray['2']['news']= "Zweite News!";
	}
	
	public function anzeigen()
	{
		foreach($this->newsArray as $key => $value)
		{
			foreach($value as $subKey => $subVal)
			{
				if($subKey == "news")
				{
					
					print "$key\n$subVal\n<br>";
				}
			}
		}
	}
}


?>

Über die zweite Datei liefere ich momentan Daten aus einem Array in mein Hauptprogramm! Nur leider finde ich keine Lösung dort Daten aus einer Datenbank abzurufen! Bekomme nur Fehlermeldungen!

Kann mir dort jemand einen Lösungsansatz nennen, wie ich dort über eine DB Abfrage, Daten im Hauptprogramm ausgeben kann?

Die Ausgabe sollte natürlich wie es auch ersichtlich ist über die
PHP:
public function anzeigen()
geschehen! bin bald am verzweifeln:(
 
Zuletzt bearbeitet:
Über die zweite Datei liefere ich momentan Daten aus einem Array in mein Hauptprogramm! Nur leider finde ich keine Lösung dort Daten aus einer Datenbank abzurufen! Bekomme nur Fehlermeldungen!

Kann mir dort jemand einen Lösungsansatz nennen, wie ich dort über eine DB Abfrage, Daten im Hauptprogramm ausgeben kann?

Was hast du bereits versucht? Welche Fehlermeldungen gab es?

Grundsätzlich läuft das genauso ab wie bei einer prozeduralen Implementierung

- mysql_connect
- mysql_select_db
- mysql_query
- mysql_fetch_*
- mysql_free_result
- mysql_close
 
Ich habe die class news so abgeändert:

PHP:
<?php 
class news
{
	private $newsArray = array();
    private $DB = array('database' => 'u12345678',
                        'user'     => 'u12345678',
                        'password' => 'u12345678');
    protected $dbh;  # Database-Handle

  public function __construct()
  {
    parent::__construct();
    if(!is_array($this->DB) && empty($this->DB['database']))
      throw new Exception("Daten für Datenbankverbindung fehlen!");
    else
    {
      $connectString = "mysql:dbname=".$this->DB['database'].
                       ";host=localhost";
      try
      {
        $this->dbh = new PDO($connectString, $this->DB['user'], $this->DB['password'] );
        $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "SELECT * FROM news";
        $result = $this->dbh->query($sql);
        $tmp = $result->fetchAll(PDO::FETCH_ASSOC);
        foreach ($tmp as $key => $value)
        {
          foreach($value as $ky => $val)
          {
            $name = split("_", $ky);
            if ($ky != 'id')
              $this->newsArray[$value['id']][$news[1]] = $val;
          }
        }
print_r($this->newsArray);  ### zum Testen!
      }
      catch(PDOException $e)
      {
        echo $e->getMessage();
      }
    }
  }
	
	public function anzeigen()
	{
		foreach($this->newsArray as $key => $value)
		{
			foreach($value as $subKey => $subVal)
			{
				if($subKey == "news")
				{
					
					print "$key\n$subVal\n<br>";
				}
			}
		}
	}
}


?>

und bekomme folgende Ausgabe:

Fatal error: Cannot access parent:: when current class scope has no parent in /var/www/......on line 12
 
Zuletzt bearbeitet:
parent::__construct() macht nur Sinn, wenn die Klasse news von einer anderen Klasse ableitet, und diese andere Klasse einen implementierten Konstruktor hat. In diesem Beispiel ist keine Ableitung (extends) vorhanden, somit kann das parent::__construct() auch raus.

Dein Array ist deswegen leer, weil es eine Member-Variable ist. Member-Variablen können nur als konstante Werte festgelegt werden (hab ich zumindest so in Erinnerung). Da solltest du ein Warning bekommen, wenn du error_reporting(E_ALL|E_STRICT); verwendest und ini_set('display_errors', 1); stellst.

Wenn du das unbedingt als Array haben willst, solltest du das Array innerhalb des Konstruktors initialisieren.
 
Ich möchte das nicht unbedingt als Array haben, nur habe ich versucht abzuleiten! Kannst du mir evtl. auch einen Lösungsvorschlag nennen? Damit ich nen Ansatz habe? Bin für jeden Tipp dankbar!
 
Zuletzt bearbeitet:
Ich verstehe deine Frage nicht so ganz. Du möchtest gern ableiten. Gut. Von was und vor allem warum? Das objekt-orientierte Programmieren ist in etwa mit einem Auto vergleichbar:

PHP:
class Auto
{
  protected $hersteller;

  protected $name; 

  public function __construct($hersteller, $name)
  {
    $this->hersteller = $hersteller;
    $this->name = $name;
  }
}

class A4 extends Auto
{
  private $farbe;

  public function __construct($farbe)
  {
    parent::__construct('Audi', 'A4');
    $this->farbe = $farbe;
  }
}

$audi = new A4('schwarz');

echo "<pre>";
var_dump($audi);
echo "</pre>";
 
Ich hatte doch im ersten Post, eine Ausgabe aus einem Array! Nun hatte ich versucht, daraus abzuleiten und eine Abfrage aus der Datenbank in meinen Hauptprogramm ausgeben zu lassen, was leider so wie ichs versucht habe, nicht funktionierte!

Ich bin im Thema Objektorientierung noch sehr neu und daher verzweifel ich hier langsam, da ich keine Ausgabe aus der DB hinbekomme:(
 
Ich habe da grad nen Lösungsweg gefunden:

PHP:
<?php 
class news
{
    
    public function anzeigen()
    {
		$DB = array('dbname'=>"abcd", 'user'=>"abcd", 'password'=>"abcd");
		$connect = "mysql:dbname=".$DB['dbname'].";host=localhost";
		try
		{
			$dbh = new PDO($connect, $DB['user'], $DB['password']);
			$sql = "SELECT id, aname, news FROM news";
			foreach($dbh->query($sql) as $row)
			{
				print $row['aname'];//hier können alle Variablen ausgegeben werden
			}
			$dbh = null;
		}
		catch(PDOException $e)
		{
			echo $e->getMessage();
		}
    }
}


?>

Ich habe erstmal den Contructor weggelassen! Die Ausgabe funktioniert, nur weiss ich nicht ob es so dem Standart entspricht->was objektorientiertes Programmieren anbelangt! Aber es geht:)
 
Zurück