|
|
|
|
|
для: margarita
(29.04.2010 в 21:38)
| | две таблицы, о которых я говорил, лишь позволяют управлять заказами с несколькими позициями.
В Вашем случае этого явно мало. То, что позиции имеют структуру четкую характеристик, эти две таблицы не передают.
Я вижу сейчас структуру примерно так. Таблица( поле, поле,.... поле)
клиент(ид, дата_время_создания, имя, адрес, банк, р_счет, т.п.)
менеджер(ид, дата_время_создания, имя, ид_поз_штатного_расписания)
заказ(ид, ид_клиента, ид_отв_менеджера, дата_время_создания, дата_время_модификации, дата_время_исполнения)
материал(ид, название)
условия(ид, название)
товар(ид, ид_материала, ид_условий,длина,тоннаж,базовая_цена)
позиция(ид,ид_заказа,порядковый_номер,ид_товара,цена,кол_во_заказанное,кол_во_отгруженное, дата_время_включения в заказ, дата_время_изготовления)
счет(ид_клиента, ид_заказа, дата_время, сумма, назначение)
оплата(ид_клиента, ид_счета, дата_время, сумма) | |
|
|
|
|
|
|
|
для: margarita
(29.04.2010 в 21:23)
| | Не пойдет такой вариант добавления. Да и вообще, вся логика (последовательность) заказа ни к черту. Судя по ранее представленным примерам 1.php и 2.php, у вас яйцо бежит впереди курицы.
Но это еще не все. Если таким образом формировать заказ (последовательно), то при вашем сценарии велика вероятность того, что в конечном итоге в базе могут появляться "полузаказы" - что-то добавлено от некой формы, на некотором этапе, а потом заказчик толи раздумал, толи еще чего, и закрыл браузер, и в итоге заказ оказался неполноценным. И без лишних хлопот вам уже не обойтись - нужно будет удалять такой мусор из базы.
Другими словами, если заказ формируется последовательно, то данные, полученные от форм заказа на каждом этапе, требуют временного промежуточного хранения, и только при получении всех требуемых для заказа данных производится их запись в базу.
Но совсем не обязательно разбивать заказ на этапы, тем более, если номенклатура изделий не велика. Все вполне можно сделать одной формой. Но в любом случае, формы (выбор данных в форме) должны следовать по старшинству, от первичного ко вторичному, а не наоборот, как у вас.
Если номенклатура изделий велика, то конечно лучше задействовать Ajax технологию, если же не очень, то можно обойтись и просто JS-сценарием, отдавая пользователю наборы данных, по которым на стороне клиента можно реализовать связанные списки.
Допустим, что в базе есть предложения - трубы различные по типу: пластик, стеклопластик, сталь, чугун. Каждые из этих типов могут быть различных диаметров, длиной, и иметь другие характерные параметры. Все эти параметры должны быть связаны по id своих труб-родителей, или же, таблица описывающая трубы, должна иметь поле, в котором указано наличие, например, определенных диаметров, у данного типа труб.
А в единой форме заказа, пользователь может выбирать из списков все имеющиеся характеристики товара, и эти списки обязательно должны быть связаны по id. К примеру, если трубы стальные записаны в базе под id=16, то список описыващий возможные их диаметры, должен отражать этот id, то есть: <select name="id_buyer[16]" multiple>. При этом, если диаметры, это отдельная таблица, то значением опшенов этого списка должны быть не диаметры труб, а id под которыми записаны эти диаметры в таблице.
В этой же форме должен находится и элемент <input type="text[16]" name="kolvo">, и все другие поля необходимые для заказа.
Таким образом вы получите одну форму, одну форму будете обрабатывать. А ведь возможны и ошибки ввода пользователем (кстати, проверка которых у вас не наблюдается), а это значит нужно будет возвращать форму пользователю (если не задействовать Ajax) при их наличии. В случае, если ввод параметров заказа произведен успешно, то данные этой формы записываются в базу. При этом, для параметров заказа описывающих множественный выбор, нужно сформировать строку запроса для многострочного оператора INSERT, и одним запросом к базе произвести запись, а о таком способе:
for ($i=1; $i<=$_POST['kolvo']; $i++) {
$id_demand = $_POST['id_demand'];
....
mysql_query ("INSERT INTO `positionsDemand`....
лучше забыть.
Я не специалист по трубам, не знаю досканально все их параметры, как они связаны между собой, могут ли некие из этих параметров принадлежать множеству типов труб, да и существует ли у вас это множество... Посему, чего-то конкретно верного советовать трудно. Но могу сказать уверенно - взаимосвязь всех параметров, типов, удачно описанная структурой таблиц связанных, вот она и определит и облик формы заказа, и способ выбора параметров, и способ записи их как оформленный заказ. С этого надо начинать, а у вас все как-то разрозненно получается, вы просто "приклеиваете" очередной совет вам к своей задаче. | |
|
|
|
|
|
|
|
для: margarita
(29.04.2010 в 21:43)
| | Это потому, что `diameter` - совсем таки не text, а вовсе даже int | |
|
|
|
|
|
|
|
для: sim5
(29.04.2010 в 21:24)
| | может еще подскажиет?)
как сделать, чтобы была правильная сортировка?
<?php
$result = mysql_query ("SELECT * FROM price ORDER BY `diameter`,`wall` ASC");
?>
|
выводит: http://savepic.ru/1100512.png
а надо: 60, 320, 530, 666, 1220 | |
|
|
|
|
|
|
|
для: sim5
(29.04.2010 в 21:24)
| | Первая таблица содержит собственно заявки (я так понимаю). Эта таблица - это кому они принадлежат (менеджерам), так?
да вы все правильно поняли)
А вот таблица диаметров, и прочих возможных разновидностей труб, которые может выбрать заказчик, это должна быть отдельная таблица. Только так можно записать каждую выбранную позицию как отдельную запись.
ну так у меня и есть две таблицы, как советовал Trianon еще выше...
Если разница только в диаметре
там разница не только в диаметре, но там еще стенка, цена, длина...
спасибо, что помогли;) | |
|
|
|
|
|
|
|
для: margarita
(29.04.2010 в 21:07)
| | Первая таблица содержит собственно заявки (я так понимаю). Эта таблица - это кому они принадлежат (менеджерам), так?
А вот таблица диаметров, и прочих возможных разновидностей труб, которые может выбрать заказчик, это должна быть отдельная таблица. Только так можно записать каждую выбранную позицию как отдельную запись.
Если разница только в диаметре, то либо вы записываете как строкой в одном ее поле выбранные позиции (как, я приводил выше), либо можно связать все диаметры с некой битовой маской, в которой лог. 1 будет означать выбранную позицию (диаметр), которую также можно хранить в отдельном поле. | |
|
|
|
|
|
|
|
для: margarita
(29.04.2010 в 21:07)
| |
<?php
for ($i=1; $i<=$_POST['kolvo']; $i++)
{
$id_demand = $_POST['id_demand'];
$diameter = $_POST["diameter_$i"];
$result = mysql_query ("INSERT INTO `positionsDemand` (`id_demand`, `diameter`) VALUES ('$id_demand', '$diameter')");
if ($result == 'true') {echo "<p>Запись успешно добалена!</p>";}else{echo "<p>Запись не добалена!</p>";}
}
?>
|
а если такой вариант добавления использовать? | |
|
|
|
|
|
|
|
для: sim5
(29.04.2010 в 21:00)
| |
--
-- Структура таблицы `demand`
--
CREATE TABLE `demand` (
`id` int(11) NOT NULL auto_increment,
`id_buyer` text NOT NULL,
`id_manager` text NOT NULL,
`date_time` text NOT NULL,
`delivery` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=47 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=47 ;
|
| |
|
|
|
|
|
|
|
для: sim5
(29.04.2010 в 20:54)
| | del | |
|
|
|
|
|
|
|
для: margarita
(29.04.2010 в 20:51)
| | Так вы не сможете записать в данную таблицу (вернее можно, но с дубликатами лишних данных), нужна будет отдельная таблица тогда, связанная с этой. | |
|
|
| |
|