Warenkorb items mit Mengenabgaben an Script übergeben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Warenkorb items mit Mengenabgaben an Script übergeben

    Hallo liebe Gemeinde,

    ich habe da auf der einen Seite ( form.php) eine Tabelle, umrahmt von einem Formular, je Zeile ist eine Bezeichnung, ein Input Feld für die Mengenangabe und eine Checkbox vorhanden.

    Quellcode

    1. <table width="100%" border="0" cellspacing="0" cellpadding="0">
    2. <form id="form" name="form" method="post" action="" enctype="application/x-www-form-urlencoded">
    3. <tr>
    4. <td>Orangen</td>
    5. <td>
    6. <input type="text" name="itemMenge[<?php printf("%s", $row['itemID']);?>]" /></td>
    7. <td><input name="item[<?php printf("%s", $row['itemID']);?>]" type="checkbox" value="<?php echo"%s", $row['itemID'];?>" /></td>
    8. </tr>
    9. <tr>
    10. <td>Birnen</td>
    11. <td>
    12. <input type="text" name="itemMenge[<?php printf("%s", $row['itemID']);?>]" /></td>
    13. <td><input name="item[<?php printf("%s", $row['itemID']);?>]" type="checkbox" value="<?php printf("%s", $row['itemID']);?>" /></td>
    14. </tr>
    15. <tr>
    16. <td>&nbsp;</td>
    17. <td><input type="submit" name="button" id="button" value="Senden" /></td>
    18. <td>&nbsp;</td>
    19. </tr>
    20. </form>
    21. </table>
    Alles anzeigen


    Wie kann ich nun im empfangenden Script eine Abarbeitung richtig zuordnen?

    Wenn ich z.B. keine Mengenangaben hätte und ich bräuchte nur die items abarbeiten, dann würde ich das ja so machen:

    Quellcode

    1. foreach($_POST['itemID'] as $key => $value) {
    2. mysql_query("insert into tabelle (itemID, datum) values ('$key', '$yyyy-$mm-$dd')");
    3. }


    nun soll aber in die Datenbanktabelle auch die gewünschte Menge abgelegt werden, z.B.:

    Quellcode

    1. foreach($_POST['knummer'] as $key => $value) {
    2. mysql_query("insert into tabelle (itemID, itemMenge, datum) values ('$key', '$itemMenge', '$yyyy-$mm-$dd')");
    3. }


    1.) Wie kann ich sicherstellen, dass nun wirklich z.B. 4 Orangen und 3 Birnen in die Datenbank wandern, also das die Zeilen aus dem Formular in der richtigen Reihenfolge abgearbeitet werden?
    Muss ich das irgendwie serialisieren oder imploden, exploden?

    2.) Kann ich im Formular schon mit Javascript sicherstellen, dass die Zeilen die gechecked wurden auch eine Mengenangabe aufweist? Wenn ja, wie?
    Das der Benutzer Javascript erlaubt ist sichergestellt ;)

    Bitte um Hilfe

    LG

    kingluui
    Man muss nicht wissen wie es geht, man muss nur wissen wo es steht! Natürlich bei easy-coding 8o de
  • Zum Javascript:

    Es mag ja sein, dass alle Benutzer JS aktiviert haben, aber das hält niemanden davon ab den DOM oder sogar den Request zu manipulieren.

    Also ganz wichtig: "All input data is evil" ... immer Serverseitig die Eingabe prüfen und JS nur benutzen um die Usability zu verbessern.



    Zum PHP:

    Kannst du mal eine Ausgabe des html posten?
    Da steht doch überall der selbe Wert ....

    Und was ist das:

    Quellcode

    1. <?php echo"%s", $row['itemID'];?>

    ?
  • Ja, Hallo Vince,

    das mit dem JS habe ich mir zu Herzen genommen,

    Der Inhalt in dem Formular kommt ja aus einer Datenbank und würde dann z.B. so aussehen:

    Quellcode

    1. <table width="100%" border="0" cellspacing="0" cellpadding="0">
    2. <form id="form" name="form" method="post" action="" enctype="application/x-www-form-urlencoded">
    3. <tr>
    4. <td>Orangen</td>
    5. <td>
    6. <input type="text" name="itemMenge[1]" /></td>
    7. <td><input name="item[1]" type="checkbox" value="1" /></td>
    8. </tr>
    9. <tr>
    10. <td>Birnen</td>
    11. <td>
    12. <input type="text" name="itemMenge[2]" /></td>
    13. <td><input name="item[2]" type="checkbox" value="2" /></td>
    14. </tr>
    15. <tr>
    16. <td>&nbsp;</td>
    17. <td><input type="submit" name="button" id="button" value="Senden" /></td>
    18. <td>&nbsp;</td>
    19. </tr>
    20. </form>
    21. </table>
    Alles anzeigen


    Jetzt kannste da bestimmt mehr mit anfangen.
    Man muss nicht wissen wie es geht, man muss nur wissen wo es steht! Natürlich bei easy-coding 8o de
  • Du musst die value nutzen.

    Quellcode

    1. <tr>
    2. <td>Orangen</td>
    3. <td>
    4. <input type="text" name="itemMenge[]" value="1" /></td>
    5. <td><input name="item[]" type="checkbox" value="1" /></td>
    6. </tr>
    7. <tr>
    8. <td>Birnen</td>
    9. <td>
    10. <input type="text" name="itemMenge[]" value="2" /></td>
    11. <td><input name="item[]" type="checkbox" value="2" /></td>
    12. </tr>
    Alles anzeigen


    Und dann schau dir einfach mal dein $_POST Array mit var_dump($_POST); an.
  • Ja Vince,

    das ist ja das Problem, das verstehe ich nicht, wie muss das im empfangenden Script aussehen,

    ich weiss ja wie ich auf einen Wert z.B. item[ ] zugreifen kann, aber ich weiss nicht wie ich an den zweiten Wert komme, muss ich das im empfangenden Script erst in ein array schreiben und dann das array in die foreach Schleife schicken?

    Ich weiss ihr denkt sicherlich manchmal, wie kann jemand versuchen Warenkörbe zu programmieren, der von sowas keinen Plan hat, aber gebt mir bitte ne Chance, ich lerne und lerne. . .
    Man muss nicht wissen wie es geht, man muss nur wissen wo es steht! Natürlich bei easy-coding 8o de
  • So ein Warenkorb zu Programmieren ist zwar nicht best-practice, aber solangu du da zu Übungszwecken einsetzt, geht es.

    Nehmen wir mal als Ausgangsbasis das statische HTML Formular

    Quellcode

    1. <table width="100%" border="0" cellspacing="0" cellpadding="0">
    2. <form id="form" name="form" method="post" action="" enctype="application/x-www-form-urlencoded">
    3. <tr>
    4. <td>Orangen</td>
    5. <td><input type="hidden" name="itemName[]" value="Orangen" /></td>
    6. <td><input type="text" name="itemMenge[]" value="11" /></td>
    7. <td><input name="item[]" type="checkbox" value="1" /></td>
    8. </tr>
    9. <tr>
    10. <td>Birnen</td>
    11. <td><input type="hidden" name="itemName[]" value="Birnen" /></td>
    12. <td><input type="text" name="itemMenge[]" value="22" /></td>
    13. <td><input name="item[]" type="checkbox" value="1" /></td>
    14. </tr>
    15. <tr>
    16. <td>&nbsp;</td>
    17. <td><input type="submit" name="button" id="button" value="Senden" /></td>
    18. <td>&nbsp;</td>
    19. </tr>
    20. </form>
    21. </table>
    Alles anzeigen


    Und nun verschachteln wir 2 foreach Schleifen miteinander und packen alles in 1 Array was zusammengehört.

    Quellcode

    1. if(isset($_POST) && count($_POST) > 0 ){
    2. var_dump($_POST);
    3. foreach ($_POST as $v){
    4. if(is_array($v)){
    5. foreach($v as $k2=>$v2){
    6. $warenkorb[$k2][] = $v2;
    7. }
    8. }
    9. }
    10. var_dump($warenkorb);
    11. }
    Alles anzeigen


    Das müsste so funktionieren. Schau dir einfach die beiden var_dump Ausgaben an um zu sehen was passiert ist und versuch es nachzuvollziehen.


    Probleme gibt es auf jedenfall bei der Checkbox.
    Wenn du diese nicht anklickst, werden keine Daten mitgesendet. Heisst also das funktioniert nicht mit dieser Schleifenkonstruktion.