Mehrere Daten mit Schleife in Datenbank schreiben

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

  • Mehrere Daten mit Schleife in Datenbank schreiben

    Hallo,

    ich steh auf dem Schlauch...

    Folgendes Problem:

    Man kann Items in den Warenkorb legen und diese dann per Button ordern. Diese Daten schreibe ich beim Klick auf "Kaufen" in eine Datenbank. Zumindest Teilweise.

    Dazu gibt es eine Form mit hidden Input Fields. Zum Test habe ich eine var_dump ausgabe gemacht, welche super klappt. Wenn ich ein Item kaufen möchte wird das auch in die Datenbank geschrieben. Bei mehreren wird nur das letzte in die Datenbank geschrieben. Wie muss ich meine Form ändern, damit es alle Items in die Datenbank schreibt und nicht nur das letzte. Die Schleife an sich funktioniert, da die var_dump Ausgabe alle Items auflistet.

    <?php
    <form class="formLog" action="includes/test.php" method="post">
    <?php
    foreach($_SESSION["shopping_cart"] as $values)
    {
    $_GET['id'] = $_SESSION['id'];
    $_GET["item_id"] = $values["item_id"];
    $_GET["item_quantity"] = $values["item_quantity"];

    if (!empty($_GET['id'])) {
    echo '<input type="hidden" name="id" value="'.$_GET['id'].'">';
    }
    else {
    echo '<input type="hidden" name="id">';
    }

    if (!empty($_GET["item_id"])) {
    echo '<input type="hidden" name="item_id" value="'.$_GET["item_id"].'">';
    }
    else {
    echo '<input type="hidden" name="item_id">';
    }

    if (!empty($_GET["item_quantity"])) {
    echo '<input type="hidden" name="item_quantity" value="'.$_GET["item_quantity"].'">';
    }
    else {
    echo '<input type="hidden" name="item_quantity">';
    }
    var_dump($_GET['id']);
    var_dump($_GET["item_id"]);
    var_dump($_GET["item_quantity"]);
    }
    ?>
    <p class="pLog">
    <button class="buttonLog" name="place_offer" type="submit"> Kaufen </button>
    </p>

    </form>
    ?>


    und der Teil, welcher die Daten in die Datenbank schreibt

    <?php

    if (isset($_POST['place_offer']))
    {

    require 'dbOfferCon.inc.php';

    $UID = $_POST['id'];
    $PrID= $_POST["item_id"];
    $PAm = $_POST["item_quantity"];


    $sql = "INSERT INTO offers (UserID, ProductID, PAmount) VALUES (?, ?, ?);";
    // Here we initialize a new statement using the connection from the dbh.inc.php file.
    $stmt = mysqli_stmt_init($conn);
    // Then we prepare our SQL statement AND check if there are any errors with it.
    if (!mysqli_stmt_prepare($stmt, $sql))
    {
    // If there is an error we send the user back to the signup page.
    header("Location: Warenkorb.php?error=sqlerror");
    exit();
    }
    else
    {
    // Next we need to bind the type of parameters we expect to pass into the statement, and bind the data from the user.
    mysqli_stmt_bind_param($stmt, "sss", $UID, $PrID, $PAm);

    // Then we execute the prepared statement and send it to the database!
    // This means the user is now registered!
    mysqli_stmt_execute($stmt);
    // Lastly we send the user back to the signup page with a success message!
    header("Location: ../Warenkorb.php?signup=success");
    exit();
    }
    }
    // Then we close the prepared statement and the database connection!
    mysqli_stmt_close($stmt);
    mysqli_close($conn);


    Sorry für die fehlende Formatierung. Aber die Formatierungsbuttons sind bei mir ohne Funktion. Ich verwende Google Chrome.
    Zuletzt geändert von Moranai; 13.07.2020, 04:06.

  • #2
    Mal abgesehen davon, dass dein Code ziemlich kaputt ist, folgender Hinweis. Formularname müssen eindeutig sein, d.h. die dürfen nur einmal vorkommen. Probier mal so was aus:
    HTML-Code:
    name="item_quantity[]"
    und schau dir das Ergebnis mal mit einem
    PHP-Code:
    print_r($_POST); 
    an. Das ist zwar nicht der Weisheit letzter Schluss (fehlende Zuordnungsmöglichkeiten), sollte dich aber in die Richtung stupsen.

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

    Kommentar

    Lädt...
    X