Ich habe ein Problem mit dem Versuch, einem Produkt, das eine Person bestellt, eine "Menge" hinzuzufügen. Ich habe eine Produkttabelle, eine Bestellungs-Tabelle, eine Order-Item-Tabelle (das ist eine Viele-zu-Viele-Tabelle, die die IDs von Produkten und Bestellungen enthält). Ich habe eine Dropdown-Box auf der linken Seite, die die gewünschte Menge hat. Der Maximalwert ist der im System verfügbare Bestand.
So sieht das Formular aus:
%Vor%
Die Produktnamen und die Lagernummern stammen beide aus der Produkttabelle:
%Vor%Nun, was ich mache ist, dass ich aus den Produktnamen, die überprüft werden, ein Array mache. Was ich tun möchte, ist die Werte aus den Dropdown-Menüs zu verknüpfen, ABER NUR, WENN SIE EINES DER ÜBERPRÜFTEN WERTE SIND. Außerdem, wenn ein Wert überprüft wird, kann die Menge nicht 0 sein. Ich mache das wahrscheinlich sehr frustrierend, aber das war, was ich für das Beste hielt. Ich hätte ein Textfeld erstellen können, aber dann müssten Sie Benutzereingaben bereinigen. Das wäre in Ordnung, wenn es im Gegensatz zu dem funktioniert, was nicht = /
Ich füge die Bestellungen hinzu, indem ich das Produkt-Array abrufe:
%Vor%Dann funktioniert meine Add-Order-Funktion wie folgt:
%Vor%Ich dachte, ich müsste vielleicht ein bisschen JavaScript machen, aber ich bin absolut Quatsch.
Wenn ich mich nicht erklären konnte: Lange Rede kurzer Sinn; Ich muss Mengen zum Produktarray hinzufügen, aber nur, wenn die Produkte überprüft werden und die Quantität & gt; 0.
Vielen Dank im Voraus, Prost:)
BEARBEITEN: Ich habe einige Änderungen vorgenommen, aber jetzt bekomme ich den folgenden Fehler:
Fehler 1452: Hinzufügen oder Aktualisieren einer untergeordneten Zeile nicht möglich: Eine Fremdschlüsseleinschränkung schlägt fehl ( db/SEOrder_items
, CONSTRAINT SEOrder_items_ibfk_2
FREMDSCHLÜSSEL ( product_id
) REFERENCES SEProducts
( id
))
Als ersten Schritt würde ich die Arrays für Produkte und Mengen kombinieren, so dass sich die Mengen, das Kontrollkästchen und der Produktname in einem Array befinden:
%Vor%würde zu folgendem Array führen (wobei 1 und 2 die Produkt-IDs sind, 'is_checked' wird nur gesetzt, wenn das Kontrollkästchen aktiviert wurde):
%Vor%Es sollte leicht sein, ein solches Array zu benutzen mit:
%Vor%Ich denke, Sie müssen nur Ihre Logik und Ihre Vorlage ein wenig optimieren.
Zuerst möchten Sie die gesamte Sache von den Produkten, die auf der Bestellseite verfügbar sind, anstatt von den Produkten, die zurückkommen, fahren; das:
%Vor%Sollte eher so aussehen:
%Vor%Natürlich, wenn die Produktliste massiv ist, werden Sie die Produktliste aus der Seite ziehen (und jedes Produkt validieren), wie Sie es jetzt tun. Wenn die Produktliste jedoch klein ist, ist es einfacher, mit einer bekannten und gültigen Liste zu beginnen.
Der Kern des Problems ist Ihre Datenbankinteraktion und wie add_order
funktioniert. Ihr add_order
ruft eine Liste der Produkte ab, die in $products
angezeigt werden sollen. Alles, was Sie tun müssen, ist dies:
$products
, wenn das Produkt geprüft ist und eine Menge hat, füge es und seine Menge zur Liste hinzu. add_order
alles zur Datenbank hinzufügen. add_order
einen Fehlercode (z. B. eine Bestell-ID null) zurückgeben, und der Anrufer kann sich beim Benutzer beschweren, dass die Bestellung gar nicht sinnvoll ist. Die grundlegende Strategie besteht darin, Ihre Daten zu sammeln und danach zu handeln, anstatt Ihre Daten zu bearbeiten, während Sie sie erfassen.
Jetzt wird das Problem: Wie verbinden wir eine Menge mit einem spezifischen Problem? Dies ist leicht zu lösen, da wir Produkt-IDs haben; Ihre <select>
-Elemente sollten sein:
Wenn Sie nach der Menge eines bestimmten Produkts suchen, können Sie es direkt aus $_POST
als Skalar als $q = $_POST['quantity_' . $product_id]
ziehen.
Ich weiß, dass ich die Wurzel Ihres Problems hätte lösen können, indem ich Ihnen gesagt habe, dass ich Ihre <select>
-Elemente umbenennen soll, aber ich dachte mir, dass ich einige Ihrer anderen möglichen Probleme auf dem Weg lösen würde.
Tags und Links html php mysql drop-down-menu associative-array