Hilfe beim Session-Management

partizan25

Grünschnabel
Hallo ihr Lieben,

ich bin mittlerweile wirklich am verzweifeln und ich finde meinen Fehler nicht :-(

Folgende Ausgangslage bzw. folgende Dateien sind vorhanden:

seite.php (die Hauptseite)
class_kunde.php (die Klasse)
texte.php (die Texte inkl. eines Formulars, die auf seite.php ausgegeben werden.

Folgende Codes gibt es:

seite.php

Diese Datei soll entsprechend der ID entweder Text 5 (Login-Formular) oder Text 6 (Admin-Bereich) anzeigen.

PHP:
  if($_SESSION['id'] !=1)
  {
	  $art->inhalt($text[5]);
  }
  else
  {
	  $art->inhalt($text[6]);
  }


Dazu soll der Username "Admin" mit dem Passwort "Hallo" die Kundennummer 1 zugewiesen bekommen, die anderen, nennen wir sie Kunden, sollen den Timestamp erhalten als Kundennummer.

Ausschnitt aus der texte.php
PHP:
$text[5][0]="<form action=\"seite.php\" method=\"post\">
<p><input name=\"username\" /> Name <input type=\"password\" name=\"pw\" /> Passwort <input type=\"submit\" value=\"Login\" /></form>";
$text[6][0]="<h1>Admin-Bereich</h1>";

So, wenn jetzt der Admin sich einloggt, soll er automatisch die Kundennummer 1 angewiesen bekommen, das habe ich so geschrieben:

class_kunde.php:
PHP:
<?php
class kunde
{
	private $KndNr;
	
  public function __construct()
  {
    if (!isset ($_SESSION['id'])) 
    {
      $this->KndNr = $_SESSION['id']; 
    }
    else
    $_SESSION['id'] = $_SESSION['id'];
  } 
	 
  public function anmelden($username, $pw) 
  {
    if ($_GET["username"] == $username && $_GET["pw"] == $pw)
    {
      $this->KndNr = 1;  
    }
    else 
    {
      if (!isset ($_SESSION['id']))
      {
      $this->KndNr = time(); 
      }
      else
      {
        $this->KndNr = $_SESSION['id'];
      }
    }
  } 
  
  public function __destruct() 
  {
    $_SESSION['id'] = $this->KndNr;
    print $_SESSION['id'];  
  } 
  
  public function getKundenNummer()
	{
		return $this->KndNr;
	}
}
?>

Ich weiß nicht wo mein Fehler ist, dass 1. die Anmeldung funktioniert (und ich den Adminbereich erreiche) und 2. die Kundennummer 1 ausgegeben wird, wenn der Admin einloggt.

Ich hoffe ich habe mich halbwegs verständlich ausgedrückt und wäre über Ideen und Hinweise sehr sehr dankbar.

Gruß
Partizan
 
Versuch mal nach dem speichern der Session testweise
PHP:
print_r($_SESSION);
auszugeben, um zu sehen welche und ob überhaupt Sessions vorhanden sind.
Hast du error_reporting(E_ALL); aktiviert um keine Fehlermeldungen zu unterdrücken?
 
Hallo Eagle-PsyX,

wo setze ich den Code zur Ausgabe der Session am Besten hin?

Error-Reporting habe ich bisher nicht eingesetzt, wo setze ich dort den Wert, bei seite.php ?
 
Wenn die Seite aufgerufen wird, wird folgendes ausgeworfen:

Array ( [korb] => Array ( ) )

Wenn ich versuche mit dem Admin einzuloggen erhalte ich danach nur das hier:

Array ( [korb] => Array ( ) [id] => )


Aus irgendeinem Grund wird wohl garkeine ID angelegt geschweige denn die KndNr erstellt und auf 1 gestellt..... *seufz*
 
ich habe mich noch nicht viel mit php auseinander gesetzt, aber fehlt da nict irgendwo ein session_start(); ?

Bin da auch gerade nicht sicher ober er es hat, in den Quelltexten is aufjedenfall nichr vorhanden.

Überall wo die Session benuzt schreib gaaanz oben, noch vor html und so
PHP:
<?php
session_start();
?>

und noch was:
PHP:
  public function anmelden($username, $pw) 
  {
    if ($_GET["username"] == $username && $_GET["pw"] == $pw)
    {
      $this->KndNr = 1;  
    }
    else 
    {
      if (!isset ($_SESSION['id']))
      {
      $this->KndNr = time(); 
      }
      else
      {
        $this->KndNr = $_SESSION['id'];
      }
    }
  }
braucht diese Funktionen nicht einen return wert? z.B. die Session =D
 
Hallo ihr Lieben,

ich habe den Code schon etwas weiterentwickelt, ich kriege mittlerweile auch den Unix-Timestamp in die 'id' übertragen, leider schaffe ich es nicht, wenn ich Benutzername & Passwort richtig eingebe, den Unix-Timestamp mit dem Wert "1" zu überschreiben.

Hat jemand eine Idee bzw. findet meinen Fehler****?

class_kunde.php
PHP:
<?php
class kunde
{
	protected $KndNr;
    private $benutzer = "Admin";
    private $kennwort = "Hallo";
		
    public function __construct()
    {
    $this->KndNr = (isset($_SESSION['id'])) ? $_SESSION['id'] : time();
    }
   	
	public function anmelden($benutzer, $kennwort)
	{
      if($_POST['benutzerausformular'] == $benutzer && 
		 $_POST['kennwortausformular'] == $kennwort)
	  {
          $this->KndNr = 1;
      }
	}

    public function getKundenNummer()
	{
		return $this->KndNr;
	}
	
	public function __destruct()
	{
      $_SESSION['id'] = $this->KndNr;
    }
}
?>

das Formular, das aus einer texte.php erstellt wird:

PHP:
$text[5][0]="<form action=\"seite.php\" method=\"post\">
<p><input name=\"benutzerausformular\" /> Name </p>
<p><input type=\"password\" name=\"kennwortausformular\" /> Passwort</p>
<p><input type=\"submit\" value=\"Login\" /></p>
</form>";

seite.php (sobald der Wert auf 1 gesetzt wird, soll das Formular ersetzt werden durch den Admin-Bereich).

PHP:
<?php
require_once("class_webshop.php");
require_once("texte.php");

$art = new webshop("artikeldaten.xml");
if(isset($_REQUEST['pdf']))
{
	$art->pdfliste();
}
$art->setTitel("Webshop");
$art->kopf();

if(isset($_REQUEST['wk']))
{
	$art->inhalt($text[3]);
	$art->auswahl();
	$art->inhalt($text[2]);
}
elseif(isset($_REQUEST['order']))
{
	$art->bestellen($art->getKundenNummer());
	$art->inhalt($text[4]);
}
else
{
  if(!empty($_REQUEST['id']))
  {
    $art->waehlen($_REQUEST['id']);
  }
  $art->inhalt($text[0]);
  $art->anzeigen();
  $art->inhalt($text[1]);
  if($_SESSION['id'] != 1)   
  {
    $art->inhalt($text[5]);
  }
  else
  {
    $art->inhalt($text[6]);
  } 
print_r($_POST);
print "<br />";
print_r($_SESSION); 
} 
$art->fuss();
?>

Ich danke denen, die bereits helfen (bzw. geholfen haben) und denen, die mir hoffentlich noch etwas weiterhelfen :)

Euer Partizan
 
Hallo Ihr Lieben,

das Script von Partizan funktioniert so bei mir nicht.
Was mir aufgefallen war ist, dass wenn ich in der seite.php:

PHP:
  if($_SESSION['id'] != 1)   
  {
    $art->inhalt($text[5]);
  }
  else
  {
    $art->inhalt($text[6]);
  }

austausche gegen:

PHP:
  if($_SESSION['id'] = 1)   
  {
    $art->inhalt($text[6]);
  }
  else
  {
    $art->inhalt($text[5]);
  }

kommt nur noch die id 1

Ist jemand vielleicht schon weitergekommen?
 
PHP:
  if($_SESSION['id'] = 1)   
  {
    $art->inhalt($text[6]);
  }
  else
  {
    $art->inhalt($text[5]);
  }

kommt nur noch die id 1

Was auch klar ist, denn du führst da keine Prüfung auf Gleichheit durch sondern erledigst eine Zuweisung. Eine Zuweisung mit einem Wert ungleich 0, null oder false ergibt immer WAHR, was außerdem dazu führt, das der else-Zweig niemals ausgeführt wird.
 

Neue Beiträge

Zurück