Heim > Artikel > Backend-Entwicklung > So fügen Sie mehrere Kontrollkästchen- und Textfeld-Arrays in eine MySQL-Datenbank ein: Beheben häufiger Probleme
Einfügen mehrerer Kontrollkästchen- und Textfeld-Arrays in die MySQL-Datenbank: Beheben häufiger Probleme
Abfragen mit mehreren Kontrollkästchen- und Textfeld-Arrays können in PHP eine Herausforderung darstellen. Dieser Artikel befasst sich mit zwei spezifischen Problemen: Warum Kontrollkästchen als aktiviert angezeigt werden, auch wenn dies nicht der Fall ist, und warum Daten nicht in die Datenbank eingefügt werden können.
Problem bei der Anzeige von Kontrollkästchen
Der Übeltäter ist die Verwendung von implode, das eine durch Kommas getrennte Zeichenfolge aller Kontrollkästchenwerte generiert. Bei diesem Ansatz wird fälschlicherweise die gesamte Liste in jede Datenbankzeile eingefügt, unabhängig davon, ob ein bestimmtes Kontrollkästchen aktiviert ist oder nicht.
Um dies zu beheben, weisen Sie den Kontrollkästchennamen im HTML des Formulars explizite Indizes zu. Auf diese Weise können die entsprechenden Kontrollkästchenwerte im Array $_POST['checkbox'] einfach mit den zugehörigen Elementen $_POST['item'] und $_POST['quantity'] verknüpft werden, ohne auf implode.
Datenbankeinfügungsfehler
Ein weiteres Problem entsteht dadurch, dass Kontrollkästchen nur Werte für aktivierte Elemente übermitteln. Dies führt zu einer Nichtübereinstimmung zwischen den Indizes des Arrays $_POST['checkbox'] und den entsprechenden Elementen $_POST['item'] und $_POST['quantity'].Um dieses Problem zu beheben, verwenden Sie die Indizes, die den Kontrollkästchennamen in der geänderten Form zugewiesen sind. Dies ermöglicht die richtige Wertepaarung und stellt sicher, dass jede Zeile in der Datenbank den richtigen Datensatz enthält.Anstatt mysql_query zu verwenden, verwenden Sie außerdem die Methode $conn->query() konsistent mit der MySQLi-API, die für die Datenbankverbindung verwendet wird.Aktualisierter PHP-Code:
<p>$stmt = $conn->prepare(" INSERT INTO Purchases (Product, Quantity, Price) VALUES (?, ?, ?)");<br>$stmt->bind_param("sis", $name, $quantity, $price);<br>foreach ( $_POST['checkbox'] as $i => $price) {<br></p> <pre class="brush:php;toolbar:false">$name = $_POST['name'][$i]; $quantity = $_POST['quantity'][$i]; $stmt->execute();}
Zusätzliche Sicherheitsmaßnahme
Aus Sicherheitsgründen empfiehlt es sich generell, Preise aus der Datenbank abzurufen, anstatt sie im HTML zu speichern. Dadurch wird verhindert, dass Benutzer die Preise im Web-Inspektor ändern, bevor sie das Formular absenden.Das obige ist der detaillierte Inhalt vonSo fügen Sie mehrere Kontrollkästchen- und Textfeld-Arrays in eine MySQL-Datenbank ein: Beheben häufiger Probleme. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!