Fehler in Login Script finden

Xrzepetelda

Grünschnabel
Hallo Ihr Lieben,

als PHP Neuling versuche ich ein simples PHP Script für eine einfache Login Funktion zu schreiben.

Sinn soll es sein, dass beim Login des Admins eine andere Kundennummer (1) ausgegeben wird und eine andere Seite erscheint (Adminbereich) und falls nicht soll soll ein Zeitstempel ausgegeben werden, der an anderer Stelle gebraucht wird.

Was ich mir bis jetzt gedacht habe ist:

Login.php:

PHP:
<?php
require_once("class_webshop.php");// wird später bearbeitet
require_once("texte.php");
require_once ("class_kunde.php");

$art = new webshop("artikeldaten.xml"); //später
$art->setTitel("Webshop");//später
$art->kopf();//später
$KndNr='KndNr';//Variable wird definiert (hoffe ich)

if($art->getKundennummer($KndNr) == '1')//es soll eine Funktion getKundennummer() geben
  {
    $art->inhalt($text[6]);
  }
  else
  {
   $art->inhalt($text[5]);
  }

print_r($_POST);// Bei einem Login werden Name und Pass angezeigt
print "<br />";//
print_r($_SESSION);// Bei einem Login wird eine Zeitstempel angezeigt (aber keine 1)

$art->fuss();
error_reporting(E_ALL);
?>


text.php:

PHP:
<?php
$text = array();
// ...
$text[5][0]="<form action=\"login.php\" method=\"post\">
<p><input type=\"text\" name=\"loginname\" /> Name </p>
<p><input type=\"password\" name=\"loginpassword\" /> Passwort</p>
<p><input type=\"submit\" value=\"Login\" /></p>
</form><form action=\"logout.php\" method=\"post\">
<p><input name=\"logout\" value=\"logout\" type=\"submit\"></p>
</form>";
$text[6][0]="<h1>Sie sind als Administrator angemeldet</h1>
</p><form action=\"logout.php\" method=\"post\">
<p><input name=\"logout\" value=\"logout\" type=\"submit\"></p>
</form>";
?>

Und die Datei, die vermutlich das Problem (oder die Probleme macht): class_kunde.php:

PHP:
<?php
class kunde
{
protected $KndNr;

        
    public function __construct()
    {
   $this->KndNr = (isset($_SESSION['id'])) ? $_SESSION['id'] : time();
    }

   public function anmelden($KndNr) //Funktion anmelden() ansich soll bleiben
    {
      if($_POST['loginname'] == 'Admin' && $_POST['loginpassword'] == 'Hallo')
      {
	 $KndNr = '1';
      }
    }

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


Ich meine also, dass ich Namen und Passwort in der Superglobalen $_POST einschicke, diese in der class_kunde.php aber nicht ausgewertet werden.

Könnt ihr mir bitte Hinweise geben.

Dank im Voraus.
 
Hallo,

der Fehler liegt in deiner Kunden-Klasse in der Funktion anmelden(): Du hast das $this-> vor $KndNr vergessen, also setzt dunicht die Objektvariable $KndNr, sondern nur eine lokale!

Richtig:
PHP:
public function anmelden($KndNr) //Funktion anmelden() ansich soll bleiben 
{ 
  if($_POST['loginname'] == 'Admin' && $_POST['loginpassword'] == 'Hallo') 
  { 
    $this->KndNr = '1'; 
  } 
}
 
Hallo ComFreek,

danke, dass du so schnell geantwortet hast.

Habe es gleich mal so geändert, aber leider scheinen noch mehr Fehler im Script zu sein, denn die '1' wird noch nicht übergeben, dass heißt ich kann mich im Adminbereich nicht einloggen.

Wenn ich testweise alle Schnipsel aus der class_kunde.php ausformuliere außer dem

PHP:
public function anmelden($KndNr) //Funktion anmelden() ansich soll bleiben 
{ 
  if($_POST['loginname'] == 'Admin' && $_POST['loginpassword'] == 'Hallo') 
  { 
    $this->KndNr = '1'; 
  } 
}

und dem:

PHP:
public function getKundennummer()
    {
        return $this->KndNr;
    }

gibts keinen Unterschied nur beim auskommentieren des zweisten Schnipsels geht gar nichts mehr - es erscheint eine Warnmeldung mit Verweiß auf eine weitere Datei.


Oh, und wisst Ihr in diesem Zusammenhang vielleicht, wie ich die "$art" aus dem Login rausbekomme? Also diese hier:

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


Ich hab "$art" zwar nach stundenlangen Versuchen eingesetzt, weil es dann, in Kombination mit meiner "require_once("class_webshop.php");" funktioniert hat, aber warum weiß ich nicht so genau.

PHP:
<?php
class login
{
private $titeltext;

public function kopf()
{
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\""." \"http://www.w3.org/TR/html4/strict.dtd\">\n";
print "<html>\n";
print " <head>\n";
print "  <meta http-equiv=\"content-type\""."content=\"text/html;\ charset=utf-8\">\n";
if ($this->titeltext != "")
print "   <title>".$this->titeltext."</title>\n";
print " </head>\n";
print " <body>\n";
}
//von hier
if($art->getKundennummer($KndNr) == '1')
  {
print "<h1>Sie sind als Administrator angemeldet</h1>
</p><form action=\"logout.php\" method=\"post\">
<p><input name=\"logout\" value=\"logout\" type=\"submit\"></p>
</form>";
  }
  else
  {
print "<form action=\"login.php\" method=\"post\">
<p><input type=\"text\" name=\"loginname\" /> Name </p>
<p><input type=\"password\" name=\"loginpassword\" /> Passwort</p>
<p><input type=\"submit\" value=\"Login\" /></p>
</form><form action=\"logout.php\" method=\"post\">
<p><input name=\"logout\" value=\"logout\" type=\"submit\"></p>
</form>";
  }
//bis hier
  public function fuss()
{
print " </body>\n";
print "</html>\n";
}
}
print_r($_POST);
print "<br />";
print_r($_SESSION); 
error_reporting(-1);
?>

So ungefair müsste es aussehen. (Also so funktioniert es natürlich nicht; Ich meine die Richtung wäre evtl. eine Alternative... oder ?)

PHP machts einem nicht einfach.

Dank im Voraus
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück