Problem mit einem Warenkorb

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit einem Warenkorb

    Hallo Leute,
    ich habe folgendes Prob:

    Wenn ich eine zweite Reise in meinen Warenkorb packe wird die erste gelöscht, auch eine Neuladen der Seite überstehen die Einträge in meiner Session nicht.

    Ich bekomme folgende Fehlermeldung:
    Notice: Undefined index: 614 in ... merkliste.inc.php on line 6

    Das ist der Code:
    <?php
    error_reporting(E_ALL);
    class Warenkorb {
    var $inhalt = Array();
    function hinzufuegen($artikel) {
    $this->inhalt[$artikel]++;
    }
    function entfernen($artikel) {
    unset($this->inhalt[$artikel]);
    }
    function leeren() {
    $this->inhalt = Array();
    }
    }
    ?>

    614 ist die Reise die ich übergeben habe.

    Weiß jemand Rat?

    Danke im Voraus!
    @dd Internet Webservice
    Rosenwinkel 22, 22607 Hamburg
    Tel: 040 / 320 34 579 Mail:skieck@yahoo.com, Web: http://www.add-internet.de
    Kursprogramm unter:
    http://www.add-internet.de/kursunterlagen/Kursangebot.pdf

  • #2
    PHP Code:
    function hinzufuegen($artikel) {
        
    $this->inhalt[$artikel]++;

    Was möchtest du damit bezwecken? Meinst du nicht eher etwas in dieser Richtung:
    PHP Code:
    $this->inhalt[] = $artikel
    ?
    Zeig uns mal auf die Zeile(n), in der/denen du den Artikel übergibst.

    OffTopic:

    Nur als kleiner Hinweis: Man sollte nach Möglichkeit auf Englisch programmieren.



    Grüße
    Nieder mit der Camel Case-Konvention

    Comment


    • #3
      function hinzufuegen($artikel) {
      $this->inhalt[$artikel]++;
      }

      Mit dieser Zeile möchte ich bezwecken das die Anzahl der Reisen hochgezählt wird damit ich eben mehr als eine Reise auf die Liste nehmen kann.
      Ich bin leider kein Php-Profi und habe versucht mir Scripte aus einem Tutorial anzupassen.


      $this->inhalt[] = $artikel;
      Wenn ich diese Zeile verwende bekomme ich nichts angezeigt.


      Ich übergebe die Reise mit einem Link:
      <a href='merkliste_02.php?artikel=$Reise_ID' target=\"merkliste\">Diese Reise auf die Merkliste schreiben</a>
      @dd Internet Webservice
      Rosenwinkel 22, 22607 Hamburg
      Tel: 040 / 320 34 579 Mail:skieck@yahoo.com, Web: http://www.add-internet.de
      Kursprogramm unter:
      http://www.add-internet.de/kursunterlagen/Kursangebot.pdf

      Comment


      • #4
        sieht auf den ersten blick nach dem typischen register_globals aus. zeig doch mal den code, wo du das object erzeugst und die methode aufrufst.

        peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Comment


        • #5
          Du kannst die Anzahl der Reisen auf zwei verschiedene Weisen ermitteln. Entweder du legst eine Variable als Zähler an, oder du speicherst die Reisen in einem Array und ermittelst dessen Anzahl mithilfe von count(), das alle Elemente eines Arrays zählt.
          PHP Code:
          $this->_num_articles++;

          // oder

          $this->_inhalt[] = $artikel;

          $num_articels count($this->_inhalt); 
          Zeig mal bitte die Stelle, an der die Reise-ID aus der URL deinem Warenkorb übergeben wird. Nicht den Link selbst.
          Nieder mit der Camel Case-Konvention

          Comment


          • #6
            PHP Code:
            error_reporting(E_ALL);

            class 
            Warenkorb 
            {
              protected 
            $inhalt = Array();

              public function 
            hinzufuegen($artikel,$anzahl=1
              {
                if(empty(
            $this->inhalt[$artikel])) 
                  
            $this->inhalt[$artikel] = 0;
                
            $this->inhalt[$artikel] += $anzahl;
              }

              public function 
            entfernen($artikel
              {
                unset(
            $this->inhalt[$artikel]);
              }

              public function 
            leeren() 
              {
                
            $this->inhalt = Array();
              }

            Ein bisschen schöner machen und ein paar Fehlerprüfungen einbauen, dann kann da mal ein richtiger Warenkorb draus werden..
            z.B. die Iterator oder ArrayAccess Schnittstelle implementieren
            Last edited by combie; 16-10-2008, 17:57.
            Wir werden alle sterben

            Comment


            • #7
              @Kropff und Griecherus

              Ich hoffe dies ist die Stelle die ihr meint:
              <?php
              #error_reporting(E_ALL);

              //starte Session, falls nicht schon passiert
              #session_start();
              #print (session_id()."<BR>");
              #print_r($_SESSION);

              require ("merkliste.inc.php");
              // Hole Warenkorbobjekt aus der Session
              $korb = $_SESSION["korb"];
              // Falls es der Erste Aufruf ist, muss zuerst
              // ein neuer Warenkorb angelegt werden
              if (!is_object($korb)) {
              $korb = new Warenkorb();
              $_SESSION["korb"] = $korb;
              }
              // Artikel hinzufuegen?
              if (isset($artikel)) $korb->hinzufuegen($artikel);
              // Artikel entfernen?
              if (isset($entf)) $korb->entfernen($entf);

              // Gesamten Warenkorb loeschen?
              if (isset($loeschen)) $korb->leeren();

              if (!empty ($korb->inhalt)) {


              @combie
              Wenn ich deinen Code verwende bkomme ich:
              Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in merkliste.inc.php on line 20
              @dd Internet Webservice
              Rosenwinkel 22, 22607 Hamburg
              Tel: 040 / 320 34 579 Mail:skieck@yahoo.com, Web: http://www.add-internet.de
              Kursprogramm unter:
              http://www.add-internet.de/kursunterlagen/Kursangebot.pdf

              Comment


              • #8
                Pass deinen Code/ dein Posting doch bitte an unsere Regeln an: http://www.php-resource.de/forum/sho...threadid=50454

                @combie Wenn ich deinen Code verwende bkomme ich:
                Das solltest du nochmal überprüfen, der Code ist nämlich fehlerfrei!
                Last edited by TobiaZ; 16-10-2008, 18:15.

                Comment


                • #9
                  Dein grundlegenstes Problem ist register_globals, eine veraltete Einstellung, die zudem ein gewisses Sicherheitsrisiko darstellt und daher deaktiviert werden sollte. Ab PHP6 wird es register_globals gar nicht mehr geben.

                  Und der Grund für den Parse Error mit Combies Code ist, dass du scheinbar PHP < 5 benutzt, das die Sichtbarkeits-Schlüsselwörter public, protected und private noch nicht kennt.
                  Nieder mit der Camel Case-Konvention

                  Comment


                  • #10
                    Also das Ganze läuft bei Purtec:

                    register_globals On

                    PHP Version 4.4.9
                    @dd Internet Webservice
                    Rosenwinkel 22, 22607 Hamburg
                    Tel: 040 / 320 34 579 Mail:skieck@yahoo.com, Web: http://www.add-internet.de
                    Kursprogramm unter:
                    http://www.add-internet.de/kursunterlagen/Kursangebot.pdf

                    Comment


                    • #11
                      Provider wechseln! (okay, es ginge auch bei puretec, aber sowas uraltes und gefährliches darf man nicht unterstützen)


                      Wieso eigentlich unset($this->inhalt[$artikel]) beim Entfernen? Wenn man $artikel x-mal im Warenkorb hat, sind gleich alle x weg. Sollte es nicht eher $this->inhalt[$artikel]-- heißen?

                      Comment


                      • #12
                        PHP4.4.9 ist funkelnagel neu und frisch! Wohl das frischeste PHP4, was es je geben wird.
                        Uralt, naja, aber nicht gefährlich.

                        Aber eben kein PHP5 und dieses sollte sich bei puretec problemlos einschalten lassen. Entweder per .htaccess oder die Endung *.php5 verwenden. Irgendwann werden die das auch zum Standard machen.
                        Last edited by combie; 16-10-2008, 18:57.
                        Wir werden alle sterben

                        Comment


                        • #13
                          Mit gefährlich meine ich register_globals.

                          Comment


                          • #14
                            Ja, das ist unangenehm...

                            Aber da sich das nur bei schlampig geschriebenen Scripten auswirkt, sollten "wir" damit keine Sorgen haben...
                            Wir werden alle sterben

                            Comment


                            • #15
                              Hallo Leute,
                              also wenn ich alles umbenenne auf *.php5 dann erscheint keine Reise auf meiner Merkliste.
                              Hat nicht noch wer eine Idee was ich machen kann, mann muss doch das Ganze auch mit den Purteceinstellungen zum Laufen bringen können!?
                              @dd Internet Webservice
                              Rosenwinkel 22, 22607 Hamburg
                              Tel: 040 / 320 34 579 Mail:skieck@yahoo.com, Web: http://www.add-internet.de
                              Kursprogramm unter:
                              http://www.add-internet.de/kursunterlagen/Kursangebot.pdf

                              Comment

                              Working...
                              X