Problem mit einem Warenkorb

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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

    Kommentar


    • #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

      Kommentar


      • #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

        Kommentar


        • #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

          Kommentar


          • #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
            Zuletzt geändert von combie; 16.10.2008, 18:57.
            Wir werden alle sterben

            Kommentar


            • #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

              Kommentar


              • #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!
                Zuletzt geändert von TobiaZ; 16.10.2008, 19:15.

                Kommentar


                • #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

                  Kommentar


                  • #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

                    Kommentar


                    • #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?

                      Kommentar


                      • #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.
                        Zuletzt geändert von combie; 16.10.2008, 19:57.
                        Wir werden alle sterben

                        Kommentar


                        • #13
                          Mit gefährlich meine ich register_globals.

                          Kommentar


                          • #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

                            Kommentar


                            • #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

                              Kommentar

                              Lädt...
                              X