Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme bei ner Aufgabe

Einklappen

Neue Werbung 2019

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

  • Probleme bei ner Aufgabe

    Hi Leute,
    Mache grad ne Schulung zum Webdesigner. Jetzt hab ich hier ein Problem, wo ich ein kleinen "Warenkorb" programmieren soll.
    Wenn ich ein Produkt auswähle, soll ne Session gestartet werden im Warenkorb und das Produkt und die Anzahl anzeigen. Hab den Code GENAUSO wie im Heft beschrieben abgetippt, aber es kommt folgende Fehlermeldung:
    Warning: Invalid argument supplied for foreach() in C:\Xampp\xampp\htdocs\PHP_Uebung\web-shop\warenkorb.php on line 10
    Wo hab ich da den Fehler..?

    Hier mal der Code:
    PHP-Code:
    <?php
     session_start
    ();
      if (isset(
    $artikel)) $_SESSION['korb'][$artikel]++;
    ?>
    <html>
     <body>
      <h1>Warenkorb</h1>
       Sie haben bisher folgende Artikel ausgewählt:</p>
    <?php
      
    foreach ($_SESSION['korb'] as $artikel=>$anzahl) {
         print 
    "Artikelnummer: $artikel<br>";
         print 
    "Anzahl: $anzahl<br>";
         if (
    $artikel == 1001)
             print 
    "Der Herr der Ringe<p>";
         if (
    $artikel == 2002)
             print 
    "Der kleine Hobbit<p>";
         if (
    $artikel == 3003)
             print 
    "Grimms M&uaumlrchen<p>";
         if (
    $artikel == 4004)
             print 
    "Elric von Melnibonee<p>";
     }
    ?>
     </body>
    </html>

  • #2
    Wo kommt $artikel her?

    Hier kommt es auf deine Server-Konfiguration an. Bei dir wird
    Code:
    register_globals = off
    gesetzt sein (was auch gut ist). Das Quellcode Beispiel beruht vermutlich auf eine Konfiguration mit
    Code:
    register_globals = on
    .
    Im Ergebnis kann dein Programm nicht wissen, was $artikel ist. Du müsstest also so etwas wie $_POST['artikel'] oder $_GET['artikel'] verwenden. Kommt drauf an, wie der Paramter übergeben wird.

    Hierzu kannst du dir diesen Artikel durchlesen:
    http://php.net/manual/de/security.globals.php

    Kommentar


    • #3
      Und wo im Script.? Hab jetzt POST, GET schon im Oberen Scriptbefehl und im unteren versucht. Funktioniert trotzdem net.

      Kommentar


      • #4
        Welches obere und untere? Poste doch mal, wie es jetzt aussieht.

        Kommentar


        • #5
          Wie willst du denn die Daten übergeben? Über die URL dann bekommst du sie per GET. Willst du sie über ein Formular weiterreichen, gibt es das ganze per POST

          Grundlagen lernen!

          Kommentar


          • #6
            Da bin ich ja grad dabei beim lernen..

            PHP-Code:
            <?php
             session_start
            ();
              if (isset(
            $artikel)) $_SESSION['korb'][$artikel]++;
            ?>
            <html>
             <body>
              <h1>Warenkorb</h1>
               Sie haben bisher folgende Artikel ausgewählt:</p>
            <?php
              $artikel 
            $_GET['artikel'];
              foreach (
            $_SESSION['korb'] as $artikel=>$anzahl) {
                 print 
            "Artikelnummer: $artikel<br>";
                 print 
            "Anzahl: $anzahl<br>";
                 if (
            $artikel == 1001)
                     print 
            "Der Herr der Ringe<p>";
                 if (
            $artikel == 2002)
                     print 
            "Der kleine Hobbit<p>";
                 if (
            $artikel == 3003)
                     print 
            "Grimms M&uaumlrchen<p>";
                 if (
            $artikel == 4004)
                     print 
            "Elric von Melnibonee<p>";
             }
            ?>
             </body>
            </html>
            Bin mir halt nie sicher, an welcher Stelle im Script ich das GET einfügen muss.

            Kommentar


            • #7
              PHP-Code:
              if (isset($artikel)) $_SESSION['korb'][$artikel]++; 
              Da wird versucht etwas in den Warenkorb zu legen. Allerdings ist hier bereits $artikel unbekannt. Pack dort an. GET oder POST.
              Oder schreib dir einfach eine Zeile drüber:

              PHP-Code:
              $artikel $_GET['artikel']; 
              Du kannst in deiner 3. Zeile nicht einfach auf $artikel zugreifen. Die Variable ist unbekannt! Immer, wenn du auf Request-Parameter zugreifen willst, musst du auch die entsprechende Methode wählen (get, post, session).

              Kommentar


              • #8
                HA! Ich Depp!!
                Hab das GET immer hinter den session_start() befehl geschrieben. Jetzt steht er davor und siehe da, es geht..! Danke Leute...

                Bis zu meinem nächsten Problem...

                LG Alga

                Kommentar


                • #9
                  das Problem ist die Reihenfolge des Codes

                  ZUERST musst du (nach session_start) den Get-wert behandeln - erst danach ist $artikel auch definiert ....

                  also mE
                  PHP-Code:
                  <?php
                   session_start
                  ();
                    
                  $artikel $_GET['artikel']; 
                   if (isset(
                  $artikel)) $_SESSION['korb'][$artikel]++; 
                  ....
                  das sollte mit session_start selbst nichts zu tun haben - bei mir steht session_start() vor JEDEM anderen Befehl und ich kann mit Get und Post Daten übergeben .....

                  Kommentar


                  • #10
                    Und nochmal ich...
                    Jetzt soll ich noch einbauen, dass man die Artikel einzeln löschen kann, und den kompletten Korb. Da brauch ich doch normal keinen GET Befehl, weil die doch eh schon im script stehen oder.?
                    Übrigens hab ichs auch wieder genau so abgeschrieben, wies in dem "Lehrheft" steht...

                    PHP-Code:
                    <?php
                     $artikel 
                    $_GET['artikel'];
                     
                    session_start();
                      if (isset(
                    $artikel)) $_SESSION['korb'][$artikel]++;
                      if (isset(
                    $entf)) unset($_SESSION['korb'][$entf];
                      if (isset(
                    $loeschen)) $_SESSION['korb'] = Array();
                    ?>
                    <html>
                     <body>
                      <h1>Warenkorb</h1>
                       Sie haben bisher folgende Artikel ausgew&auml;hlt:</p>
                      <a href="warenkorb.php?loeschen=1">Warenkorb l&ouml;schen</a><p>
                    <?php
                     
                    if (isset ($_SESSION['korb'])) {
                      foreach (
                    $_SESSION['korb'] as $artikel=>$anzahl) {
                         print 
                    "Artikelnummer: $artikel ";
                         print 
                    "<a href='warenkorb.php?entf=$artikel'>";
                         print 
                    "Artikel entfernen</a><br>";
                         print 
                    "Anzahl: $anzahl<br>";
                         if (
                    $artikel == 1001)
                             print 
                    "Der Herr der Ringe<p>";
                         if (
                    $artikel == 2002)
                             print 
                    "Der kleine Hobbit<p>";
                         if (
                    $artikel == 3003)
                             print 
                    "Grimms M&uaumlrchen<p>";
                         if (
                    $artikel == 4004)
                             print 
                    "Elric von Melnibonee<p>";
                          }
                     }
                     else {
                         print 
                    "Bisher nichts ausgewählt";
                     }
                    ?>
                     
                     </body>
                    </html>

                    Kommentar


                    • #11
                      So wie ich das sehe wieder das gleiche Spiel. Er dürfte $entf nicht kennen.

                      PHP-Code:
                       $entf $_GET['entf']; 
                      Aber darauf könnte man jetzt auch selber kommen, denn du setzt es hier ja (Das GET Parameter)

                      Code:
                      print "<a href='warenkorb.php?entf=$artikel'>";

                      Kommentar


                      • #12
                        Jo.
                        Was ich mich nur frage, warum steht das in dem Heft (wo es laut Screenshot auch funktioniert) noch anders drin???

                        Kommentar


                        • #13
                          ich weiß nicht, wie alt dein Leerheft ist (absichtlich falsch geschrieben) ... aber bis vor 7 oder 8 Jahren war register_globals Standard ...... und Lehrbücher werden oft nicht von Grund auf neugeschrieben, sondern nur überarbeitet - da kann so eine Kleinigkeit schon mal unter den Tisch fallen, wenn die Überarbeitung von "normalen" Verlagsmitarbeitern (ohne PHP-Kenntnisse) kommt und nicht vom ursprünglichen Autor

                          Kommentar


                          • #14
                            Oder der Autor geht davon aus, dass es nach eine vorherigen Lektion klar ist und lässt das bewusst aus Platzgründen weg. Allein die Tatsache das im Beispiel GET genutzt wird, zeigt eigentlich das dass Thema vorher schon behandelt wurde.

                            Kommentar


                            • #15
                              Zitat von alga98 Beitrag anzeigen
                              Jo.
                              Was ich mich nur frage, warum steht das in dem Heft (wo es laut Screenshot auch funktioniert) noch anders drin???
                              Das hat doch die gleiche Ursache wie in Post #2. Dass das jetzt im nächsten Anlauf wieder nicht funktioniert ist doch klar!

                              Zitat von tarian Beitrag anzeigen
                              Oder der Autor geht davon aus, dass es nach eine vorherigen Lektion klar ist und lässt das bewusst aus Platzgründen weg. Allein die Tatsache das im Beispiel GET genutzt wird, zeigt eigentlich das dass Thema vorher schon behandelt wurde.
                              Im Ausgangsquelltext wurde kein GET verwendet.

                              Kommentar

                              Lädt...
                              X