Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PHP wstawia wiele tablic pól wyboru ORAZ pól tekstowych do bazy danych MySQL

Nie powinieneś używać implode . W ten sposób w każdym wstawianym wierszu umieszczana jest rozdzielona przecinkami lista wszystkiego, co znajduje się w formularzu, i powtarza to dla każdego zaznaczonego pola. Powinieneś po prostu wstawić jeden element w każdym wierszu, indeksując tablice.

Jeśli jednak masz pole wyboru w formularzu, przesyła tylko te, które są zaznaczone. Wynikiem tego jest to, że indeksy $_POST['checkbox'] tablica nie pasuje do odpowiedniego $_POST['item'] i $_POST['quantity'] elementy. Musisz umieścić wyraźne indeksy w checkbox nazwy, abyś mógł je powiązać.

<form method = "POST">

<input type = "hidden" name = "item[]" value = "cupcake">
<input type = "text" name = "items" value = "cupcake" readonly><br>
<b>Price :</b> <span name = "price" value = "3.00">$17.00</span><br>
Quantity: <input tabindex="1" name="quantity[]" min="0" max="5" type="number" class="quantity" value="1" /><br>
<input tabindex="1" name="checkbox[0]" type="checkbox" value="17" /><span>Add to Cart</span></label></div></div></td><br>

<input type = "hidden" name = "item[]" value = "cake">
<input type = "text" name = "items" value = "cake" readonly><br>
<b>Price :</b> <span name = "price" value = "20.00">$20.00</span><br>
Quantity: <input tabindex="1" name="quantity[]" min="0" max="5" type="number" class="quantity" value="1" /><br>
<input tabindex="1" name="checkbox[1]" type="checkbox" value="20" /><span>Add to Cart</span></label></div></div></td><br>

<input type = "submit" name = "insertBT"><br>
</form>

Twój kod PHP może wyglądać tak:

$stmt = $conn->prepare("INSERT INTO purchases (Product, Quantity, Price) VALUES (?, ?, ?)");
$stmt->bind_param("sis", $name, $quantity, $price);
foreach ($_POST['checkbox'] as $i => $price) {
    $name = $_POST['name'][$i];
    $quantity = $_POST['quantity'][$i];
    $stmt->execute();
}

Przy okazji, umieszczanie cen w kodzie HTML wydaje się złym pomysłem. Nic nie stoi na przeszkodzie, aby użytkownik modyfikował kod HTML za pomocą inspektora internetowego przed przesłaniem formularza, aby mógł obniżyć cenę. Powinieneś uzyskać ceny z bazy danych podczas przetwarzania formularza.

Zauważ również, że w oryginalnym kodzie otworzyłeś połączenie z bazą danych za pomocą MySQLi, ale potem próbowałeś wykonać wstawianie za pomocą mysql_query zamiast $conn->query() . Nie możesz mieszać interfejsów API w ten sposób; myql_query można użyć tylko po otwarciu połączenia za pomocą mysql_connect .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przykłady LOCALTIMESTAMP – MySQL

  2. Czy mogę przywrócić pojedynczą tabelę z pełnego pliku mysql mysqldump?

  3. Co oznacza słowo kluczowe KLUCZ?

  4. Jak utworzyć bazę danych w MySQL Workbench za pomocą GUI

  5. Włącz Pythona, aby połączyć się z MySQL przez tunelowanie SSH