Problem mit angebl. bereits gestarter Session:(

Divo1984

Erfahrenes Mitglied
Wiedermal kurz und knapp, ich habe folgender Klassen:

PHP:
<?php
class Session
{
	public function __construct()
	{
		session_start();
	}
}
?>

Hier will ich die Session starten...

dann wir hier:

PHP:
<?php
require_once 'class_Session.php';
class DB extends session
{
	private $host;	
	private $database;
	private $user;
	private $pw;
	
	protected $db;
	public function __construct()
	{
		parent::__construct();
	}
	public function conn()
	{
		$this->host="localhost";
		$this->database="masked";
		$this->user="masked";
		$this->pw="masked";
				
		$db = new mysqli($this->host, $this->user, $this->pw, $this->database);	
		
		if ($db->connect_error) 
		{
			 	printf(
			    "Can't connect to MySQL Server. Errorcode: %s\n",
			    mysqli_connect_error());		
		  exit;
		}
		return $db; 

	 }
}
?>

mit parent:: übernommen

weiter gehts mit:

PHP:
<?php
require_once 'class_DB.php';
class UserManagement extends DB
{
	public $db;
	
	public function __construct()
	{
		parent::__construct();
	}
	
	public function userliste()
	{
		
		$db=new DB();
		$a=$db->conn();
		$erg=$a->query("SELECT * FROM empfaenger ORDER BY id ASC");
		$zeilenzahl = $erg->num_rows;

		echo "<p>Insgesamt $zeilenzahl Datensätze gefunden</p>\n";
		
		while($zeile=$erg->fetch_array())
		{
			echo"ID: ".$zeile['id']."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$zeile['username']."<br>";
		}
	}
}
?>

eigentlich auch klar ersichtlich was hier passiert:(

aufgerufen wird mit folgendem Script:

PHP:
<?php
$time_start = microtime(true);
require_once 'classes/class_UserManagement.php';

$user=new UserManagement();
$user->userliste();

$time_end = microtime(true);
$time = $time_end - $time_start;
$time = @round($time*1000)/1000;
    
echo"<br>geladen in: ".$time;
?>

Die folgende Ausgabe erscheint:

Notice: A session had already been started - ignoring session_start() in meinpfad\classes\class_Session.php on line 6

Das Script läuft zwar, aber warum gibt der mir die Notice: aus?
 
Zuletzt bearbeitet:
Ganz einfach:
Du führst einmal im Konstruktor den parent Konstruktor aus (Das ist der erste Start der Session). Dies geschieht beim anlegen eines neuen Objektes von UserManagement.
in Userliste erstellst du dann ein neues DB Objekt (Warum? Die Klasse erbt doch davon, du brauchst das Objekt gar nicht). Der Konstruktor von der Klasse DB führt allerdings auchnochmal den Parentkonstruktor aus - der zweite Versuch, eine Session zu starten, der deine Notice hervorruft.

PHP:
public function userliste(){ 
  $a=$this->conn();
  $erg=$a->query("SELECT * FROM empfaenger ORDER BY id ASC");
  //...
}

Du solltest dafür allerdings die private Variablen in der DB Klasse auch als protected deklarieren.
 

Neue Beiträge

Zurück