<tr align="center">
<td>
<input type="checkbox" name="remove[]" value="<?php echo $pro_id;?>">//removes checked items
</td>
<td>
<img src="admin_area/product_images/<?php echo $product_image?>" width="60" height="60"/><br>//displays products image
<?php echo $product_title ?>//displays products title
</td>
<td>
<input type="text" size="4" name="qty" value="<?php echo $_SESSION["qty"]; ?>"><span style="color:red">Required</span>
</td>//textbox where user enters the new quantity
<input type="hidden" name="pro_id" value="<?php echo $pro_id; ?>">
</td>
<?php
$sql = "select * from cart";
$run_query = mysqli_query($con,$sql);
while ($row = mysqli_fetch_array($run_query)) {
$_SESSION["qty"] = $row['qty'];
}
if (isset($_POST['update_cart'])) {
$ip = getIp();
$Updateqty = $_POST['qty'];
//get quantity from the text boxes which are repeated with every product
$pro_id = $_POST['pro_id'];
//gets the id from the hidden field
$update_qty = "UPDATE cart SET qty='$Updateqty' where p_id='$pro_id' and ip_add='$ip'";
$run_qty = mysqli_query($con, $update_qty);
if ($run_qty) {
echo"<script>window.open('cart.php','_self')</script>";
}
}
?>
</tr>
Antwort
Es gibt ein Problem hier:
$sql = "select * from cart";
$run_query = mysqli_query($con,$sql);
while ($row = mysqli_fetch_array($run_query)) {
$_SESSION["qty"] = $row['qty'];
}
Diese while-Schleife $_SESSION["qty"]
mit jeder Iteration überschrieben werden, so dass es immer sein wird, Stellen Sie die Menge des letzten Artikels im Warenkorb ein.
Dann wird dieser Sitzungswert für jedes Element in der Anzeige verwendet.
<input type="text" size="4" name="qty" value="<?php echo $_SESSION["qty"]; ?>"><span style="color:red">Required</span>
Auch wenn das, was Sie in Ihrer Frage gezeigt haben eine Zeile aus einer Tabelle ist, die mehrere Zeilen hat, und Sie haben die gesamte Tabelle in eine Form eingewickelt, wird jeder Eingang abgegeben werden, und da Sie Mehrere Werte für qty
und pro_id
, nur die letzte wird verwendet. Das sieht so aus, als ob jede Menge aktualisiert wird.
Ich würde einen Ansatz wie diesen vorschlagen, um es zum Laufen zu bringen. Dies kann nicht für Sie arbeiten, wie sie ist, weil ich auf einige der Namen erraten, sollte aber genug sein, um zu zeigen, was ich im Sinn haben:
<?php
if (isset($_POST['update_cart'])) {
$ip = getIp();
// prepare an update statement
$sql = "UPDATE cart SET qty=? where p_id=? and ip_add=?";
$stmt = mysqli_prepare($con, $sql);
// loop over each quantity and update
foreach ($_POST['qty'] as $pro_id => $qty) {
$stmt->bind_param("iis", $qty, $pro_id, $ip);
$stmt->execute();
}
}
$sql = "select * from cart";
$run_query = mysqli_query($con,$sql);
while ($row = mysqli_fetch_array($run_query)) {
// update the session with the new values
$_SESSION[$row['p_id']]['qty'] = $row['qty'];
}
?>
diese Menge für jeden Artikel aktualisieren sollte, aber es hängt davon ab, Ein Array von qty
Werten, die von Ihrem Formular bereitgestellt werden. Um das zu erreichen, müssen Sie Ihre Eingaben mit einer Array-Syntax wie der folgenden benennen:
<form action="" method="post">
<table>
<?php foreach ($products as $product): ?>
<tr>
<td>Other product info</td>
<td>
<input type="text"
name="qty[<?php echo $product['id'] ?>]"
value="<?php echo $_SESSION[$product['id']]['qty']; ?>">
</td>
</tr>
<?php endforeach ?>
</table>
<input type="submit" name="update_cart" value="Update Cart">
</form>
Die UPDATE-Abfrage ist nicht in der While-Schleife und das OP verwendet eine andere Variable in der UPDATE: ' $ Updateqty = $ _ POST ['qty']; 'Aber * yikes * Ich sehe, wo die Logik versaut ist. –
@JayBlanchard Es gibt kein Formular im Fragecode, was bedeutet, dass es ein Formular gibt, das mehrere Instanzen des tr, die sie gezeigt haben, umschließt. Ich denke, es sieht so aus, als hätten sie viele verschiedene Instanzen von 'qty' und' pro_id' und sie werden immer die letzte bekommen. –
Oh, und mir ist gerade aufgefallen, dass das schließende tr hinter dem PHP-Code steht, also könnte es auch wiederholt werden. –
- 1. Ich brauche eine Datenbank zu aktualisieren, ohne Daten zu verlieren
- 2. ListView verschwindet vor dem Aktualisieren selbst, wenn ich zum Aktualisieren
- 3. Ich versuche, die gesamte Bestellliste zu aktualisieren
- 4. DB update Skript überspringt Zeilen zu aktualisieren, wenn ich Multithreading
- 5. Wie kann ich Google MDL-Elemente, die ich dynamisch zu meiner Seite hinzufüge, aktualisieren/aktualisieren?
- 6. Aktualisieren von Unteransichten, wenn Daten aktualisiert werden
- 7. Aktualisieren SubmitChanges() - aktualisiert nicht
- 8. Wie sollte ich die E-Mail aktualisieren?
- 9. jQuery - Wenn eine Datenbank aktualisiert wird, aktualisieren Sie die Seite
- 10. Wie kann ich AngularJS zu "aktualisieren"
- 11. Wie ich Bild des Freskos SimpleDraweeView aktualisieren kann, wenn es
- 12. Wenn ich scrolle, SwipeRefreshLayout aktualisieren meine App
- 13. Kann ich die Firebase-Datenbank aktualisieren, ohne lokal zu synchronisieren?
- 14. Wie kann ich die Benutzeroberfläche problemlos aktualisieren?
- 15. vshost.exe behält Zugriff auf meine .dll und ich kann es nicht aktualisieren, wenn ich es erstelle
- 16. JSON-Daten aktualisieren, ohne die Seite zu aktualisieren?
- 17. Homestead Installierte PHP7, aber ich brauche PHP5
- 18. Php Warenkorb aktualisieren Menge mit Sessions
- 19. Ich kann Anaconda nicht aktualisieren
- 20. Wie kann ich meine JTable-Daten automatisch aktualisieren, wenn die Datenbank aktualisiert wird?
- 21. Soll ich die Laravel-Version aktualisieren?
- 22. Solarium - Ich muss die schreibgeschützte Ergebnisliste aktualisieren
- 23. Gridview zu aktualisieren, wenn die Schaltfläche klicken Updates Daten
- 24. Soll ich GeoLiteCity.dat regelmäßig aktualisieren?
- 25. Ich möchte, dass ein div automatisch aktualisiert wird, ohne die ganze Seite zu aktualisieren
- 26. Wie bekomme ich mein Programm, um die% der Produktverkäufe zu aktualisieren, die es von 100% abdeckt
- 27. Ich verbiete dem Benutzer, die Seite zu aktualisieren
- 28. android Wie kann ich meine Hauptaktivität aktualisieren, nachdem ich die Datenbank aktualisiert habe?
- 29. Ich versuche, meine MySQL-Datenbank zu aktualisieren
- 30. Magento - aktualisieren Sie die Menge in Rechnung sales_flat_order_item Tabelle
Es scheint nichts mit Ihrem Code falsch zu sein. Sind Sie sicher, dass '$ pro_id' und' $ ip' richtig eingestellt sind? –
[Little Bobby] (http://bobby-tables.com/) sagt *** [Ihr Skript ist für SQL Injection Attacks gefährdet.] (Http://stackoverflow.com/questions/60174/how-can- i-prevent-sql-injection-in-php *** Erfahren Sie mehr über [vorbereitete] (http://en.wikipedia.org/wiki/Prepared_statement) Anweisungen für [MySQLi] (http://php.net/manual /mysqli.quickstart.prepared-statements.php). Sogar [die Zeichenfolge zu entkommen] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) ist nicht sicher! –
Sie müssen 'session_start();' am Anfang aller Seiten mit Sitzungen, ist es an Ort und Stelle? –