Anzahl von Artikeln in die DB schreiben

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

  • Anzahl von Artikeln in die DB schreiben

    Hallo Zusammen,

    ich habe ein Problem und weiss nicht so recht weiter. Ich arbeite gerade an einer kleinen E-Shop Lösung.

    In einer FOR Schleife lese ich die Artikel alle fein aus und Artikel die vom User ausgewählt wurden speichere ich dann in einer Warenkorbtabelle in die DB.
    Nur mit der Anzahl weiss ich jetzt nicht so recht weiter, weil die wird ja erst direkt vor dem senden vom User festgelegt.
    Da ich keinen Submit Button habe, weiss ich nicht wie ich es machen muss. Hier mal meine nicht funktionierende Lösung:

    PHP-Code:
    # Warenkorb in die DB schreiben
    $mysql->clearall();
    $mysql->set_table("project_warenkorb");
    $mysql->set_field("user_id",$_SESSION['userID']);
    $mysql->set_field("material_id",$_REQUEST['materialid']);
    $mysql->set_field("anzahl",$_REQUEST['anzahl0']);
    $mysql->insert(); 
    Hier die FOR SChleife wo die Artikel ausgelesen werden. Dahinter direkt das Warenkorb Icon zum senden:
    PHP-Code:
    <? 
            
    # Material auslesen
    $mysql->clearall();
    $mysql->set_table("project_material");
    if($_REQUEST['categorie']!="")
      $mysql->set_where("shop=1 AND categorie =" . $_REQUEST['categorie']);
    else
      $mysql->set_where("2=1");
            
      $material_num=$mysql->select();
      for($x=0;$x<$material_num;$x++)
      {
      ?>
      <td style="width: 40px;" class="listenhintergrund2_schwach"   align="center"><input type="text" name="anzahl<? echo $x?>" 
    value="<? if ($_REQUEST['anzahl'][$x]>0) echo $_REQUEST['anzahl'][$x]; else echo "0";?>" style="width: 30px;" maxlength="3"></td>
                    <td class="listenhintergrund2_schwach"><a href="main.php?ebene1=select_bestellung&ebene2=show_shopbestellung&
    Send=1&categorie=<? echo $cat?>&materialid=<? echo $material_id[$x];>">
    <img src="images/16x16_warenkorb.gif" border="0"></a></td>
    </tr>
    <?
    }
    ?>
    Hoffe ihr könnte mir helfen
    Zuletzt geändert von thurman; 17.07.2005, 13:41.

  • #2
    Du musst die Daten zum Server bekommen. Setz doch auf das Icon dann nen form.submit(); o.Ä.... Man kann auch in <button>-Tags Bilder reinmachen. Oder per JS dann die Menge an die URL anhängen aber das ist .....


    P.S.: Wärest du so freundlich und würdest die Regeln befolgen und deinen Code so umbrechen, dass wir nicht mehr scrollen müßen? Ich hab hier 2 TFTs stehen @ 1280x1024 und dein Posting geht quasi über beide Monitore....
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      danke für den Tipp mit den Bildern in den Buttons!

      müsste ja dann wie folgt in etwa aussehen:

      PHP-Code:
      <INPUT type="image" src="images/16x16_warenkorb.gif" title="In den Warenkorb"
      Jetzt bin ich wirklich alles andere als ein Spezialist, wie bekomme ich jetzt die Werte übergeben?.
      Der Artikel steht ja nicht einem Feld sondern einfach als Text auf der Seite.

      Den habe ich ja bisher über das <a href .. mit übergeben

      PHP-Code:
      &materialid=<? echo $material_id[$x];?>

      Kommentar


      • #4
        Habe jetzt den folgenden Lösungsweg gefunden.
        Das klappt auch alles ganz wunderbar, solange die Anzahl einstellig ist. Wenn ich aber z.B. 12 Artikel reinlege, zeigt der Warenkorb nur die Menge 1 an. Bei 43 z.B. 4.
        Also schneidet er nach der ersten Stelle ab.
        Verlasse ich die Seite und rufe sie ganz neu auf, steht die korrekt Anzahl drin. Also wird auch richtig in die DB gespeichert.
        Hat jemand eine Idee, finde den Fehler mehr als merkwürdig.

        Danke

        PHP-Code:
                for($x=0;$x<$material_num;$x++)
                {
                ?>
                <form action="main.php" name="add_artikel" method="post" enctype="multipart/form-data">
                    <input name="ebene1" type="hidden" value="select_bestellung">
                    <input name="ebene2" type="hidden" value="show_shopbestellung">
                    <input name="anzahl" type="hidden" value="<? echo $_REQUEST['anzahl']?>">
                    <input name="artikel" type="hidden" value="<? echo $material_id[$x];?>">
                    <input name="categorie" type="hidden" value="<? echo $cat?>">
                    <input name="Send" type="hidden" value="1">
                    <tr><td>&nbsp;</td></tr>
                    <tr>
                        <td class="listenhintergrund2_schwach"><a href="#" onClick="openpic('images/shop/
        <? echo $material_image[$x];?>','Detailansicht', '250', '250')"><img src="images/shop/<? echo $material_image[$x]?>" style="width: 45px;" border="0" title="Detailansicht"></a></td>
                        <td style="width: 250px;" class="listenhintergrund2_schwach"><? echo $material_name[$x]."<br>Artikel-Nr. ". $material_nummer[$x];?></td>
                        <td class="listenhintergrund2_schwach"><? echo $material_desc[$x] ?></td>
                        <td style="width: 50px;" class="listenhintergrund2_schwach" align="right" ><? echo $material_einheit[$x]." ST";?></td>
                        <td style="width: 60px;" class="listenhintergrund2_schwach" align="right"><? echo german_price($material_preis[$x]) . " €";?></td>
                        <td style="width: 40px;" class="listenhintergrund2_schwach" align="center"><input type="text" name="anzahl" value="0" style="width: 30px;" maxlength="3">
                        <td class="listenhintergrund2_schwach" align="center" ><INPUT type="image" src="images/16x16_warenkorb.gif" title="In den Warenkorb"><p>
                        <?
                        if($material_lieferzeit[$x]>0 && $material_lieferzeit[$x]<=3)
                            echo "<img src='images/3.gif' border='0' title='Lieferung innerhalb von $material_lieferzeit[$x] Tagen'>";
                        if($material_lieferzeit[$x]>3 && $material_lieferzeit[$x] <=6)
                            echo "<img src='images/6.gif' border='0' title='Lieferung innerhalb von $material_lieferzeit[$x] Tagen'>";
                        if($material_lieferzeit[$x]>6)
                            echo "<img src='images/18.gif' border='0' title='Lieferung innerhalb von $material_lieferzeit[$x] Tagen'>";
                        ?>
                        </td>
                    </tr>
                </form>
                <?
        Zuletzt geändert von thurman; 19.07.2005, 20:36.

        Kommentar


        • #5
          die Anzeige des Warenkorbs sieht wie folgt aus:

          PHP-Code:
          <td>Warenkorb: <?echo german_price($basket)." €"?></td>
          und die MySQL Befehle lauten so:

          PHP-Code:
          <?
              # debug Modus
              # $mysql->enable_debug();

              # eingeloggte Firma
              $mysql->clearall();
              $mysql->set_table("project_firmenprofil");
              $mysql->set_where("id=".$_SESSION['firmenID']);
              $mysql->select();
              $cache=$mysql->fetch_assoc();
              $gruppe=$cache['gruppen_id'];

              # übergebene categorie
              $mysql->clearall();
              $mysql->set_table("project_shop_categorie");
              if ($_REQUEST['categorie']>0)
                  $mysql->set_where("id=".$_REQUEST['categorie']);
              $mysql->select();
              $cache=$mysql->fetch_assoc();
              $categorie=$cache['name'];
              $cat=$cache['id'];
              
              # Material auslesen
              $mysql->clearall();
              $mysql->set_table("project_material");
              if($_REQUEST['categorie']!="")
                  $mysql->set_where("shop=1 AND categorie =" . $_REQUEST['categorie']);
              else
                  $mysql->set_where("2=1");
              $material_num=$mysql->select();

              for($x=0;$x<$material_num;$x++)
              {
                  $cache=$mysql->fetch_assoc();
                  $material_name[$x] = $cache['name'];
                  $material_nummer[$x] = $cache['artikelnummer'];
                  $material_desc[$x] = $cache['description'];
                  $material_einheit[$x] = $cache['einheit'];
                  $material_image[$x] = $cache['image'];
                  $material_lieferzeit[$x] = $cache['lieferzeit'];
                  $material_id[$x] = $cache['id'];
                  $material_xid[$cache['id']] = $x;
              }

              # Der Materialpreis ist abhängig davon, welcher Preisgruppe die Firma angehört!
              $mysql->clearall();
              $mysql->set_table("project_materialpreis");
              $mysql->set_where("gruppen_id=".$gruppe);
              $preis_num=$mysql->select();

              for($x=0;$x<$preis_num;$x++)
              {
                  $cache=$mysql->fetch_assoc();
                  $materialpreis_id[$x] = $cache['material_id'];
                  $material_preis[$material_xid[$cache['material_id']]] = $cache['preis']." ";
              }
              
              if ($_REQUEST['Send']&& $_REQUEST['anzahl']>0)
              {
                  # Warenkorb in die DB schreiben

                  $mysql->clearall();
                  $mysql->set_table("project_warenkorb");
                  $mysql->set_field("user_id",$_SESSION['userID']);
                  $mysql->set_field("material_id",$_REQUEST['artikel']);
                  $mysql->set_field("anzahl",$_REQUEST['anzahl']);
                  $mysql->insert();
              }
              
              # Warenkorb aus der DB lesen (Anzeige oben rechts)
              $mysql->clearall();
              $mysql->set_table("project_warenkorb");
              $mysql->set_where("user_id=".$_SESSION['userID']);

              $basket_num=$mysql->select();

              for($x=0;$x<$basket_num;$x++)
              {
                  $cache=$mysql->fetch_assoc();
                  $materialid[$x]=$cache['material_id'];
                  $materialxid[$cache['id']] = $x;
                  $anzahl[$x]=$cache['anzahl'];
              }
              
              # Materialpreise des Warenkorbes (Anzeige oben rechts)
              $mysql->clearall();    
              for($x=0;$x<$basket_num;$x++)
              {
                  $mysql->clearall();
                  $mysql->set_table("project_materialpreis");
                  $mysql->set_where("material_id=".$materialid[$x] ." AND gruppen_id =".$gruppe);
                  $mysql->select();

                  $cache=$mysql->fetch_assoc();
                  $preis[$materialxid[$cache['material_id']]] = $cache['preis']." ";
                  $basket = $basket+($preis[$materialxid[$cache['material_id']]]*$anzahl[$x]);
              }
                  
                  
           ?>

          Kommentar


          • #6
            *zack* da schiebe ich doch direkt mal eine Verwarnung hier ein. Bitte bearbeite deine Beiträge gemäß den Forenregeln (insb. horizontales Scrollen).

            http://www.php-resource.de/forum/sho...threadid=50454

            Hat leider nicht jeder so nen schönen 50" Bildschirm wie du...

            Kommentar


            • #7
              super tolle und hilfreiche Antwort, zumal man noch gerade dabei ist seinen
              Beitrag zu editieren.
              Wie oft hast diesen Satz wohl schon los gelassen.
              *kopfschüttel*

              Kommentar


              • #8
                OffTopic:
                Es tut mir leid, ich kann leider nicht Hellsehen. Und da nach Shurakais Hinweis erneut überlänge gepostet wurde, halte ich meinen Hinweis doch für angebracht.
                Wie oft hast diesen Satz wohl schon los gelassen.
                Leider viel zu oft, da einige Leute leider nicht in der Lage sind, sich zuerst in einem Forum umzusehen und Threads wie "erst lesen" ignorieren.

                Kommentar


                • #9
                  ich denke so sollte es auf gehen, meiner Meinung nach wird der Code durch die Umbrüche noch schwerer zu lesen

                  Wäre wirklich sehr nett wenn mir jemand bei dem Problem helfen kann. Sitze da jetzt schon 1 1/2 Tage dran,
                  falls jemand das Verhalten mal live sehen will,
                  kann ich gerne einen login schicken.

                  Will ihn aber nicht einfach so für alle posten, weil es nicht privat ist.

                  Kommentar


                  • #10
                    kein plan, mit dem code kann ich persönlich nichts anfangen.
                    var_dump() sei dein freund, debuggen musst du selbst.

                    Kommentar


                    • #11
                      habe ganz oben mal

                      var_dump($anzahl) ; einfügt

                      der liefert mir bei Anzahl 4:

                      string(1) "4"

                      bei Anzahl 13:

                      string(2) "13"

                      bei Anzahl 332:

                      string(3) "332"

                      das sieht doch an sich sehr korrekt aus

                      füge ich das var_dump($anzahl) ; unten direkt vor die for schleife ein,
                      bekomme ich folgenden output:

                      array(9) { [0]=> string(1) "4" [1]=> string(1) "4" [2]=> string(1) "2" [3]=> string(1) "3" [4]=> string(2) "12" [5]=> string(1) "4" [6]=> string(2) "44" [7]=> string(3) "333" [8]=> string(1) "4" }
                      Zuletzt geändert von thurman; 19.07.2005, 20:58.

                      Kommentar


                      • #12
                        dann wirds an der ausgabe liegen.

                        Kommentar


                        • #13
                          jo den ersten fehler habe ich. Überschreibe mir die Variablen anscheinend wieder. Umbenannt und es geht )

                          Kommentar


                          • #14
                            Original geschrieben von TobiaZ
                            Hat leider nicht jeder so nen schönen 50" Bildschirm wie du...
                            OffTopic:
                            dabei könnte man doch experimentellerweise in den stylesheets dieses forums reinschreiben:
                            Code:
                            code {
                               white-space: normal;
                            }
                            das würde die leute dazu motivieren, ihre posts direkt zu editieren.

                            Kommentar


                            • #15
                              jetzt habe ich meinen fehler. Anscheinend sollte das <input feld "anzahl">
                              nicht den selben namen haben wie meine Variable $anzahl. Als ich $anzahl
                              umbenannt habe in $stueck geht es 1a. Das hat vielleicht nerven gekostet

                              Kommentar

                              Lädt...
                              X