Hilfe beim Session-Management

Hi,

ich misch mich mal kurz ein, da ich die gleiche Fragestellung in diesem Thread gabe:
http://www.tutorials.de/php/381516-fehler-login-script-finden.html#post1972433

Dodo, du solltest dir im Studienforum den Thread:
"Aufgabenstellung Einsendeaufgabe hier nochmal erklärt"
durchlesen, denn es ist zum Beispiel Teil der Aufgabe ein eigenes Login Script zu schreiben... also nicht das Hauptprogramm zu erweitern, das hatte Partizan auch falsch verstanden.

Also, lieber Saftmeister, wenn du meinem Link, zu meinem Thread, folgen willst und da nochmal Hand anlegen willst hilfst du uns Beiden :D


Das mit dem Login-Script kann man so oder so verstehen, habe es jetzt übers Hauptprogramm eingebunden. Denke mal, letztlich ist es egal, wie man es macht, solange die Funktionalität gegeben ist, die gefordert wird.
 
Hmm, soweit ich das richtig sehe, wird die Funktion überhaupt nicht aufgerufen. Und das ist vmtl. auch das Problem des Thread-Erstellers. Ich würde mal so vorgehen (ohne Garantie): Unterhalb von require_once("class_kunde.php"); baut man folgende Zeilen ein:

PHP:
require_once("class_kunde.php"); 

// Prüfen, ob ein Login stattgefunden hat
$kunde = new kunde();

if( isset( $_POST['bn'] ) && isset( $_POST['pw'] ) )
{
  $kunde->anmelden( $_POST['bn'], $_POST['pw'] );
}

Hi, ich versuche seit Stunden diesen Codeschnipsel in die class_kunde.php anstadt in das hauptprogramm oder die class_webshop.php zu integrieren.

Könnt ihr mir einen Tipp geben, wie ich das ändern müsste?
 
Das Problem besteht darin, das nirgendwo sonst die Anmelde-Funktion aufgerufen werden kann. Theoretisch wäre es noch im Konstruktor von class_kunde möglich. Da in class_webshop im Konstruktor das Kunden-Objekt erzeugt wird, wird implizit der Konstruktor von class_kunde aufgerufen. Du könntest die Prüfung, ob $_POST die Anmelde-Daten enthält also auch in der __construct()-Funktion von class_kunde einbauen. Das ist zwar keine schöne aber eine funktionierende Lösung. Es müsste ungefähr so aussehen:

PHP:
class kunde
{
  private $KndNr;
  private $bn = "Admin";
  private $pw = "Hallo";

  public function __construct()
  {
        //session_start();
        $this->KndNr = (isset($_SESSION['id'])) ? $_SESSION['id'] : time();
        if( isset($_POST['bn']) && isset($_POST['pw']) )
        {
          $this->anmelden($_POST['bn'], $_POST['pw']);
        }
  }

  public function anmelden($bn, $pw)
  {
    if($bn == 'Admin' && $pw == 'Hallo')
    {
      $this->KndNr = 1;
    }
    $_SESSION['id'] = $this->KndNr;
  }
 
Das Problem besteht darin, das nirgendwo sonst die Anmelde-Funktion aufgerufen werden kann. Theoretisch wäre es noch im Konstruktor von class_kunde möglich. Da in class_webshop im Konstruktor das Kunden-Objekt erzeugt wird, wird implizit der Konstruktor von class_kunde aufgerufen. Du könntest die Prüfung, ob $_POST die Anmelde-Daten enthält also auch in der __construct()-Funktion von class_kunde einbauen. Das ist zwar keine schöne aber eine funktionierende Lösung. Es müsste ungefähr so aussehen:

PHP:
class kunde
{
  private $KndNr;
  private $bn = "Admin";
  private $pw = "Hallo";

  public function __construct()
  {
        //session_start();
        $this->KndNr = (isset($_SESSION['id'])) ? $_SESSION['id'] : time();
        if( isset($_POST['bn']) && isset($_POST['pw']) )
        {
          $this->anmelden($_POST['bn'], $_POST['pw']);
        }
  }

  public function anmelden($bn, $pw)
  {
    if($bn == 'Admin' && $pw == 'Hallo')
    {
      $this->KndNr = 1;
    }
    $_SESSION['id'] = $this->KndNr;
  }


Hi Saftmeister,
hab gerade versucht die Änderungen einzutragen funktioniert aber nicht :(

Nicht zuletzt gibt es mir aber ein Gefühl von Beruhigung nicht der Einzige zu sein, der diesen Schnipsel nicht verpflanzen kann.

Bei der Eingabe von Name und Passwort bleibt die Eingabemaske auf dem Bildschirm.

Sooooo einfach ist es nicht :)

Ich würde mich freuen, wenn du dich nochmal mit einer Idee melden könntest

Gruß,
Xrzepetelda
 
Hi,

ich hab es gerade noch mal getestet: Es funktioniert prima! Im Anhang findest du meine Version, in der im Konstruktor der Klasse kunde die anmelden-Funktion aufgerufen wird.
 

Anhänge

  • ea.zip
    193 KB · Aufrufe: 356
Hallo,
sitze gerade am gleichen Script fest und komme nicht weiter. Wenn ich einen Artikel in den Warenkorb legen möchte erhalte ich folgenden Fehler.

Notice: Undefined index: 2002 in C:\xampp\htdocs\ea\class_artikel01.php on line 41

Hier der Code dazu

public function waehlen($artikelnummer)
{
$this->korb[$artikelnummer]++;
}

Wo liegt der Fehler? Ich hoffe ihr könnt mir weiterhelfen

Vielen Dank
Gruß
Coconut-Pete
 
Naja, in der Member-Variablen korb, was du offensichtlich als Array verwenden willst, existiert noch kein Index mit der Nummer 2002. Du kannst das "Problem" relativ leicht umgehen:

PHP:
public function waehlen($artikelnummer)
{
  if(isset($this->korb[$artikelnummer]))
    $this->korb[$artikelnummer]++;
  else
    $this->korb[$artikelnummer] = 1;
}
 
Hallo,
vielen Dank für die schnelle Hilfe. Nun bekomme ich zwar keine Fehlermeldung mehr, allerdings kann ich keinen Artikel in den Warenkorb einfügen. Dieser ist immer leer. Wo könnte der Fehler liegen?

Danke
Gruß
Coconut-Pete
 
Zurück