Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Заявки

Сообщения:  [1-10]    [11-20]   [21-30]  [31-35] 

 
 автор: Trianon   (30.04.2010 в 09:25)   письмо автору
 
   для: margarita   (29.04.2010 в 21:38)
 

две таблицы, о которых я говорил, лишь позволяют управлять заказами с несколькими позициями.
В Вашем случае этого явно мало. То, что позиции имеют структуру четкую характеристик, эти две таблицы не передают.

Я вижу сейчас структуру примерно так. Таблица( поле, поле,.... поле)

клиент(ид, дата_время_создания, имя, адрес, банк, р_счет, т.п.)

менеджер(ид, дата_время_создания, имя, ид_поз_штатного_расписания)

заказ(ид, ид_клиента, ид_отв_менеджера, дата_время_создания, дата_время_модификации, дата_время_исполнения)

материал(ид, название)

условия(ид, название)

товар(ид, ид_материала, ид_условий,длина,тоннаж,базовая_цена)

позиция(ид,ид_заказа,порядковый_номер,ид_товара,цена,кол_во_заказанное,кол_во_отгруженное, дата_время_включения в заказ, дата_время_изготовления)

счет(ид_клиента, ид_заказа, дата_время, сумма, назначение)

оплата(ид_клиента, ид_счета, дата_время, сумма)

  Ответить  
 
 автор: sim5   (30.04.2010 в 06:11)   письмо автору
 
   для: 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`....
лучше забыть.

Я не специалист по трубам, не знаю досканально все их параметры, как они связаны между собой, могут ли некие из этих параметров принадлежать множеству типов труб, да и существует ли у вас это множество... Посему, чего-то конкретно верного советовать трудно. Но могу сказать уверенно - взаимосвязь всех параметров, типов, удачно описанная структурой таблиц связанных, вот она и определит и облик формы заказа, и способ выбора параметров, и способ записи их как оформленный заказ. С этого надо начинать, а у вас все как-то разрозненно получается, вы просто "приклеиваете" очередной совет вам к своей задаче.

  Ответить  
 
 автор: Trianon   (29.04.2010 в 21:53)   письмо автору
 
   для: margarita   (29.04.2010 в 21:43)
 

Это потому, что `diameter` - совсем таки не text, а вовсе даже int

  Ответить  
 
 автор: margarita   (29.04.2010 в 21:43)   письмо автору
 
   для: 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

  Ответить  
 
 автор: margarita   (29.04.2010 в 21:38)   письмо автору
 
   для: sim5   (29.04.2010 в 21:24)
 

Первая таблица содержит собственно заявки (я так понимаю). Эта таблица - это кому они принадлежат (менеджерам), так?
да вы все правильно поняли)

А вот таблица диаметров, и прочих возможных разновидностей труб, которые может выбрать заказчик, это должна быть отдельная таблица. Только так можно записать каждую выбранную позицию как отдельную запись.
ну так у меня и есть две таблицы, как советовал Trianon еще выше...

Если разница только в диаметре
там разница не только в диаметре, но там еще стенка, цена, длина...


спасибо, что помогли;)

  Ответить  
 
 автор: sim5   (29.04.2010 в 21:24)   письмо автору
 
   для: margarita   (29.04.2010 в 21:07)
 

Первая таблица содержит собственно заявки (я так понимаю). Эта таблица - это кому они принадлежат (менеджерам), так?
А вот таблица диаметров, и прочих возможных разновидностей труб, которые может выбрать заказчик, это должна быть отдельная таблица. Только так можно записать каждую выбранную позицию как отдельную запись.
Если разница только в диаметре, то либо вы записываете как строкой в одном ее поле выбранные позиции (как, я приводил выше), либо можно связать все диаметры с некой битовой маской, в которой лог. 1 будет означать выбранную позицию (диаметр), которую также можно хранить в отдельном поле.

  Ответить  
 
 автор: margarita   (29.04.2010 в 21:23)   письмо автору
 
   для: 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>";}
}
?>


а если такой вариант добавления использовать?

  Ответить  
 
 автор: margarita   (29.04.2010 в 21:07)   письмо автору
 
   для: 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 ;

  Ответить  
 
 автор: margarita   (29.04.2010 в 21:03)   письмо автору
 
   для: sim5   (29.04.2010 в 20:54)
 

del

  Ответить  
 
 автор: sim5   (29.04.2010 в 21:00)   письмо автору
 
   для: margarita   (29.04.2010 в 20:51)
 

Так вы не сможете записать в данную таблицу (вернее можно, но с дубликатами лишних данных), нужна будет отдельная таблица тогда, связанная с этой.

  Ответить  

Сообщения:  [1-10]    [11-20]   [21-30]  [31-35] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования