Hilfe, Tipps, Ansätzezu meiner Aufgabe

Slick

Grünschnabel
Guten Tag.

Ich habe ein Problem mit einer in einer Fortbildung gestellten Aufgabe und hatte gehofft, dass mir jemand helfen könnte. Es geht um ein einfaches Anmeldeformular. Ich habe zunächst unter "seite.php" einen Code der das Grundgerüst der Seite erstellt.

PHP:
<?php
class seite
{
  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";
  }

  public function setTitel($text)
  {
    $this->titeltext = $text;
  }

  public function inhalt($daten)
  {
    foreach ($daten as $value)
    {
       print $value."\n";
    }
  }

  public function fuss()
  {
    print "  </body>\n";
    print "</html>\n";
  }
}
?>

Weiterhin habe ich eine php Klasse "kunde.php"
PHP:
<?php
class kunde
{
  private $KndNr;
  private $benutzer;
  private $passwort;

   public function __construct()
  {
    if (!is_array($_SESSION['id']))
    {
      $_SESSION['id'] = array();
    }
    $this->KndNr = $_SESSION['id'];
  }

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


 public function anmelden()  
  {
    if ($this->benutzer == "Admin" && $this->kennwort == "Hallo")
    {
      $this->KndNr = 1;  
    }
    else  
    {
      if (!isset ($_SESSION['id']))
      {
      $this->KndNr = time(); 
      }
      else
      {
        $this->KndNr = $_SESSION['id'];
      }
    }
  }


  public function getKundenNummer()
  {
    return $this->KndNr;
  }
    
}
?>

Die Idee hier ist, eine Anmeldefunktion zu haben, für die das Name-Passwort Paar "Admin"/ "Hallo" die Kundennummer 1 ergibt und den Unix-Timestamp sonst.

Im nächsten Schritt soll ich dann ein PHP-Programm für ein Anmeldeformular erstellen. Folgendes soll gelten. Die Seite soll
angezeigt werden, wenn die Methode „getKundennummer()“ nicht den Wert 1 liefert. Bei erfolgreicher
unter "Admin"/"Hallo" soll ein Formular ausgegeben werden, um eine XML-Datei auf den Webserver übertragen zu können.

Im nächsten Schritt muss ich in dieses PHP-Programm eine (klassische) Funktion (keine Methode einer Klasse) integrieren, in der die übertragene Datei auf ihren Typ („text/xml“) geprüft und abgespeichert wird, wenn kein Fehler auftritt. Eine Seite mit einer Fehler- oder Erfolgsmeldung muss ausgegeben werden.

Das Problem ist, dass sich der Kurs auf PHP konzentriert und HTML quasi vorausgesetzt wird, ich aber in der Erstellung von Formularen in HTML keine Erfahrung habe. Für jede Hilfe, oder zumindest einen Ansatz wäre ich sehr dankbar.
 
Hallo und herzlich Willkommen im Forum!

Formulare sind ganz einfach in HTML:
HTML:
<form action="dein-skript-name.php" method="post">
  <input type="text" name="username" />
  <input type="password" name="password" />

  <input type="submit" value="Absenden!" />
</form>

Ein Formular, welches beim Drücken des Submit-Buttons, per POST (im Gegensatz zu 'GET') Daten an dein PHP-Skript sendet.
So kannst du beispielsweise in dein-skript-name.php dann darauf zugreifen:
PHP:
print $_POST['username'];
Man sollte allerdings vorher auf die Existenz der Schlüssel des $_POST-Arrays achten:
PHP:
if (isset($_POST['username'], $_POST['password'])) {
  // beide Werte wurden erfolgreich übertragen
}

Im nächsten Schritt muss ich in dieses PHP-Programm eine (klassische) Funktion (keine Methode einer Klasse) integrieren, in der die übertragene Datei auf ihren Typ („text/xml“) geprüft und abgespeichert wird, wenn kein Fehler auftritt. Eine Seite mit einer Fehler- oder Erfolgsmeldung muss ausgegeben werden.
Dateivalidierung mittels der DOMDocument-Klasse.
 
Danke für die Antwort.

Ich bin ein wenig vorangekommen, bin aber auf weitere Schwierigkeiten gestoßen. Zunächst habe ich die Anmeldefunktion in Kunde.php leicht verändert, mit dem Ziel diese im Anmeldeformular aufrufen zu können..

Kunde.php
PHP:
 public function anmelden($benutzer, $passwort)  # Variablen "benutzer" & "passwort" jetzt nicht mehr private sondern direkt in der Funktion eingefügt
  {
    if ($this->benutzer == "Admin" && $this->passwort == "Hallo")
    {
      $this->KndNr = 1;  
    }
    else  
    {
      if (!isset ($_SESSION['id']))
      {
      $this->KndNr = time(); 
      }
      else
      {
        $this->KndNr = $_SESSION['id'];
      }
    }
  }

Weiterhin habe ich einen vorläufigen Code für mein Anmeldeformular erstellt.

PHP:
<?php
require_once("class_seite.php");
require_once("kunde.php");

$art = new seite;
$art->setTitel("Anmeldeformular");
$art->kopf();
$knd = new kunde;



if(!empty($_POST['benutzer']) &&  !empty($_POST['passwort']));  # wenn Benutzername und Passwort eingegeben wurden
  {
       $knd->anmelden($_POST['benutzer'], $_POST['passwort']);    # Die Funktion "anmelden" aus kunde.php soll mit den Eingaben aus dem Formular (Benutzer/Kennwort) ausgeführt werden.
       $knd->getKundennummer();     # Die Anmeldefunktion(en) aus Kunde.PHP sollen dem Benutzername/Kennwort Paar eine Kundennummer zuweisen und diese in $_SESSION['id'] schreiben
                                                         # dem Paar "Admin" "Hallo" soll die Kundennummer 1 zugewiesen werden
      
 if ($_SESSION['id']==1)  # bei der Kundennummer = 1 soll ein Formular ausgegeben werden, um die Datei "artikeldaten.xml" auf den Webserver übertragen zu können.
       {
             session_start();
             if (!is_array($_SESSION['datei']))           
             {
             $_SESSION['datei'] = array();
             }
         
            $handle = fopen(artikeldaten.xml, r);
            $this->handle = $_SESSION['datei'];
            fclose($handle);
       }
       else
       {
       print "keine Administrationsrechte".".\n";
       }
  }  

fclose($handle)  
     
?>
<html>
<body>
<form enctype="multipart/form-data" method="post" action="anmeldeformular2.php"> 
Username: <input type="text" name="benutzer" ><br>
Kennwort: <input type="password" name="passwort" ><br>
<input type="submit" value="Login">
</body>
</html>

Mein Problem: Die Ausführung der Anmeldefunktion aus kunde.php funktioniert nicht. Zudem glaube ich nicht , dass die Dateiübertragung mittels $_SESSION['datei'] das macht was es machen soll.

Über Hilfe, Tipps und Vorschläge würde ich mich sehr freuen.

mfg Slick
 
Ohne jetzt alles durchgelesen zu haben:
Mein Problem: Die Ausführung der Anmeldefunktion aus kunde.php funktioniert nicht.
Niemals, aber auch wirklich niemals "funkioniert nicht" schreiben, ohne genau zu beschreiben, was nicht funktioniert, welche Fehlermeldungen in welcher Zeile auftreten.

Falls du keine Fehlermeldungen aktuell siehst, empfiehtl es sich, folgendes an den Anfang des PHP-Skriptes zu schreiben:
PHP:
error_reporting(E_ALL);
ini_set('display_errors', 1');

Ich kann dir jetzt schonmal sagen, dass in folgender Zeile ein Fehler auftauchen wird:
PHP:
$handle = fopen(artikeldaten.xml, r);
Versuche mal, den selber zu korrigieren ;)
 
Beim Anmeldeformular für die Zeile
PHP:
$knd->anmelden($_POST['benutzer'], $_POST['passwort']);
Notice: Undefined index: benutzer in C:\xampp\htdocs\anmeldeformular2.php on line 41

Notice: Undefined index: passwort in C:\xampp\htdocs\anmeldeformular2.php on line 41

Bei Kunde.php in der Zeile
PHP:
if ($this->benutzer == "Admin" && $this->passwort == "Hallo")
Notice: Undefined property: kunde::$benutzer in C:\xampp\htdocs\kunde.php on line 32

Und egal was ich eingebe, es wird immer der "else" Teil der Schleife ausgeführt, also der Text "keine Administrationsrechte" ausgeführt.

Mfg
Slick
 
Notice: Undefined index:
Diesen Fehler bitte mal googeln.
Im Prinzip kommt das bei dir deshalb vor, weil $_POST['benutzer'] nicht existent ist.
Zwei Möglichkeiten:

- du rufst die Seite auf, ohne dein Login-Formular abgeschickt zu haben oder
- dein HTML-Formular definiret andere Namen für die Benutzer/PW-Felder


Notice: Undefined property
Auch googeln oder übersetzen.
Das Attribut benutzer wurde nicht initialisiert.
 
PHP:
 public function anmelden($benutzer, $passwort)  # Variablen "benutzer" & "passwort" jetzt nicht mehr private sondern direkt in der Funktion eingefügt
  {
    if ($this->benutzer == "Admin" && $this->passwort == "Hallo")

Hier meinst du sicherlich $benutzer und $passwort (jeweils ohne $this).

PHP:
            $handle = fopen(artikeldaten.xml, r);
            $this->handle = $_SESSION['datei'];
            fclose($handle);

Das $this ist sicher auch falsch.

PHP:
if(!empty($_POST['benutzer']) &&  !empty($_POST['passwort']));  # wenn Benutzername und Passwort eingegeben wurden

Hier ist dir ein Semikolon reingerutscht.
 
Hallo
ich möchte auch was dazu sagen, ich bin auch bei diesem kurs und habe die selben schwierigkeiten, arbeite nun das zum zweiten mal durch, und ich steige ganz langsam durch die erklärungen durch.
Der aufbau ist richtig durch einander geschrieben. es könnte besser sein. Ich bin sehr froh das es dieses forum gibt, mit leuten , und da wiederspreche ich dem wort das oben steht AMATEUREN, das ist nicht richtig.
Danke für eure Hilfe
 

Neue Beiträge

Zurück