PHP, MySQL - Связывание флажка с раскрывающимся списком

У меня проблема с попыткой добавить "количество" к продукту что человек делает заказ. У меня есть таблица продуктов, таблица заказов, таблица order_item (которая представляет собой таблицу "многие ко многим", которая содержит идентификаторы как продуктов, так и заказов). У меня есть раскрывающийся список слева, где указано необходимое количество. Максимальное значение - это запас, доступный в системе.

Вот как выглядит форма:

enter image description here

<form name ="order_form" method="post" action="add_order_action.php" enctype="multipart/form-data">
                    <table border=1 cellpadding=2 cellspacing=2>
                        <caption>Order Form</caption>
                        <tr>
                            <th align="right"> Property </th>

                            <th align="left"> Value </th>
                        </tr>
                        <tr>
                            <td class="col1"> Name </td>
                            <td class="col2"> <input type="text" name="customer" id ="customer" size=30> </td>
                        </tr>
                        <tr>
                            <td class="col1"> Address </td>
                            <td class="col2"> <input type="text" name="address" id ="address" size=30> </td>
                        </tr>
                        <tr>
                            <td class="col1"> Products </td>
                            <td class="col2">

                                <!-- Interests is an array of all interests in the database-->
                                {foreach $products as $product}
                                <select name="products[{$product.id}][quantity]" id ="quantities">
                                        {section name=quantities start=0 loop=$product.stock + 1 step=1}
                                        <option value="{$smarty.section.quantities.index}">{$smarty.section.quantities.index}</option>
                                        {/section}
                                </select>
                                <input type="checkbox" name="products[{$product.id}][is_checked]" value="1">{$product.name}<br>
                                {/foreach}
                            </td>
                        </tr>
                        <tr>
                            <td colspan=2 align="center">
                                <input type="submit" name="submit" value="Submit">
                                <input type="reset"  name="reset"  value="Reset">
                            </td>
                        </tr>
                    </table>
                </form>

Названия продуктов и номера запасов взяты из таблицы продуктов:

create table if not exists SEProducts
(
    id int not null auto_increment primary key,
    price double not null,
    name varchar(30) not null,
    stock int not null,
    original_stock int not null,
    sold_stock int not null
)ENGINE=INNODB;

Теперь я создаю массив из проверенных названий продуктов. Я хочу связать значения из раскрывающихся меню, НО ТОЛЬКО ЕСЛИ ОНИ ЕСТЬ ОДНО ИЗ ПРОВЕРЕННЫХ ЗНАЧЕНИЙ. Вдобавок, если значение проверено, количество не может быть равно 0. Я, вероятно, делаю это крайне неприятным способом, но это то, что я считаю лучшим. Я мог бы создать текстовое поле, но тогда вам придется дезинфицировать вводимые пользователем данные. Было бы хорошо, если бы это работало, а не то, что не работает = /

Я добавляю заказы, получая массив товаров:

<?php
include "includes/defs.php";

$customer = $_POST['customer'];
$delivery_address = $_POST['address'];
if (isset($_POST['products'])) 
{
    $products = $_POST['products'];
} 
else 
{
    $error = "An order must consist of 1 or more items.";
    header("Location: list_inventory.php?error=$error");
    exit;
}

$id = add_order($customer, $delivery_address, $products);

header("Location: order.php?id=$id");
exit;
?>

Тогда моя функция добавления заказов работает следующим образом:

function add_order($customer, $delivery_address, $products)
{
    $connection = mysql_open();
    $customer = mysql_escape_string($customer);
    $delivery_address = mysql_escape_string($delivery_address);

    $query = "insert into SEOrders (name, address, status) " .
             "values ('$customer', '$delivery_address', 'New')";
    $result = mysql_query($query, $connection) or show_error();

    $id = mysql_insert_id();

foreach ($products as $product)
    {
        if ($product['is_checked'] != 0 && $product['quantity'] != 0)
        {
            $query2 = "insert into SEOrder_items (order_id, product_id, quantity) " .
                    "values ('$id', '$product.id', '$product.quantity')";
            $result2 = mysql_query($query2, $connection) or show_error();
        }
    }

mysql_close($connection) or show_error();
return $id;
}

Я думал, что я возможно, придется сделать какой-нибудь JavaScript, но я полный вздор.

Если бы я не смог объяснить себя: Короче говоря; Мне нужно добавить количества в массив продуктов, но только если продукты проверены и количество> 0.

Заранее спасибо, Возможно, я делаю это крайне неприятным способом, но это то, что я считал лучшим. Я мог бы создать текстовое поле, но тогда вам придется дезинфицировать вводимые пользователем данные. Было бы хорошо, если бы это работало, а не то, что не работает = /

Я добавляю заказы, получая массив товаров:

<?php
include "includes/defs.php";

$customer = $_POST['customer'];
$delivery_address = $_POST['address'];
if (isset($_POST['products'])) 
{
    $products = $_POST['products'];
} 
else 
{
    $error = "An order must consist of 1 or more items.";
    header("Location: list_inventory.php?error=$error");
    exit;
}

$id = add_order($customer, $delivery_address, $products);

header("Location: order.php?id=$id");
exit;
?>

Затем моя функция добавления заказов работает следующим образом:

function add_order($customer, $delivery_address, $products)
{
    $connection = mysql_open();
    $customer = mysql_escape_string($customer);
    $delivery_address = mysql_escape_string($delivery_address);

    $query = "insert into SEOrders (name, address, status) " .
             "values ('$customer', '$delivery_address', 'New')";
    $result = mysql_query($query, $connection) or show_error();

    $id = mysql_insert_id();

foreach ($products as $product)
    {
        if ($product['is_checked'] != 0 && $product['quantity'] != 0)
        {
            $query2 = "insert into SEOrder_items (order_id, product_id, quantity) " .
                    "values ('$id', '$product.id', '$product.quantity')";
            $result2 = mysql_query($query2, $connection) or show_error();
        }
    }

mysql_close($connection) or show_error();
return $id;
}

Я думал, что возможно, придется сделать какой-нибудь JavaScript, но я полный вздор.

Если бы я не смог объяснить себя: Короче говоря; Мне нужно добавить количество в массив продуктов, но только если продукты проверены и количество> 0.

Заранее спасибо, Возможно, я делаю это крайне неприятным способом, но это то, что я считал лучшим. Я мог бы создать текстовое поле, но тогда вам придется дезинфицировать вводимые пользователем данные. Было бы хорошо, если бы это работало, а не то, что не работает = /

Я добавляю заказы, получая массив товаров:

<?php
include "includes/defs.php";

$customer = $_POST['customer'];
$delivery_address = $_POST['address'];
if (isset($_POST['products'])) 
{
    $products = $_POST['products'];
} 
else 
{
    $error = "An order must consist of 1 or more items.";
    header("Location: list_inventory.php?error=$error");
    exit;
}

$id = add_order($customer, $delivery_address, $products);

header("Location: order.php?id=$id");
exit;
?>

Затем моя функция добавления заказов работает следующим образом:

function add_order($customer, $delivery_address, $products)
{
    $connection = mysql_open();
    $customer = mysql_escape_string($customer);
    $delivery_address = mysql_escape_string($delivery_address);

    $query = "insert into SEOrders (name, address, status) " .
             "values ('$customer', '$delivery_address', 'New')";
    $result = mysql_query($query, $connection) or show_error();

    $id = mysql_insert_id();

foreach ($products as $product)
    {
        if ($product['is_checked'] != 0 && $product['quantity'] != 0)
        {
            $query2 = "insert into SEOrder_items (order_id, product_id, quantity) " .
                    "values ('$id', '$product.id', '$product.quantity')";
            $result2 = mysql_query($query2, $connection) or show_error();
        }
    }

mysql_close($connection) or show_error();
return $id;
}

Я думал, что возможно, придется сделать какой-нибудь JavaScript, но я полный вздор.

Если бы я не смог объяснить себя: Короче говоря; Мне нужно добавить количество в массив продуктов, но только если продукты проверены и количество> 0.

Заранее спасибо, Хорошо, если это работает, а не то, что не работает = /

Я добавляю заказы, получая массив товаров:

<?php
include "includes/defs.php";

$customer = $_POST['customer'];
$delivery_address = $_POST['address'];
if (isset($_POST['products'])) 
{
    $products = $_POST['products'];
} 
else 
{
    $error = "An order must consist of 1 or more items.";
    header("Location: list_inventory.php?error=$error");
    exit;
}

$id = add_order($customer, $delivery_address, $products);

header("Location: order.php?id=$id");
exit;
?>

Тогда моя функция добавления заказов работает следующим образом:

function add_order($customer, $delivery_address, $products)
{
    $connection = mysql_open();
    $customer = mysql_escape_string($customer);
    $delivery_address = mysql_escape_string($delivery_address);

    $query = "insert into SEOrders (name, address, status) " .
             "values ('$customer', '$delivery_address', 'New')";
    $result = mysql_query($query, $connection) or show_error();

    $id = mysql_insert_id();

foreach ($products as $product)
    {
        if ($product['is_checked'] != 0 && $product['quantity'] != 0)
        {
            $query2 = "insert into SEOrder_items (order_id, product_id, quantity) " .
                    "values ('$id', '$product.id', '$product.quantity')";
            $result2 = mysql_query($query2, $connection) or show_error();
        }
    }

mysql_close($connection) or show_error();
return $id;
}

Я думал, что мог бы сделать немного JavaScript, но я в этом абсолютная чушь.

Если бы я не мог объяснить себя: Короче говоря; Мне нужно добавить количества в массив продуктов, но только если продукты проверены и количество> 0.

Заранее спасибо, Хорошо, если это работает, а не то, что не работает = /

Я добавляю заказы, получая массив товаров:

<?php
include "includes/defs.php";

$customer = $_POST['customer'];
$delivery_address = $_POST['address'];
if (isset($_POST['products'])) 
{
    $products = $_POST['products'];
} 
else 
{
    $error = "An order must consist of 1 or more items.";
    header("Location: list_inventory.php?error=$error");
    exit;
}

$id = add_order($customer, $delivery_address, $products);

header("Location: order.php?id=$id");
exit;
?>

Тогда моя функция добавления заказов работает следующим образом:

function add_order($customer, $delivery_address, $products)
{
    $connection = mysql_open();
    $customer = mysql_escape_string($customer);
    $delivery_address = mysql_escape_string($delivery_address);

    $query = "insert into SEOrders (name, address, status) " .
             "values ('$customer', '$delivery_address', 'New')";
    $result = mysql_query($query, $connection) or show_error();

    $id = mysql_insert_id();

foreach ($products as $product)
    {
        if ($product['is_checked'] != 0 && $product['quantity'] != 0)
        {
            $query2 = "insert into SEOrder_items (order_id, product_id, quantity) " .
                    "values ('$id', '$product.id', '$product.quantity')";
            $result2 = mysql_query($query2, $connection) or show_error();
        }
    }

mysql_close($connection) or show_error();
return $id;
}

Я думал, что мог бы сделать немного JavaScript, но я в этом абсолютная чушь.

Если бы я не мог объяснить себя: Короче говоря; Мне нужно добавить количества в массив продуктов, но только если продукты проверены и количество> 0.

Заранее спасибо, Ура :)

РЕДАКТИРОВАТЬ: Я внес некоторые изменения, но теперь получаю следующую ошибку: Ошибка 1452: не удается добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено ( db / SEOrder_items , CONSTRAINT SEOrder_items_ibfk_2 FOREIGN KEY ( product_id [11149116ES] [11149116ES) SEProducts ( id ))

8
задан JheeBz 29 May 2011 в 04:41
поделиться