Цитата:
|
laimas, скорее всего ID должен определять товар. Я передавал $Manufacture и $Model для того, чтобы записать в другую таблицу. Затем сделаю распечатку чека на выбранные комплектующие. Если я передам ID, то получу в поле только ID, но как записать вместо этого айди соответствующий товар с ID, который находится в таблице с товарами(например, процессоров).
У меня сборка для комплектации находится в другой таблице. Там поля типа процессор, кулер и т.д. Вот я и хочу записать значение всех селектов в столбцы |
Цитата:
Профтыкать в равенство where все пары какие имеются и получишь ту самую единственную строку. Для расширения мышления: работа через id всего лишь вариант оптимизации и повышения эффективности. Для отождествления записи в таблице никакие ID нахер не нужны. Без них все отождестволяется нормально как и предусмотрено идеей SQL. |
Цитата:
|
kostyanet, возможно. Ещё надо учиться, учиться, учиться. Да, у меня ужасный, отвратительный, гнилой и т.п. код, но для меня задача остается актуальной. Картинки, цена выбранного товара я получаю. Остается скрывать ИЗНАЧАЛЬНО цену и картинку до тех пор, пока не будет выбран товар в селекте.
|
Вы не собираетесь учиться, вам надо домучить свою бредятину чтобы она завтра работала, а что будет послезавтра - о том думать нация не велит. А послезавтра у вас будет не 6 id в дата-тегах, а 66, а после-после-завтра 666 и так далее. Единственная надежда что завтра и тем более послезавтра не наступят никогда и только день сурка ваша надежда.
|
Цитата:
<select class='chosen' id='chosenmak' name='maker' > <option value="" value='' data-price=''>-- Выбрать --</option> <?php foreach ($arr_get as $value) echo '<option data-price="'.$value['Price'].'" data-image="'.PATH_IMAGE.$value['photo'].'" value="'.$value['ID'].'">'.$value['Manufacture']." ".$value['Model'].'</option>'; ?> </select> Откуда берется $Manufacture не понятно, если она определена ранее, еще ладно, но по уму, если это значение определяется полем другой sql-таблицы (У меня сборка для комплектации находится в другой таблице. Там поля типа процессор, кулер и т.д.), а не той что запросом вернула $arr_get, то все параметры товара $value['ID'] должны получаться вложенным запросом к этой (этим) таблице. PATH_IMAGE - константа определяющая путь к фото товаров, а $value['photo'] должно быть только именем фото в базе, иначе при необходимости изменения структуры каталогов придется все переписывать в базе. При получении формы выбранное значение списка будет определять ID выбранного товара, по которому уже запросами к базе можно всегда получить его параметры из таблицы и связанных таблиц. А атрибуты data опций хранящие эти параметры для клиентского скрипта. PS. Именно так строка должна формироваться, ибо в вашем коде ошибки в конструкции echo. И пробелы лишние ни к чему. |
Цитата:
|
Идея SQL заключается в хранении данных без номеров строк и смещений - в отношениях, которые имеют именованные параметры типа имя-значение. То есть хранится все х знает как, а выбирается то, что нужно и в том виде и в том порядке, которые определены в сценарии запроса. Применение числовых идентификаторов не более чем, идентификатором может быть любое отношение если его значение уникально для таблицы. Достаточно сделать unique key на поле скажем prod_name и prod_name может служить идентификатором, поскольку драйвер вам не даст завести 2 одинаковых имени продукта.
Однако что такое одинаковое имя для компа и для человека? Например для человека это одно и то же RF(GL) 6532091 RF (GL) 6532091 а для компа - два разных имени. Для защиты от бескультурья, для повышения эффективности запросов, для экономии ресурсов, унификации, оптимизации и тп - вместо каких угодно идентификаторов применяют - числа. Только поэтому, а не потому что без чисел нельзя обойтись. Запросто можно, сущность SQL в том и состоит что можно. |
laimas, отдельное спасибо за демонстрацию примера, с помощью которого не надо было создавать мне $ID = $value['ID'] и т.д.
Но как теперь скрывать ИЗНАЧАЛЬНО цену и картинку до тех пор, пока не будет выбран товар в селекте. |
kostyanet, если в базе определен первичный ключ, который уже уникален, то зачем использовать иное? И данный пост совсем не посвящен тому как можно в SQL задать индексы и их использовать? Ну а что такое число и что такое строка, в чем их разница и почему число лучше, это разводи полемику где либо в другом месте. Ну что лабуду то гнать?
|
Цитата:
|
Так вот, достаточно однозначно отождествить кортеж и все его данные будут немедленно доступны.
Если, допустим идентификатором служит уникальное число, то получив это число мы получим все остальные отношения какие только могут быть. Нет никакого смысла повсюду сопровождать уникальное отношение - кучей других отношений того же кортежа, потому что по уникальному мы в любой момент получаем какие угодно кортежи. Ну блин что там изобретать. Что сохраняется в куках когда юзер нажимает заказать? - количество. Количество дает юзер. Минимум 1 штука. Это ввод юзера, мы его сохраняем и приделываем индентификатор - количество чего. Все, больше там ничего не надо в минимуме. Еще можно сохранить дату или цену - типа сделать снимок цены, но поскольку куки легко подделать, оно не имеет значения. Для правовых вопросов заказ должен быть сделан после регистрации которая подразумевает согласие с условиями предоставления услуг и забирает персональные данные. Тогда как мы покажем всю тряхомудию о заказанном товаре? Блин, ну а как мы ее показываем на продуктовой странице по единственному идентификатору? Все то же самое. |
Цитата:
Ваши фантазии работают только там, где ЗАРАНЕЕ определены ограничители. Например заведено отношение значение которого сам драйвер меняет при создании записи. Если таких ограничителе нет - ваши опредения по определению ничего не определяют. То есть рассказывая небылицы про SQL вы низводите эту сказку до были массивов. Типа бд это такой массив, где всегда есть за что зацепиться. Х нанэ. Пока сам не сделаешь зарубки - не за что. Таков принцип. |
Цитата:
extract($row); /* теперь все ваши id-шмады существуют как переменные */ echo $id; /* вывели то, что было в $row['id'] */ |
Цитата:
kostyanet, спасибо. Будем знать! |
Цитата:
Геморрой, короче, бесполезный. |
Цитата:
Вы что в трех соснах-то бродите. Это ж элементарная задача сейчас. Ну а как по вашему загружаются данные с сервера на том самом сайте? Как они появляются там, где надо? Нет, ну был бы какой-то ценный рендер, из фрейморка замороченного какого-нибудь, в смысле что приходится за него цепляться. Но там же очевидно вы сами все придумали. Выкиньте этот нелепый хлам и сделайте нормально как люди делают для людей. |
Ладно, пусть мучается, это у нас национальное.
|
kostyanet, я с DOM'ом уже работал. В первом посте была ссылка.
Но он большой. У меня же 6-8 селектов. Надо куча переменных создавать. К сожалению, у меня бд не правильно скорее всего построена. Для процессоров я создал таблицу "процессоры", для кулеров - "Кулеры" и т.д. Я в каждый селект вывожу данные из нужной мне таблицы. |
Цитата:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style> </style> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script> $(function() { $('#chosenmak').change(function() { if(!this.value) return; var e = $(this).children(':selected'), td = e.closest('tr').children(); td.eq(0).html('<img src='+e.data('image')+'>'); td.eq(1).text(e.text()); td.eq(2).text(e.data('price')); }) }); </script> </head> <body> <table id="prop" border=1 width=100%> <tr> <td></td> <td></td> <td></td> <td> <select class="chosen" id="chosenmak" name="maker"> <option value="">Выберите...</option> <option data-price="300" data-image="http://iconizer.net/files/Farm-fresh/orig/car_add.png" value="1">Модель 1</option> <option data-price="500" data-image="http://www.iconsearch.ru/uploads/icons/iconslandtransport/32x32/lorrygreen.png" value="2">Модель 2</option> </select> </td> </tr> </table> </body> </html> |
laimas, cпасибо! Работает. Последний вопрос:
Как обратно скрыть картинку и цену, если выбирается значение "Выбрать" И как получить сумму, когда складывается 2+ селекта |
Как обратно скрыть картинку и цену, если выбирается значение "Выбрать"
Переписать строки 10, 11 примера так: var e = $(this).children(':selected'), td = e.closest('tr').children().slice(0, 3); if(!this.value) { td.empty(); return; } где второй параметр метода slice(0, 3) определяет число ячеек таблицы, которые надо очистить (то есть за минусом ячейки содержащей список). И как получить сумму, когда складывается 2+ селекта Я не знаю что означает "складывается 2+ селекта", что за селекты, что куда складываются.... |
Цитата:
http://jsfiddle.net/m9xra6pL/ |
Ну тогда так id="chosenmak1" не стоит делать, если селекция будет по ID, то тогда лучше так "chosenmak-1", "chosenmak-2", ... так как нужно будет определить им один обработчик, и это будет так:
$('[id|=chosenmak]').change(function()... Но если списки в одной таблице, то можно и без ID для списков: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style> </style> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script> $(function() { var tbl = $('#prop').find('select').change(function() { var e = $(this).children(':selected'), td = e.closest('tr').children().slice(0, 3), sum = 0; if(!this.value) td.empty(); else { td.eq(0).html('<img src='+e.data('image')+'>'); td.eq(1).text(e.text()); td.eq(2).text(e.data('price')); } $.each(tbl.find('td:nth-child(3)'), function() { sum += this.innerHTML*1; }) $('#total').text(sum); }).end(); }); </script> </head> <body> <table id="prop" border=1 width=100%> <tr> <td></td> <td></td> <td></td> <td> <select class="chosen" name="maker"> <option value="">Выберите...</option> <option data-price="300" data-image="http://iconizer.net/files/Farm-fresh/orig/car_add.png" value="1">Модель 1</option> <option data-price="500" data-image="http://www.iconsearch.ru/uploads/icons/iconslandtransport/32x32/lorrygreen.png" value="2">Модель 2</option> </select> </td> </tr> <tr> <td></td> <td></td> <td></td> <td> <select class="chosen" name="maker"> <option value="">Выберите...</option> <option data-price="300" data-image="http://iconizer.net/files/Farm-fresh/orig/car_add.png" value="1">Модель 1</option> <option data-price="500" data-image="http://www.iconsearch.ru/uploads/icons/iconslandtransport/32x32/lorrygreen.png" value="2">Модель 2</option> </select> </td> </tr> </table> <div id="total"></div> </body> </html> где значение 3 в nth-child(3) указывает на порядковый номер (не индекс в наборе!) элемента TD в своем родителе TR. В данном случае это ячейка содержащая цену. Вот только как это понять, что у обоих списков одно и тоже имя? Ведь при отправке такой формы сервер получит значение последнего из списков. Чтобы получить значения обоих имена списков дожлны отражать массив - name="maker[]". Но в этом случае возникает вопрос - почему один и тот же ключ (maker) имеет два набора? Ведь, если первый список, это одни товары, а второй, это другие товары, и имена списков одинаковы, то значения ID каждого списка должны быть уникальны. Если они не уникальны, и каждый список это разные товары, то имена списков должны быть разные. |
laimas, да, вы верно подметили с maker, я забыл изменить на другое имя.
Вот мы получили нужные нам значение в td, а теперь как эти данные передать в таблицу? Пишу так: INSERT INTO Configuration SET `Processor` = ' ".$_POST['maker']." а как передать стоимость и картинку - не понимаю. В столбец Processor будут записываться данные вида : Тесттест, 200руб. Потом как-то надо это разделить, чтобы вывести данные для просмотра или редактирования |
а как передать стоимость и картинку - не понимаю.
А что цену товара и его изображение определяет клиент, а не сервер, на котором в базе по ID полученным из списков как раз и храниться и цена этого товара, и имя изображения? Это кто клиенту отдавал: echo '<option data-price="'.$value['Price'].'" data-image="'.PATH_IMAGE.$value['photo'].'" value="'.$value['ID'].'">'.$value['Manufacture']." ".$value['Model'].'</option>'; сервер? А если сервер, то нахрена же получать от клиента это, если он и без него эти параметры знает? |
laimas, подставляю ещё ".$value['Price']." или $_POST[$value['Price']] в INSERT, но пустоту записывает...
Аааа. Понял. Мы передали id, чтобы спарсить информацию( товара по айдишнику. Но передается просто число. Это через GROUP BY или JOIN делается? |
Цитата:
|
kostyanet, так я хотел запросом записать в столбец. Используя Insert, а перечислять параметры через запятую.
Иначе не знаю( |
Вот как делается
{"123":{"q":1,"p":37070},"126":{"q":1,"p":30600}," 186":{"q":4,"p":6920}} это записывается в куку юзера. p это - price - чисто ритуальная фича, на случай если юзер заказал в пнд, а во вт ценник поменялся, а он начал оформлять, тогда ему скажут - чувак, с тех пор ценник поменялся, продолжать по новой цене или как? q - quantity - количество. А без названия - тот самый id, который и в json - id. В бд заказ записывается только после оформления. Можно записать нормально, но кому оно надо - пишется как есть, тот самый json, поскольку под него уже есть интерфейс просмотра-редактирования, который и с заднего входа заюзан для этого поля. То есть оператор видит заказ точно так же, как видел его заказчик. Это важно, потому что глюки разных интерфейсов могут вызвать неоднозначность в финансовых вопросах. Когда код один на всех - то и возможные глюки у всех одинаковые. |
Цитата:
|
Как же вы приложения пишите, если вообще не имеете представления о том, что же возвращает серверу форма?
Если опции этих списков, и пусть условно с именами maker1 и maker2, списка содержат ID товаров, и например будут выбрано у первого опция со значением 123, а у второго 200, то $_POST[] будет содержать: Array ( [mker1] => 123, [mker2] => 200 ) какие к черту $value['Price'] и иное, если они не являются значением свойства value опций списка? И еще раз повторить, что они серверу и нафик не нужны? Север получил главное - ID товаров, и если уж хранить этот выбор, то хранят ID и выбранное количество, все остальное зачем? Ведь получить цену и имя фото товара можно всегда запросом к таблице его описывающей: $sql = 'SELECT price, photo FROM table_name WHERE id=' . (int)$_POST['maker1']; Здесь $_POST['maker1'] - это для примера, ибо как уже говорил, записывать price, photo у товаров выбранных списками в какую-то таблицу нет никакого смысла. Надо получить где-то это и вывести, значит запрос к таблице, в которую вы пытаетесь "INSERT ...", получить в ней ID и количество сохраненные этим "INSERT ..." при получении формы, и в этом запросе вложенный JOIN к таблице получить table_name за получением их price, photo. |
kostyanet, я такое как-то сделаю, когда юзер самостоятельно будет собирать комплектующие: добавление в корзину и т.д
А это(с селектами) я делаю аля нажал на "оформить" и сразу получаешь расчетный лист (http://www.positive45.ru/print_form/list_r_k.php). Так нужно. |
Короче, харе тупить. Как пишутся телеги известно давным давно. Реализации могут быть разные, зеленые и красные, а принцип одинаков - в телеге сохраняется только выбор юзера, то есть данные которые он сам генерит своими действиями. Выбрал товар - это id товара, id может быть любым, обычно это - число. Задал количество - это количество. Получаем пару - ид-количество, для экономии места в куке сокращаем до и-к, кодируем вручную в свой колхозный протокол, или индустриально - на языке json (см выше).
Вариант с бд - который как правило доступен после регистрации, то есть открытия счета юзером на сайте - отличается только тем, что пишем не в куки, а в бд insert into cart (user_id,prod_id,quantity) values($user_id,$post['id'],$post['q']) И все. Теперь чтобы открыть телегу юзера запрашиваем select * from cart where user_id = $user_id; Но получим просто список идэх, толку мало, поэтому просто пихаем телегу как фильтр к обычному каталожному запросу, например select prods.* from prods left join cart on cart.prod_id = prods.id where cart.user_id = $user_id; и все, у нас полный фарш с каталожной таблицы, но выбраны только те товары, которые есть в тележке зарегиного и аутентичного юзера. |
Цитата:
|
kostyanet, cпасибо за разъяснение! Надо посмотреть на БД магазинов. Особенно с категориями (видеокарты, процессоры). Ведь у каждого товара в категории свои свойства: графическая частота у видеокарты, а у процессора нету вообще(как пример).
Потому что у меня такие таблицы: http://prntscr.com/79jgxf это для кулеров. Не правильно же созданны? "Актуальная цена всегда берется из выставленного счета, а счет выставляется или человеком в офисе, или на сайте из данных в таблице" Верно. У меня админ меняет цену. Только так. |
Дальнейшее усложнение телеги вовлекает бухгалтерские сущности. В теории можно вести заказ по дате, но на практике делается еще одна таблица, в которую валятся сведения о самом заказе: оформили, отгрузили, сколько, чего, фактический адрес получателя, как платил, когда получил, когда отменил, когда закрыл и все такое. Это уже для магазов которые реально продают через сеть, выдают треки и в таком роде. Вашему все равно не светит.
|
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 13:23. |