tutorials.de Buch-Aktion 05/2012
Seite 3 von 3 ErsteErste 123
ERLEDIGT
JA
ANTWORTEN
43
ZUGRIFFE
1817
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #31
    Avatar von dodo123
    dodo123 dodo123 ist offline Mitglied Bronze
    Registriert seit
    Oct 2011
    Beiträge
    32
    Zitat Zitat von Xrzepetelda Beitrag anzeigen
    Hi,

    ich misch mich mal kurz ein, da ich die gleiche Fragestellung in diesem Thread gabe:
    http://www.tutorials.de/php/381516-f...ml#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

    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.
     

  2. #32
    Xrzepetelda Xrzepetelda ist offline Rookie
    Registriert seit
    Oct 2011
    Beiträge
    8
    Blog-Einträge
    1
    Zitat Zitat von saftmeister Beitrag anzeigen
    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:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    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?
     

  3. #33
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  4. #34
    Xrzepetelda Xrzepetelda ist offline Rookie
    Registriert seit
    Oct 2011
    Beiträge
    8
    Blog-Einträge
    1
    Zitat Zitat von saftmeister Beitrag anzeigen
    Hi, danke, dass du so schnell geantwortet hast.
    Den Post kenne ich gut, hab ihn mir auch zwanzig mal durchgelesen, weiß aber trotzdem nicht, wie ich den Codeschnipsel in die class_kunde.php intergrieren kann.
    Ist das überhaupt möglich?
     

  5. #35
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    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:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    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;
      }
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  6. #36
    Xrzepetelda Xrzepetelda ist offline Rookie
    Registriert seit
    Oct 2011
    Beiträge
    8
    Blog-Einträge
    1
    Zitat Zitat von saftmeister Beitrag anzeigen
    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:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    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
     

  7. #37
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    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.
    Angehängte Dateien Angehängte Dateien
    Xrzepetelda bedankt sich. 
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  8. #38
    Coconut-Pete Coconut-Pete ist offline Grünschnabel
    Registriert seit
    Dec 2011
    Beiträge
    4
    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
     

  9. #39
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    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:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    
    public function waehlen($artikelnummer)
    {
      if(isset($this->korb[$artikelnummer]))
        $this->korb[$artikelnummer]++;
      else
        $this->korb[$artikelnummer] = 1;
    }
    Coconut-Pete bedankt sich. 
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  10. #40
    Coconut-Pete Coconut-Pete ist offline Grünschnabel
    Registriert seit
    Dec 2011
    Beiträge
    4
    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
     

  11. #41
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Die Frage ist eine Meta-Frage, auf die man so gut wie jede Antwort geben könnte

    Kannst du evtl. mal ein bisschen mehr Code posten oder zumindest beschreiben, wie den Warenkorb programmiert hast? Arbeitest du mit Sessions? Mit Cookies? Komplett andere Technik?
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  12. #42
    Coconut-Pete Coconut-Pete ist offline Grünschnabel
    Registriert seit
    Dec 2011
    Beiträge
    4
    Hi,

    im Prinzip geht es immernoch um das gleiche Script, siehe deine ea.zip. Hier der Code von class_artikel

    Vielen Dank
    PHP-Code:
    <?php
    require_once ("class_sitzungsSeite.php");

    class 
    artikel extends sitzungsSeite
    {
      protected 
    $artikelArray = array();

      public function 
    __construct($dateiname)
      {
        
    parent::__construct();
        
    $data simplexml_load_file($dateiname);
        foreach(
    $data as $k => $v)
        {
          
    $artNr intval($v->attributes());
          foreach(
    $v as $k1 => $v2)
          {
            
    $this->artikelArray[$artNr][$k1] = (string)$v2;
          }
        }
      }

      public function 
    anzeigen()
      {
        foreach(
    $this->artikelArray as $key => $value)
        {
          foreach(
    $value as $subKey => $subVal)
          {
            if (
    $subKey == "name")
            {
              print 
    "<a href=\"".$_SERVER['PHP_SELF']."?id=".$key."\">".$subVal."</a>\n";
            }
            else
              print 
    $subVal." Euro\n";
          }
          print 
    "<br />\n";
        }
      }

      public function 
    waehlen($artikelnummer)
    {
      if(isset(
    $this->korb[$artikelnummer]))
        
    $this->korb[$artikelnummer]++;
      else
        
    $this->korb[$artikelnummer] = 1;
    }

      public function 
    bestellen($kunde$datei "bestellung.xml")
      {
        if(!
    is_integer($kunde))  # Gültigen Kundennummer?
          
    throw new Exception('Keine Kundennummer'); # Fehler ausgeben
        
    else
        {
          if(
    count($this->korb) > 0)
          {
            
    $xml = new SimpleXMLElement("<bestellung></bestellung>");
            
    # Attribut "kunde" schreiben
            
    $xml->addAttribute("kunde"$kunde); 
            foreach(
    $this->korb as $key => $value# Artikel bearbeiten
            
    {
              
    $art $xml->addChild("artikel"); # Neues <artikel>-Element
              
    $art->addAttribute("name"$key);
              
    $art->addAttribute("anzahl"$value);
            }
            
    $error $xml->asXML($datei);  # Datei schreiben.
            
    $this->korb = array();    # Auswahl löschen.
            
    return $error;
          }
          return 
    false# keine Artikel ausgewählt
        
    }
      }
    }
    ?>
    Geändert von sheel (27.12.11 um 22:38 Uhr) Grund: Codetags
     

  13. #43
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Habe den Fehler gefunden. Er befindet sich im Konstruktor der sitzungsSeite-Klasse:

    Hier erstmal das Original:
    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
      public function __construct()
      {
        session_start();
        
        if (!is_array(isset($_SESSION['korb']))) // Hier ist der Bug!
        {
          $_SESSION['korb'] = array();
        }
        $this->korb = $_SESSION['korb'];
      }

    Das Problem ist, das die if-Prüfung immer wahr zurück liefern wird, denn

    - is_array() prüft, ob eine Variable bzw. ein Wert ein Array ist
    - isset() gibt ein "true" zurück, wenn eine Variable nicht leer bzw. gesetzt ist, oder "false" wenn die Variable nicht exisiert oder leer ist
    - demzufolge prüft laut dem Code, die is_array-Funktion, ob entweder true oder false ein Array ist, was beides mal falsch ist.
    - Dadurch, das für dem is_array() ein Ausrufe-Zeichen steht, wird die Prüfung negiert, sprich man geht vom Gegenteil aus.

    Wir schreiben jetzt mal in unserer Sprache, was da geprüft würde:

    "Prüfe, ob der Wert von $_SESSION['korb'] nicht leer ist. Übergib das Ergebnis an 'Prüfe, ob der Wert kein Array ist'" => Das ist immer wahr!

    Folglich wird der Code im Anweisungsblock immer ausgeführt, die Session-Variable wird also immer überschrieben, und damit das, was eine Seite zuvor in die Session geschrieben wurde, wieder gelöscht. Daher ist dein Warenkorb immer leer.


    Die korrekte Prüfung dürfte lauten:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
      public function __construct()
      {
        session_start();
        
        if (!is_array($_SESSION['korb']))
        {
          $_SESSION['korb'] = array();
        }
        $this->korb = $_SESSION['korb'];
      }
    Coconut-Pete bedankt sich. 
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  14. #44
    Coconut-Pete Coconut-Pete ist offline Grünschnabel
    Registriert seit
    Dec 2011
    Beiträge
    4
    Super - Vielen Dank

    hat Prima geklappt

    Gruß
    Coconut-Pete
     

Ähnliche Themen

  1. Csharp Session Management
    Von StefanR im Forum .NET Web und Kommunikation
    Antworten: 1
    Letzter Beitrag: 14.09.09, 11:01
  2. Komplexes Session/Cookie Management
    Von nullpunkt im Forum PHP
    Antworten: 6
    Letzter Beitrag: 23.04.05, 20:23
  3. Problem mit Session-Management
    Von Moritz123 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 01.12.04, 12:57
  4. tutorial workaholic session-management
    Von fragemann im Forum PHP
    Antworten: 10
    Letzter Beitrag: 02.06.03, 12:56

Stichworte