Klasse erweitern zum Anmelden

emmalisa

Grünschnabel
Hallo zusammen.

Ich habe hier schon viele wertvolle Tips gefunden und hoffe, dass ihr mir hier weiterhelfen könnt. :)
Ich steige gerade in das Thema OOP ein und bin schon auf einige Unklarheiten gestoßen. Ich habe eine Klasse die erweitert werden soll und komme hier nicht weiter.

Vorgegebene Klasse „kunde“

PHP:
<?php 

class kunde 
{ 
  private $KndNr; 
  public function __construct()  
  { 
    $this->KndNr = time(); 
  } 
  public function getKundenNummer() 
  { 
    return $this->KndNr; 
  } 
} 
?>

1. Es soll eine Methode „anmelden“ integriert werden, die einen Benutzer und ein Passwort entgegennimmt. Falls es "Admin" / "Hallo" ist, soll die $KndNr = 1 sein, für alle anderen Kombinationen soll als Kundennummer wieder der Unix-Timestamp in die Kundennummer-Variable eingetragen werden.

Außerdem soll ein Programm für eine Webseite erstellt werden mit dem entsprechenden Anmeldeformular zur Eingabe von Benutzer und Passwort. Die Seite soll angezeigt werden, wenn der Administrator noch nicht angemeldet ist und die Methode „getKundenummer()“ nicht den Wert 1 liefert. Ist der Admin angemeldet soll ein Formular ausgegeben werden um eine xml-Datei auf den Webserver zu übertragen.

2. Der Konstructor und Destructor der o.g. Klasse (eine von mehreren) sollen zum Lesen und Setzen der Session-Variablen „$_SESSION['id']“ erweitert werden, wo die KndNr abgelegt werden soll.

Hier meine derzeitigen Erweiterungen:

PHP:
<?php 
class kunde 
{ 
  private $KndNr; 
  private $user; 
  private $pw; 
   
  public function __construct()  
  { 
    session_start();
    if (!isset ($_SESSION['id']))  // geprüft ob Session existiert 
    { 
      $this->KndNr = $_SESSION['id'];  // Falls nicht Unix-ZeitStempel 
    } 
    else 
    $_SESSION['id'] = $_SESSION['id']; //Falls ja weiter benutzen 
  } 

  public function anmelden($user, $pw)  // Die Methode anmelden 
  { 
    if ($this->user == "Admin" && $this->pw == "Hallo") 
    { 
      $this->KndNr = 1;  // KndNr ist 1 falls die Kombination stimmt 
    } 
  } 

  public function getKundenNummer() 
  { 
    return $this->KndNr; 
  } 
 
  public function __destruct() // im Destructor KndNr in SESSION gespeichert 
  { 
    $_SESSION['id'] = $this->KndNr; 
    echo $_SESSION['id'];  //Kontrollausgabe 
  } 
}
$kunde = neu Kunde();
$kunde->anmelden($user, $pw);
?>

Das zugehörige Webseite-Programm:

PHP:
<?php
require_once ("class_kunde.php");
require_once ("class_seite.php"); // eine weitere Klasse, die mit eingebunden wird
?>
<p>Bitte tragen Sie Name und Passwort ein.</p>
<form action="class_kunde.php" method="POST">
    <p><input name="user" /> Name</p>
    <p><input type="password" name="pw" /> Passwort</p>
    <p><input type="submit" value="Login" /></p>
</form>

Irgendwie funktioniert das Ganze noch nicht so recht. Außerdem komme ich mit der Ausgabe der xml-Datei überhaupt nicht klar.

Kann mir jemand in dem Bereich weiterhelfen? Vielen Dank schon vorab.

Viele Grüße
Emmalisa
 
Hi und Willkommen bei tutorials.de,

also zuerst mal:
Im Konstruktor hast du die Zeile mit dem time() rausgenommen. Warum?

Zu anmelden: Die Angabe sagt, wenn nicht Admin, weider den Timestamp eintragen.
Also ein else zum if, und da dann wieder die time-Zeile wie im Konstruktor.

die letzten zwei Zeilen der PHP-Datei würde ich rausnehmen.
a) Können sie nicht funktioneiren, weil es die Variablen $user und $pw nicht gibt.
b) Macht das dort keinen Sinn. Da soll nur mal die Klasse sein, mit allem, was User so können.


Zum HTML-Formular:
Was ist class_seite.php? Wenn das nur da ist,
weil du gehofft hast dass es so funktioniert, weg damit.
Und warum require´st du die Kundendatei?
Das HTML-Formular soll nur mal festlegen, dass der Benutzer was eingeben kann.
Die PHP-Datei kommt erst dann ins Spiel, wenn er die Eingaben abschickt.

Die Formularverarbeitung bekommt dann am Besten eine eigene PHP-Datei.
action im HTML entsprechend abändern.
In der neuen PHP-Datei kannst du jetzt die Kundenklasse requiren,
eine neue Instanz erstellen und anmelden.
Beim Anmelden kann man mit $_POST['user'] auf den übergebenen User zugreifen,
entsprechend beim Passwort. Einfach $user geht nicht.

Je nachdem ob Admin oder nicht dann irgendwas ausgeben.
Das mit der XML-Datei etc. sollte da ja noch kommen, aber mach erst mal bis hier her.
Die Sache mit Session eventuell auch noch weglassen, wenn verwirrend...
 
Hallo sheel,

vielen Dank für deine Hilfe. Ich habe die Seiten entsprechend umgebaut weiß aber nicht, wie ich bei einem Fehlschlagen der Anmeldung als Admin automatisch auf das Anmeldeformular (auf die html-Datei) zurück komme.

...Die Seite soll angezeigt werden, wenn der Administrator noch nicht angemeldet ist und die Methode „getKundenummer()“ nicht den Wert 1 liefert...

Hallo sheel,
nochmals vielen Dank für deine Hilfe. Nun hab ich den Zusammenhang endlich verstanden. Ich hab alles hinbekommen - und es funktioniert. Jippi....
 

Neue Beiträge

Zurück