|
|
|
| Здравствуйте уважаемые знатоки, помогите доработать скрипт расчета стоимости продукции. Нужно сделать что бы пользователь выбирал в выпадающем меню <select> продукцию в следующем выпадающем меню формировался формат продукции в зависимости от выбранного в предыдущем списке продукции, и так далее в итоге должна
выводится сумма заказа, вся информация хранится в mysql две таблицы produkt и catalog
Сам скрипт что я сделал на данный момент здесь http://print-spb.ru/test.php
В чем мне нужна помощь:
1. как мне сделать что б во втором и третьем выпадающем списке выводились только уникальные значения, а не выводились все из базы(например формат визитки один 50*90, а тиражей 5 и соответственно 5 цен)
2. Как мне вывести итоговую сумму в зависимости от выбора позиций т.е. тираж 1000 шт цена 1000р тираж 2000шт цена 2000р, все это я забил в таблицу, но не могу ни как привязать к выбору в выпадающем списке,
Очень хотелось бы реализовать без JS. Заранее всем спасибо!!!
Таблица mysql produkt http://print-spb.ru/produkt.jpg
Таблица catalog http://print-spb.ru/catalog.PNG
[code]
<?
require_once ("connect.php"); // Устанавливаем соединение с базой данных
echo "<form method=post>";
// Формируем первый выпадающий список
$result = mysql_query("SELECT * FROM produkt"); //запрос к базе
echo "<select name=id_produkt onchange='this.form.submit()'>";
echo "<option value=0>Выбор Продукция</option>";
while($myrow = mysql_fetch_array($result))
{
if($_POST['id_produkt'] == $myrow['id_produkt'])
{
$selected = "selected";
}
else $selected = "";
echo "<option value=$myrow[id_produkt] $selected> $myrow[name]</option>";
}
echo "</select><br><br>";
// Формируем второй выпадающий список
$result = mysql_query("SELECT * FROM catalog WHERE id_produkt = $_POST[id_produkt]");
echo "<select name=format onchange='this.form.submit()'>";
echo "<option value=0>Формат</option>";
while($myrow = mysql_fetch_array($result))
{
if($_POST['format'] == $myrow['format'])
{
$selected = "selected";
}
else $selected = "";
echo "<option value=$myrow[format] $selected> $myrow[format]</option>";
}
echo "</select><br><br>";
// Формируем третий выпадающий список
$result = mysql_query("SELECT * FROM catalog WHERE id_produkt = $_POST[id_produkt]");
echo "<select name=bumaga onchange='this.form.submit()'>";
echo "<option value=0>Бумага</option>";
while($myrow = mysql_fetch_array($result))
{
echo "<option value=$myrow[bumaga] $selected> $myrow[bumaga]</option>";
}
echo "</select><br><br>";
// Формируем Четвертый выпадающий список
$result = mysql_query("SELECT * FROM catalog WHERE id_produkt = $_POST[id_produkt]");
echo "<select name=tiraz onchange='this.form.submit()'>";
echo "<option value=0>Тираж</option>";
while($myrow = mysql_fetch_array($result))
{
echo "<option value=$myrow[tiraz] $selected> $myrow[tiraz]</option>";
}
echo "</select><br><br>";
// Конец HTML-формы
echo "</form>";
echo "Итого";
?>
[/cod] | |
|
|
|
|
|
|
|
для: alexcandr
(08.09.2010 в 15:30)
| | С первым пунктом разобрался поставил перед запросом DISTINCT,
Подскажите пожалуйста как можно узнать id_catalog по параметрам которые выбрал пользователь в выпадающем списке,
Допустим выбрали Продукт визитка, потом формат 50*90, тираж 1000шт у этих всех значений есть свой Id_catalog в mysql. так вот как мне его узнать и поместить в переменную???
http://print-spb.ru/catalog.PNG | |
|
|
|
|
|
|
|
для: alexcandr
(08.09.2010 в 17:36)
| | что-то совсем не работает | |
|
|
|
|
|
|
|
для: Красная_шляпа
(08.09.2010 в 17:49)
| | >что-то совсем не работает
скрипт не работает???
на сайте который, так он и не доделан,
Почему то ни Цветность ни Обработка ни Бумага не выбираются | |
|
|
|
|
|
|
|
для: alexcandr
(08.09.2010 в 15:30)
| | Без JS, это запрос при каждом выборе, что и утомительно и.... | |
|
|
|
|
|
|
|
для: sim5
(08.09.2010 в 18:48)
| | >Без JS, это запрос при каждом выборе, что и утомительно и....
я с JS совсем не знаком, я понимаю что при каждом выборе будет запрос к базе, но там всего 5 select-ов, думаю что это не так критично, а в будущем может и освою JS))) а пока мне нужна помощь с php | |
|
|
|
|
автор: ..... (08.09.2010 в 19:16) |
|
|
для: alexcandr
(08.09.2010 в 18:58)
| | >$result = mysql_query("SELECT * FROM catalog WHERE id_produkt = $_POST[id_produkt]");
while($myrow = mysql_fetch_array($result))
{
1. нет проверок mysql_num_rows()
2. $_POST[id_produkt] не обязательно может быть цифрой
дальше не присматривался | |
|
|
|
|
автор: ..... (08.09.2010 в 19:19) |
|
|
для: alexcandr
(08.09.2010 в 18:58)
| | Вообщето mysql_num_rows() вроде не обязательно | |
|
|
|
|
|
|
|
для: alexcandr
(08.09.2010 в 18:58)
| | >....WHERE id_produkt = $_POST[id_produkt]
Так ни в коем случае нельзя подставлять значения в запрос! Это вам первое, и не как помощь, это вы должны знать как отче наш.
Ну а что касаемо "не так критично", так это как посмотреть - это ужасно. Собственно, если всего пять списков, то можно обойтись и без асинхронных запросов к серверу, и скопом все списки клиенту. Это совсем не сложно на JS выглядеть будет - выбор в списках. | |
|
|
|
|
|
|
|
для: sim5
(08.09.2010 в 19:23)
| | >>....WHERE id_produkt = $_POST[id_produkt]
>
>Так ни в коем случае нельзя подставлять значения в запрос! Это вам первое, и не как помощь, это вы должны знать как отче наш.
>
>Ну а что касаемо "не так критично", так это как посмотреть - это ужасно. Собственно, если всего пять списков, то можно обойтись и без асинхронных запросов к серверу, и скопом все списки клиенту. Это совсем не сложно на JS выглядеть будет - выбор в списках.
Так почему это ужасно можете объяснить пожалуйста,,,
Спасибо за совет, я в книге Кузнецова вычитал такой метод WHERE id_produkt = $_POST[id_produkt], а в чем он плох? я на силен в php. Но все же хотелось счас обойтись без JS так как скрипт практически написан и просто жалко потраченного времени, а у меня его ушло много))) JS оставлю на будушее,
Вы мне подскажите как мне вывести из таблицы итоговую сумму Заранее благодарен | |
|
|
|
|
|
|
|
для: alexcandr
(08.09.2010 в 19:30)
| | Так почему это ужасно можете объяснить пожалуйста,,,
Ознакомтесь сперва с этим, а уж потом об остальном.... | |
|
|
|
|
|
|
|
для: alexcandr
(08.09.2010 в 19:30)
| | Времени для ознакомления выше указанного было предостаточно, так что вот вам следующая пилюля.
Смотрите что у вас получается:
Вы формируете первый список, а он формируется и при первом обращении к странице, когда еще пользователь не делал никакого выбора, а вы в тоже время, даже не пытаясь определить делал пользователь или нет выбор, пытаетесь отметить выбранный опшен этого списка:
if($_POST['id_produkt'] == $myrow['id_produkt']) $selected = "selected"; else $selected = "";
(фигурные кавычки здесь просто лишние)
Это из каких таких соображений? Кроме как предупреждения вы ничего не получите, ибо $_POST['id_produkt'] и в помине нет при первом запросе страницы.
Далее, тоже самое вы вытворяете и при выводе остальных списков, хотя выбора их возможно и не было (при первой загрузке страницы точно).
Вы опускаете в атрибутах value опшенов кавычки, но в тоже время в качестве значений им вставляете текстовые значения из бызы, которые содержат пробелы. В этом случае вы будете получать только первое слово из такого значения. Да и не стоит вообще вставлять таковые значения, а использовать id_catalog в опшенах списков (как и id_produkt для первого). И хотя у вас в такблице параметров все "в кучу", если можно так выразиться по структуре таблицы, даже в этом случае можно использовать ID этих записей. Пусть "в кучу" пока не принципиально, и будем использовать номера из того, что есть.
Следуещее. Ладно, еще можно понять, что по выбору первого списка происходит отправка формы, но на кой ляд у вас тоже самое для списков параметров? Вы думаете пользователю будет приятно делая выбор в одном из них, неожиданно получать перезагрузку страницы? Если бы у вас были связанные списки (все четыре), это еще можно было бы понять, иначе это полный абсурд.
Вывели первый список, пользователь выбирает нужное, вот только по этому условию вы выводите списки параметров, и без всяких onchange='this.form.submit()' в них. Как пользователь выбрал в них необходимое, то кнопкой SUBMIT отправляет форму.
Вот по получению этой кнопки вы и должны произвести расчет. Вот тут я не знаю, чего и к чему у вас (в смысле цены), но нужно либо делать запрос для id_produkt равное $id_produkt и списка id_catalog (значений выбранных опешнов списков), либо, коли у вас все "в кучу" и вы их и так получаете при запросе, просто при выводе списков помещать в сессию массив цен (под соответствующими ключами), от куда их и брать для расчета, что исключит лишний запрос к базе.
Для вывода всех списков параметров совсем не требуется для каждого делать отдельный запрос к базе - они то ведь у вас все в одной таблице, и получаете вы все тоже самое при каждом запросе. Исходя из этого:
<?
//инициализируем переменные
$d_produkt = isset($_POST['id_produkt']) ? intval($_POST['id_produkt']) : hull;
$format = isset($_POST['format']) ? intval($_POST['format']) : hull;
$bumaga = isset($_POST['bumaga']) ? intval($_POST['bumaga']) : hull;
$tiraz = isset($_POST['tiraz']) ? intval($_POST['tiraz']) : hull;
//вывод формы
echo "<form method=post>";
// Формируем первый выпадающий список
$result = mysql_query("SELECT * FROM produkt");
echo "<select name=id_produkt onchange='this.form.submit()'>
<option value=0>Выберите продукцию</option>";
while($myrow = mysql_fetch_assoc($result))
echo "<option value=" . $myrow['id_produkt'] .
($d_produkt && $d_produkt == $myrow['id_produkt'] ? " selected" : "") . ">" .
$myrow['name'] . "</option>";
echo "</select>";
//если был выбор первого списка, то выводим списки параметров
if($d_produkt) {
//один запрос к базе
$result = mysql_query("SELECT * FROM catalog WHERE id_produkt = " . $d_produkt);
//вывод списков через переменные
$sel_1 = "<select name=format><option value=0>Выберите формат</option>";
$sel_2 = "<select name=bumaga><option value=0>Выберите бумагу</option>";
$sel_3 = "<select name=bumaga><option value=0>Выберите тираж</option>";
while($myrow = mysql_fetch_assoc($result)) {
$sel_1 .= "<option value=" . $myrow['id_catalog'] .
($format && $format == $myrow['id_catalog'] ? " selected" : "") . ">" .
$myrow['format'] . "</option>";
$sel_2 .= "<option value=" . $myrow['id_catalog'] .
($bumaga && $bumaga == $myrow['id_catalog'] ? " selected" : "") . ">" .
$myrow['bumaga'] . "</option>";
$sel_3 .= "<option value=" . $myrow['id_catalog'] .
($tiraz && $tiraz == $myrow['id_catalog'] ? " selected" : "") . ">" .
$myrow['tiraz'] . "</option>";
}
echo $sel_1 . "</select>" . $sel_2 . "</select>" . $sel_3 . "</select>
<input type=submit name=money value=Посчитать>";
}
echo "</form>";
//если запрос на расчет
isset($_POST['money']) {
//вот тут считаем одно из двух, о чем говорилось выше
//но что к чему у вас, я не понимаю и что, и как считать думайте сами
}
|
К тому же, прежде чем чего-то считать и выводить, нужно проверять, есть ли чего для вывода и получено ли что-то для расчета.
Примечание: в выводе списков убраны теги BR, такие вещи как форматирование надо решать с помощью CSS (хотя добавить их не сложно, если уж хочется).
PS. Если цена указанная в таблице, это уже расчитанная цена для каждой позиции, то тогда совсем не понятен выбор нескольких списков. Должен бить один список, опшены которого описывают все параметры позиции (формат, бумага, тираж) и цену тут же указать. В общем тогда и считать нечего. Если это не так, то тогда вообще не понять - что же подсчитывается, если у каждой цены есть и формат, и бумага, и тираж.... ? | |
|
|
|
|
|
|
|
для: sim5
(09.09.2010 в 01:43)
| | Спасибо большое за четкое разъяснение, буду вникать и разбираться... | |
|
|
|
|
|
|
|
для: alexcandr
(09.09.2010 в 12:43)
| | Вы лучше поясните о поле цен в таблице - что значит посчитать, да и вообще, что означают эти цены? А то какая-то абракадабра получается, по крайней мере для меня. | |
|
|
|
|
|
|
|
для: sim5
(09.09.2010 в 01:43)
| | >PS. Если цена указанная в таблице, это уже расчитанная цена для каждой позиции, то тогда совсем не понятен выбор нескольких списков. Должен бить один список, опшены которого описывают все параметры позиции (формат, бумага, тираж) и цену тут же указать. В общем тогда и считать нечего. Если это не так, то тогда вообще не понять - что же подсчитывается, если у каждой цены есть и формат, и бумага, и тираж.... ?
Вот пример по которому я делаю сайт http://www.unitedprint.de/?sid=ccc46c0909cfe5bae1b87969c9028c3d&pg=kalkulieren&produkt=up_flyer
У меня тоже на странице будет 6 выпадающих списков, в которых пользователь будет выбирать параметры продукции для расчета,
Да цена рассчитана для каждой позиции, в зависимости от тиража, цветности, бумаги,,,
Подсчитывать ничего не нужно, все позиции уже посчитаны, поэтому я их и в базу занес, мне нужно вывести сумму тиража в зависимости от того какие параметры выбрал пользователь и вывести ее на экран,,, Почему так я сделал? просто если считать по формуле, то можно повеситься, сама формула будет описываться я предполагаю на несколько листов(там краска за 1кг, бумага за тонну, работа машины, смены, и еще очень много чего),,,
Поле цена (price) это уже итоговая сумма тиража для каждой позиции, где выбраны определенные параметры(тираж 1000, цветность 4+0, бумага 150гр), и для каждой вариации своя сумма, там вариаций получится около 1000 строк
Вот сама таблица
http://print-spb.ru/catalog.PNG
Как из нее видно, что для каждого тиража, цветности и бумаги, свой ценник | |
|
|
|
|
|
|
|
для: alexcandr
(09.09.2010 в 12:57)
| | Если у вас все подсчитано, то с какого перепуга вы предлагаете пользователю выбирать бумагу, тираж и т.п.?
К примеру, я выбираю визитки, и вы мне вываливаете три списка из которого я могу выбрать: формат, бумагу и траж. Сама же таблица у вас, это уже подсчитанные позиции (не будем перечислять все, а возьмем первые три позиции):
1. 50х90 300гр. 1000 750.00 руб.
2. 50х90 300гр. 2000 1500.00 руб.
2. 50х90 300гр. 2000 2250.00 руб.
То есть логично, чтобы пользователь выбирал в одном списке (кстати, в этом случае лучше не списки, а группа радиокнопок, на мой взгляд) необходимую ему позицию. Но а что у вас получается? Какую цену в итоге вы мне должны показать, если я из ваших трех списков выберу:
а) для формата позицию 1 (что соответствует цене 750.00 руб);
б) для бумаги позицию 2 (1500.00 руб);
в) для тиража позицию 3 (2250.00 руб).
???
Ну-ка поясните, как в этом случае узнать, чего хочет пользователь и какую денюжку ему надо заплатить? | |
|
|
|
|
|
|
|
для: sim5
(09.09.2010 в 13:40)
| | >Если у вас все подсчитано, то с какого перепуга вы предлагаете пользователю выбирать бумагу, тираж и т.п.?
>К примеру, я выбираю визитки, и вы мне вываливаете три списка из которого я могу выбрать: формат, бумагу и траж. Сама же таблица у вас, это уже подсчитанные позиции (не будем перечислять все, а возьмем первые три позиции):
>
>1. 50х90 300гр. 1000 750.00 руб.
>2. 50х90 300гр. 2000 1500.00 руб.
>2. 50х90 300гр. 2000 2250.00 руб.
>
>То есть логично, чтобы пользователь выбирал в одном списке (кстати, в этом случае лучше не списки, а группа радиокнопок, на мой взгляд) необходимую ему позицию. Но а что у вас получается? Какую цену в итоге вы мне должны показать, если я из ваших трех списков выберу:
>
>а) для формата позицию 1 (что соответствует цене 750.00 руб);
>б) для бумаги позицию 2 (1500.00 руб);
>в) для тиража позицию 3 (2250.00 руб).
>
>???
>
>Ну-ка поясните, как в этом случае узнать, чего хочет пользователь и какую денюжку ему надо заплатить?
Я так понял вы предлагаете сделать на странице радио кнопки вида:
50х90 300гр. 4+0 1000
50х90 300гр. 4+0 2000
50х90 300гр. 4+0 3000
И при выборе позиции формируется цена из базы, правильно я понял, Но мне кажется это не удобно так как человек может не понять что в этой строке описано
Да здесь вы правы но это только можно отнести к визиткам, они самые простые и их меньше всего
(10 позиций по 5 тиражей 2х цветов), но дальше пойдут продукции по 100 и больше позиций, не думаю что это будет удобнее, хотя могу ошибаться,,, | |
|
|
|
|
|
|
|
для: alexcandr
(09.09.2010 в 14:02)
| | Это почему он не поймет?
Вы лучше обясните, как вы узнаете что именно я выбрал, из того примера, который я привел:
>а) для формата позицию 1 (что соответствует цене 750.00 руб);
>б) для бумаги позицию 2 (1500.00 руб);
>в) для тиража позицию 3 (2250.00 руб).
Ну как опишите мне что вы должны в своей таблице при этом выбрать - какую цену и как вы это сделаете? И если вам это удастся сделать, тогда я признаю, что был не прав. Вот когда сможете объяснить, тогда только будет иметь смысл продолжать разговор далее - как сделать правильно.
PS. И не цитируйте полностью мой текст, это совсем ни к чему. | |
|
|
|
|
|
|
|
для: sim5
(09.09.2010 в 14:17)
| | >И если вам это удастся сделать, тогда я признаю, что был не прав.
Я может неправильно объяснился, я не говорю что вы не правы, и даже не думал так,,
Да вы правы, сумму не вытащить так, счас попробовал, он мне выдает первую сумму только(((
>Ну как опишите мне что вы должны в своей таблице при этом выбрать - какую цену и как вы это сделаете?
Вот еще думал вариант это узнать id_catalog-а, но реализовать его не смог...
при выборе бумаги а она у визиток одинаковая, и формат одинаковый, только тираж разный, нужно
по тиражу узнать id_catalog и по этому id_catalog-у вывести цену(price) этого id_catalog-а. Но это я предполагал что прокатит только со списками(если вообще такое возможно) И то он толо прокатит с одним цветом 4+0, а с 4+4 уже другие цены,
Тогда я подозреваю что нужно вычислить id_catalo-а ключевых полей которые нужно задать заранее,, | |
|
|
|
|
|
|
|
для: alexcandr
(09.09.2010 в 14:50)
| | В том то и дело, что при нескольких списках, в которых выбирается значения присутсвующие в любых других полях, и по которым не производится подсчет общей суммы, вы ни как не сможете определить выбор пользователя.
У вас сумма уже расчитана, и расчитана на предлагаемые позиции, а значит именно позиции с полным их описанием вы должны предлагать пользователю. И это должна быть обычная таблица, в которой осуществляется выбор либо радиокнопками (возможен выбор только одной позиции), либо чекбоксами (пользователь может выбрать несколько позиций). Раскрывающийся список для этого случая вряд-ли удобен. Вот тогда все логично и просто. И узнавать d_catalog не надо, ибо он у вас прописан в таблице, и при выводе таблицы пользователю он будет указан либо радиокнопке, либо чекбоксу.
Я так полагаю, что пользователю можно выбрать несколько позиций, так? И прикрепите дампы этих двух таблиц из базы. | |
|
|
|
|
 1.8 Кб |
|
|
для: sim5
(09.09.2010 в 15:05)
| | >Я так полагаю, что пользователю можно выбрать несколько позиций, так? И прикрепите дампы этих двух таблиц из базы.
Да я думаю будет так лучше всего, что бы он мог выбрать несколько вариантов,,, | |
|
|
|
|
 2.5 Кб |
|
|
для: alexcandr
(09.09.2010 в 15:38)
| | Значит так. Я немного изменил названия полей таблицы, ибо мне проще запомнить английское значение, чем выдуманное русское подстрочное со всякими префиксами. К тому же, база данных, это все таки не резиновая штуковина, и нужно заботиться о экономии, то есть, не давать под поля типы, которые во сто крат больше ожидаемого максимального значения данных. Поэтому тип полей изменил, а вы уже их размер подкорректируйте исходя из тех размеров, которые у вас будут (максимальных). Поле стоимости позиции выбрано float (его считать нужно будет, и как текст, это просто не удобно), но... Коли у вас цены "круглые", без копеек, то наверное лучше INT, а ".00" дополнять при выводе уже, либо использовать money_format(). В общем решайте сами, но при суммировании array_sum() отбросит нули. Дам таблиц с изменениями для этого примера в приложении.
<?php
session_start();
$_SESSION['price'] = array(); //массив содержащий цены позиций выбранной категории товаров
//инициализируем переменные
$produkt = isset($_POST['id_produkt']) ? intval($_POST['id_produkt']) : null;
$choice = count($_POST['chk']) ? $_POST['chk'] : null;
//вывод формы
echo '<form action="" method="post">';
// Формируем первый выпадающий список
$q = mysql_query("SELECT * FROM produkts");
echo '<select name="id_produkt" onchange="this.form.submit()">
<option value="0">Выберите продукцию</option>';
while($row = mysql_fetch_assoc($q))
echo '<option value="' . $row['id'] . '"' .
($produkt && $produkt == $row['id'] ? " selected" : "") . '>' .
$row['name'] . '</option>';
echo '</select>';
//если был выбор первого списка, то выводим списки параметров
if($produkt) {
$i = 0; $bg_color = array('#ececec8','#dadada');
$q = mysql_query("SELECT * FROM catalog WHERE parent = " . $produkt);
//вывод списков через переменные
if(mysql_num_rows($q)) {
echo '<table border="0" cellpadding="4" cellspacing="2">
<tr bgcolor="#ababab"><td>№</td><td>Формат</td><td>Бумага</td><td>Цвет</td><td>Обработка</td><td>Тираж</td><td>Цена, руб.</td><td>Выбрать</td></tr>';
while($row = mysql_fetch_assoc($q)) {
echo '<tr bgcolor="' . $bg_color[$i & 1] . '"><td>' .($i+1). '</td><td>' . $row['format'] . '</td><td>' .
$row['paper'] . '</td><td>' . $row['color'] . '</td><td>' . $row['process'] . '</td><td>' .
$row['circulat'] . '</td><td>' . $row['price'] . '</td><td><input type="checkbox" name="chk[]" value="' . $row['id'] . '"' .
($choice && in_array($row['id'], $choice) ? " checked" : "") . '></td></tr>';
$_SESSION['price'][$row['id']] = $row['price'];
$i++;
}
echo '</table><input type="submit" name="choice" value="Выбрать">';
}
}
echo "</form>";
//если запрос на расчет
if(isset($_POST['choice'])) {
if(!$choice) echo "Выберите позиции.";
else {
$_SESSION['price'] = array_intersect_key($_SESSION['price'], array_flip($choice));
echo 'Выбрано на сумму: ' . array_sum($_SESSION['price']) . ' руб.';
}
}
|
Вот типа такого что-то должно быть.
PS. Да, вот что еще. Цены за позиции можно и не помещать в сессию, а указывать как значения атрибутам value чекбоксов, а имена чекбоксов, в этом случае, должны отражать id записей, то есть, например:
<input type="checkbox" name="chk[5]" value="3750.00">
|
В этом случае проще будет посчитать готовое. Но вот, если у вас более сложно в реальности все будет (не только этот выбор, но еще что-то, и т.п...), то наоборт может затруднить выбор/подчет.
В общем смотрите как выгоднее. | |
|
|
|
|
|
|
|
для: sim5
(09.09.2010 в 18:19)
| | Уважаемый sim5, я просто в шоке, вот это здорово, сча буду разбираться в коде))) огромное вам спасибо!!!
Сча посмотрел как работает слов просто нет, замечательно, Вы мастер своего дела)))
Есть только пару вопросов, в будущем хочу сделать с правой стороны от скрипта блок о выбранном продукте то есть уже до нажатия кнопки выбрать в этом блоке были уже такие позиции как
Формат
Тираж
Цветность
Бумага
Сумма заказ составляет 1000 руб
И форма для заполнения данных заказчика
Отправить менеджеру
Так вот можно будет автоматически сделать что б выбранная позиция заносилась в Блок Информации??? На JS скрипте видел такие штуки, но яву не знаю вообще, с помощью php реализовать реально,,,
Еще раз огромное спасибо за помощь!!!! | |
|
|
|
|
|
|
|
для: alexcandr
(09.09.2010 в 18:44)
| | Ну вообще это назвается корзиной, хотя не печенье у вас выбирать будут, а несколько иной товар (услуги), суть от этого не меняется. Сам код корзины на стороне сервера не так и сложен, да собственно JS-составляющая ее тоже не сложна, но только корзина должна быть динамической, а следовательно не просто JS-сценарий у клиента, и РНР-сценарий на сервере, а Ajax, либо фрейм использовать. Иначе это уже не корзина будет, а морока для пользователя.
Поэтому корзина только на РНР.... забудьте.
Можно с помощью JS на стороне клиента делать подсчет при любом выборе пользователя, и помещать его выбор в куки. Но если они не будут включены у него, значит и корзины сущестовавать не будет. | |
|
|
|
|
|
|
|
для: sim5
(09.09.2010 в 18:50)
| | >Можно с помощью JS на стороне клиента делать подсчет при любом выборе пользователя, и помещать его выбор в куки. Но если они не будут включены у него, значит и корзины сущестовавать не будет.
Спасибо!!!, буду изучать JS))) я много примеров таких скриптов видел но только на JS+AJAX.
хотелось сделать чисто на php...
В будущем в далеком будущем)) наверно все таки буду смотреть в сторону JS ,,, | |
|
|
|
|
|
|
|
для: alexcandr
(09.09.2010 в 18:44)
| | Да еще хочется уточнить у Вас по поводу select-ов я просто на них блин целую неделю потратил и безрезультатно)))) Реально ли все таки сделать выпадающий список как я хотел с начало или же не получится без использования JS.
Согласен с что Вы сделали гораздо удобней и работоспособней, но интересно возможно ли замутить на php с select-ами ,,, | |
|
|
|
|
|
|
|
для: alexcandr
(09.09.2010 в 18:53)
| | Выпадающий список он ведь не для "крутости" придуман, и думаю вы это понимаете. Пожалуйста, можете вместо таблицы помесить все это в выпадающий список, вот только удобно ли это будет для пользователя? Нужен будет список с мультивыбором (если хотите чтобы пользователь мог выбрать несколько позиций), это раз, а два, это то, что трудно будет следить визуально за своим выбором.
К тому же - нет у вас условия, для того, чтобы щелкать по куче списков. Если бы у вас значения полей (бумага, формат и т.д.), это были бы как наборы параметров (характеристик) со своей ценой, и по выбору этих значений вы бы расчитывали итоговую сумму, вот тогда понятен набор списков. То что у вас сейчас не предполагает их использование, а почему, выше об этом уже говорилось. | |
|
|
|
|
|
|
|
для: sim5
(09.09.2010 в 19:04)
| | Да спасибо, начинаю потихоньку вникать,,, еще раз благодарю за помощь, вот мне работы на пару дней точно что б разобраться в коде))))
Удачи вам!!! | |
|
|
|
|
|
|
|
для: sim5
(09.09.2010 в 19:04)
| | Уважаемый sim5, если не сложно помогите кое что доделать в скрипте,
Помогите реализовать в скрипте еще и выбор формата и тиража, просто ситуация такая что у меня одних флаеров на 120 записей и когда скрипт это выводит то получается список очень долинный и разобраться в нем ну очень трудно,,,
Пытался по аналогии добавлять переменные и селекты но увы ничего толкового не получилось,
Если не сложно подскажите как усовершенствовать скрипт,,,Заранее спасибо | |
|
|
|
|
|
|
|
для: alexcandr
(29.09.2010 в 18:16)
| | И чем я вам могу помочь, если я представления не имею, что значит "выбор формата и тиража"?
Если речь идет о их выборе для тех или иных позиций, то значит и расчет цены должен быть иначе, нежели так, как это описано выше, а именно, форматы должны иметь цену, тираж должен иметь цену за некую единицу. А уж получая выбранное производить расчет. Если вам это нужно, то вот вам и вся помощь, и начинайте с изменения структуру базы.
Если же под выбором предполагается нечто иное, то значит надо решать по иному, а как, я не знаю, потому как неведомо мне чего вам хочется. | |
|
|
|
|
|
|
|
для: sim5
(29.09.2010 в 18:29)
| | Да, не внятно объяснил, http://www.print-spb.ru/test.php вот при выборе продукции возьмем Флаер, выпадает весь список который есть в базе, там около 100 записей, я хотел бы еще прикрепить после Выбора продукции еще один select Выбор тиража, что б хоть как то сделать выборку, а то список из 100 записей на одной странице не очень удобно для пользователя,,,
То есть я хотел бы что б пользователь мог выбрать не только продукцию но и тираж хотя бы... | |
|
|
|
|
|
|
|
для: alexcandr
(29.09.2010 в 19:21)
| | Еще раз придется напомнить. Если у вас цены уже расчитаны, то о каком выборе может идти речь?
Вам можно только ограничить выбор, например, из тиража некие пределы, или равные некой выбранной пользователем величине. Но это решается запросом к базе.
Выводите списки имеющихся тиражей и форматов, перед тем как выводить позиции, а уж по выбору этих значений, выводите только те позиции, у которых соответствующие поля равны выбранному пользователем. | |
|
|
|
|
|
|
|
для: sim5
(29.09.2010 в 19:49)
| | Спасибо, видимо я с самого начало пошел по неверному пути, теперь вот одни грабли)))
>Вам можно только ограничить выбор, например, из тиража некие пределы, или равные некой выбранной пользователем величине. Но это решается запросом к базе.
А можно по подробней если не трудно, если я правильно понял то Вы имеете ввиду запрос к базе с выборкой WHERE id или что подобное | |
|
|
|
|
|
|
|
для: alexcandr
(30.09.2010 в 15:25)
| | "Мы пойдем другим путем!" В.И. ленин.
Не знаю, тот ли вы путь выбрали, вам виднее чего вы хотите. Но представьте, что вы пришли в мой магазин прикупить 300 гр. сахара, я вам:
- Может вам еще пять крупинок взвесить? Можете взять мешочек: 25 кг; 55 кг или 255 кг, а не нравится, идите отсель... А мне так удобнее, ибо все уже подсчитано.
И без разницы, толи вы видите на витрине все три мешочка, толи один из них - выбора у вас все равно нет.
WHERE id тут совсем не причем, коли вы хотите показать, например, только тиражи равные 1000, и еще чего-то там (уже не помню).... Значит и WHERE для этих полей равные тому, которое выбрал пользователь. Но опять таки, у вас все подсчитано, а пользователь выбирая то или иное из предложенных списков, и определяя конфигурацию своего заказа, справедливо может предполагать, что каждое из выбранных, это некая единица в расчетах, и цену за эти единицы он по праву хотел бы знать, и если он не может свободно ввести число тиража, пусть это будет тоже список для выбора, в этом случае он получит ожидаемое - калькуляцию за свой заказ. В вашем же случае такого не получится никак, он совсем не подозревает, что одно и тоже (например, формат бумаги) может находиться во многих позициях, как и другое им выбранное, и в итоге получит цену совсем не ожидаемую им.
Вот поэтому вам и нужно выводить все, что вы можете предложить, с уже с итоговой ценой, чтобы можно было выбрать. А вот ограничить вывод на странице только позициями, у которых, например, тиражи равны 1000, это можно. При чем, это совсем не обязательно список-выбор-запрос к базе-вывод, это можно делать и на стороне клиента, как то показывать порциями в зависимости от выбранного, либо сортировать по выбранному и в любом порядке, и т.п.... Все это можно сделать на JavaScript, а пользователю отдавать сразу все позиции запрошенной им категории. | |
|
|
|
|
|
|
|
для: sim5
(30.09.2010 в 16:03)
| | Понятно, значит без JS здесь не обойтись,
Я вот думаю ведь есть же формула по которой рассчитывали сумму заказа, правда она какая-то очень хитрая))) ведь можно эту формулу перевести в пхп в виде переменных и рассчитывать по формуле при условии выбора пользователем определенных позиций, а данные уже брать из базы,
Но думаю это будет сверх сложно(((( | |
|
|
|
|
|
|
|
для: alexcandr
(30.09.2010 в 19:47)
| | Не знаю что у вас там за формула, но зная цену за единицу чего-то, зная сколько этих единиц выбрали, нет никакой сложности подсчитать итоговую сумму.
1 кг товара стоит 15 рублей, выбрали 3 кг в мешочке за 1 руб. завязанный красной летной по 3 рубля = 15 * 3 + 1 + 3 итого 49 руб. | |
|
|
|
|
|
|
|
для: sim5
(30.09.2010 в 19:52)
| | Спасибо за ответ, я с самого начала понял что будет п*па, нужно будет потом что б манагер расписал мне все от начало до конца как он рассчитывает заказ и уже потом самому вникать в процесс, я думаю это дело не одной недели))) так как там очень много нюансов и тп.
А можно на данном этапе хотя бы разделить список который выдает скрипт на таблицы то есть
http://print-spb.ru/test.php при выборе флаеров у нас выводится список из 181 я бы хотел бы что бы он формировался по 10 записей в таблице и таких бы таблиц было бы 18 ну хоть что бы как-нибудь разделить все записи, а то в глазах все плывет
Заранее спасибо | |
|
|
|
|
|
|
|
для: alexcandr
(01.10.2010 в 14:23)
| | Ну я же вам вроде бы ответил и по этому поводу, что еще сказать можно?
Показывать по 10 записей, так это называется постраничной навигацей, тем о которой в этом разделе столько, что просто и говорить об этом не хочется. Но в вашем случае лучше не выводить порциями, а так, как вы ранее и спрашивали - по определенному параметру. Например, у вас в Флаерах все параметры одинаковы, кроме тиража (ну и веса бумаги, хотя что это такое трудно понять, может лучше о качестве бумаги речь вести: обычная, фотобумага и т.п.?, собственно это и есть ее плотность, вес), поэтому можно предложить список, в котором можно выбрать показ только позиций тиражом 1000, 2000, 3000 и т.д., и типом бумаги. Но опять таки, для меня как пользователя трудно будет понять, например, две первых позиции:
1 148х210 (А5) 115 гр. 4+0 (CMYK) Резка 1000 2973
2 148х210 (А5) 115 гр. 4+0 (CMYK) Резка 1000 2973
|
Они чем-то отличаются? Если да, то чем, и почему тогда цена одинакова? Если нет, то почему две одинаковых позиции в списке? | |
|
|
|
|
|
|
|
для: sim5
(01.10.2010 в 14:50)
| | Там просто опечатка, не правильно добавил запись) | |
|
|
|
|
|
|
|
для: alexcandr
(01.10.2010 в 14:55)
| | Ну вот и предлагайте списки тех параметров, которые определяют основное - размер, бумага, тираж, и по выбранному в списках делайте запрос .... WHERE поле размера = выбранному размеру AND поле бумаги = выбранной бумаге и т.д...... Если пользователь выберет только в одном из списков, например, тираж, то вывести все по выбранному тиражу, в двух - значит по двум параметрам.
Можно отдавать клиенту все, и выбирать для показа нужное на строне клиента с помощью JS. | |
|
|
|
|
|
|
|
для: sim5
(01.10.2010 в 15:02)
| | Спасибо, сча буду пробовать. | |
|
|
|
|
|
|
|
для: sim5
(01.10.2010 в 15:02)
| | >списках делайте запрос .... WHERE поле размера = выбранному размеру AND поле бумаги = >выбранной бумаге и т.д
Блин туплю по страшному,,,делаю так
Вообще тупик(( не могли бы Вы пример показать если не трудно, чего то я совсем запутался,
я так понял что нужно добавить еще 2 селекта (например Формат и Бумага)и к каждому селекту сделать запрос к базе
$q = mysql_query("SELECT format FROM catalog");
вывели все это в селект, но тогда в селекте выводится все записи столбца format....
А по моему вроде потихоньку начинаю догонять, у нас же у каждого вида продукции есть свой уникальный ID тогда можно сделать что то типа этого
$q = mysql_query("SELECT format FROM catalog WHERE parent=1");
Хотя даже если так сделать то как же связать следующий селект Бумага | |
|
|
|
|
|
|
|
для: alexcandr
(01.10.2010 в 15:43)
| | Чтобы не тупить, надо учить. Заходите в этот раздел форума и читаете (заодно приобретете хоть какие-то знания) о выборке из базы, где обязательно будут с упоминанием, например, GROUP BY. | |
|
|
|
|