Просмотр полной версии : Как получить данные из селекта
Доброго времени суток всем! Делаю сайт на подобии этого(не реклама) (http://www.positive45.ru/konstruktor/) и столкнулся с тем, что надо вывести стоимость, изображение товара, который мы выбрали в селекте. Если значение в селекте "Выбрать", то стоимость и изображение не показывается.
У меня селектов 6-8 штук(ну как на сайте практически) и код, который ниже уж очееень большой как для 1 селекта. Я скрываю изначально поля, а потом при выборе товара - показываю..
Ранее был такой код js(огромный, не правда ли?)
http://jsfiddle.net/f2Lsxh73/3/
А код php сейчас такой
<table>
<thead style='background: #F1F2F7'>
<tr>
<th>Тип</th>
<th>Наименование</th>
<th>Цена, грн.</th>
</tr>
</thead>
<tr>
<td>Процессор</td>
<td>
<?php
echo "<div class='newselect'>";
echo "<select class='chosen' id='chosenmak' name='maker' onchange='updatePrice(this)'>";
echo '<option value="0">-- Выбрать --</option>';
foreach ($arr_get as $value) {
$ID = $value['ID'];
$Price = $value['Price'];
$Model = $value['Model'];
$photo = $value['photo'];
echo '<option data-price="'.$Price.'" data-image="'.$photo.'" value="'.$Model.'">'."$Model".'</option>';
}
echo "</select>";
echo "</div>";
echo "<span id='model'><img src='$photo' class='t' id='preview'/></span>";
echo "<td><input class='label' id='price_cpu' name='price_cpu' readonly/></td>";
?>
</td>
</tr>
Другие селекты также сделаны, но только немного другие значения вывожу. http://prntscr.com/791bzt вот так.
JS код изменил на такое для одного селекта.
Изначально всё скрыто и задача опять остается: картинка/стоимость(должны соответствовать товару) скрыты все и должны выводится тогда, когда выбран товар в селекте. Если не выбрано, то скрывать опять.
sel = document.getElementById("myTab").getElementsByClassName("t")
for(var i=0; i<sel.length; i++) sel[i].style.display = "none";
selLabel = document.getElementById("myTab").getElementsByClassName("label")
for(var i=0; i<selLabel.length; i++) selLabel[i].style.display = "none";
function updatePrice(select){
var image=select.options[select.selectedIndex].getAttribute("data-image");
var price=select.options[select.selectedIndex].getAttribute("data-price");
document.getElementById('price_cpu').innerHTML = price;
}
Подскажите/помогите:
Как вывести стоимость и картинку товара, который выбран в селекте? Я говорил, что их 6-8
Если ничего не выбрано в селекте, то скрывать/не показывать стоимость и картинку
Я совсем новичок и не знаю как сделать.
Я совсем новичок и не знаю как сделать.
Для начала нужно сделать простеньких хтмл-пример, на котором можно будет что-то делать...
ksa, я могу скинуть вам файлик, вы посмотрите.
Даже с простеньким примером не получается. :help:
я могу скинуть вам файлик, вы посмотрите.
Можешь сразу и деньги перечислить на карточку... :D
Даже с простеньким примером не получается.
Ты его еще даже не сделал...
Можешь сразу и деньги перечислить на карточку... :D
Ты его еще даже не сделал...
http://jsfiddle.net/qb4yjkgx/1/
На чистом хтмле вот ссылка выше.
У меня пхп и немного отличается
И что тут нужно сделать?
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
<link rel="stylesheet/less" type="text/css" href="style.less">
<script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/2.5.0/less.min.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
</script>
</head>
<body>
<table id='myTab'>
<tr>
<th>Тип</th>
<th>Наименование</th>
<th>Изображение</th>
<th>Цена, грн.</th>
</tr>
<tr>
<td>Processors</td>
<td>
<select class='t'>
<option>Выбрать</option>
<option value='Processors-1'> ЕУІІ 1</option>
<option value='Processors-2'> ЕУІЕ 2</option>
<option value='Processors-2'> ЕУІЕ 3</option>
</select>
</td>
<td><img src='http://javascript.ru/forum/image.php?u=8616&dateline=1282216923'></td>
<td>22</td>
</tr>
<tr>
<td>Graphics</td>
<td>
<select class='t'>
<option>Выбрать</option>
<option value='Graphics-1'> Graphics GeForce GTX 970 </option>
<option value='Graphics-2'> Graphics GeForce GT 720 </option>
<option value='Graphics-3'> Graphics 333 </option>
</select>
</td>
<td><img src='http://javascript.ru/forum/image.php?u=8616&dateline=1282216923'></td>
<td>33</td>
</tr>
</table>
</body>
</html>
И что тут нужно сделать?
Когда ничего не выбрано, то все элементы скрыты(цена и рисунок). Когда выбирается значение в селекте, то выводится рисунок и цена товара
Но, как я понимаю, рисунки и цены должны быть разные. Где это все брать?
Но, как я понимаю, рисунки и цены должны быть разные. Где это все брать?
Да, должны быть разные. Я не знаю как в чистом хтмле назначить для каждого значения в селекте свою цену и картинку. ПО этому я хотел скинуть файлы(бд, пхп), чтобы вы посмотрели и помогли
Я не знаю как в чистом хтмле назначить для каждого значения в селекте свою цену и картинку.
В параметры можно записать...
Как вариант...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
<link rel="stylesheet/less" type="text/css" href="style.less">
<script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/2.5.0/less.min.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
$('.t').change(function(){
var o=$(this.options[this.selectedIndex]);
var or=$(this.parentNode.parentNode);
or.find('span').text(o.data('price'));
or.find('img').attr('src',o.data('img'));
});
});
</script>
</head>
<body>
<table id='myTab'>
<tr>
<th>Тип</th>
<th>Наименование</th>
<th>Изображение</th>
<th>Цена, грн.</th>
</tr>
<tr>
<td>Processors</td>
<td>
<select class='t'>
<option value='' data-price='' data-img='http://javascript.ru/forum/images/smilies/sad.gif'>Выбрать</option>
<option value='Processors-1' data-price='10' data-img='http://javascript.ru/forum/images/smilies/smile.gif'> ЕУІІ 1</option>
<option value='Processors-2' data-price='20' data-img='http://javascript.ru/forum/images/smilies/wink.gif'> ЕУІЕ 2</option>
<option value='Processors-2' data-price='30' data-img='http://javascript.ru/forum/images/smilies/laugh.gif'> ЕУІЕ 3</option>
</select>
</td>
<td><img src='http://javascript.ru/forum/images/smilies/sad.gif'></td>
<td><span></span></td>
</tr>
</table>
</body>
</html>
ksa, сделал как у вас - http://prntscr.com/795ode вот что получилось. Код хпх на первой странице в 1 посте
makalet, у нас на работе отслеживают интернет-трафик и адреса УРЛ... Да и с ПХП я не работаю, использую другой серверный язык.
ksa,:cray: Я за помощь на пивко бы дал
ksa, как не пытаюсь поместить картинку и цену в разные td - ничего не получается. http://prntscr.com/79g85m
<tr>
<td>Процессор</td>
<td>
<div class='newselect'>
<select class='chosen' id='chosenmak' name='maker' >
<option value="0" value='' data-price=''>-- Выбрать --</option>
<?php
foreach ($arr_get as $value) {
$ID = $value['ID'];
$Price = $value['Price'];
$Model = $value['Model'];
$photo = $value['photo'];
echo '<option data-price="'.$Price.'" data-image="'.$photo.'" value="'.$Manufacture.' ">'."$Manufacture"." "."$Model"." '</option>';
}
?>
</select>
</div>
<img src='' name='image_cpu' id='preview'/>
<span ></span>
</td>
</tr>
Подскажите:
1. Когда img и span обертываю в tr, то выводит пустоту.
2. Также, когда выбрано значение "Выбрать", то цена и картинка не скрываются. Как исправить?
3. Вот ваш пример. http://jsfiddle.net/tngebbfx/ Как считать всю стоимость и вывести ее в поле "Итого"?
4. Можно ли как-то взять значение с option (например, ."$Manufacture"." "."$Model"." ) и внедрить в value?? Очень нужно так сделать, чтобы в value заного не прописывать переменные
echo '<option data-price="'.$Price.'" data-image="'.$photo.'" value="'.$Manufacture.' ">'."$Manufacture"." "."$Model"." '</option>';
Может все таки:
echo '<option data-fabric="'.$Manufacture.'" data-image="'.$photo.'" value="'.$Price.' ">'."$Manufacture"." "."$Model"." '</option>';
laimas, а что изменилось? Поменял у себя на вашу строку. Ничего
kostyanet
26.05.2015, 07:18
Я совсем новичок и не знаю как сделать.
Так не делается. Вы придумали какой-то бред, нашли плохой пример и пытаетесь свой бред совместить с этим примером не понимая как оно вообще делается как устроен принцип.
kostyanet
26.05.2015, 07:40
Сайт который не реклама построен инженерно. То есть коммерцией они не занимаются, ничего не впаривают, типа надо заранее знать что хочешь и просто профтыкать в селектах свои хотелки посматривая время от времени на бюджет.
Вы, или ваш заказчик, подумали что это плохо, что надо сделать более коммерчески и теперь вы пытатесь совместить этот инженерный подход с торгашеским.
Да нихера они не совмещаются и не надо ничего совмещать. Забивание телеги товаром ничем не отличается от комплектования компа. Нахера лишние сущности? Все давным-давно отработано и вы можете лишь улучшить, если получится.
Короче, у вас есть обычный каталог и в нем есть кнопки Купить. Человеку впаривается товар, он нажимает кнопку Купить - индентификатор и цена валятся в куки. Человек открывает телегу - видит что навалил в нее. Смотрит, сравнивает, редактирует, все как обычно. Интерфейс ему все показывает, считает, дает ссылки и все такое. Затем юзверь жмет кнопку Оформить и готово.
kostyanet, у меня как раз и есть такое. Категории, пользователь сам покупает нужные ему части, добавление в корзину и т.д.
А типа конфигуратор пк мне надо для сборки, который клиент пожелал, не знающий толком про конфигурацию. Вот и будет продавец, который занимается этим. Может и лишнее, но мне надо.
kostyanet
26.05.2015, 08:08
При чем тут клиент? Это в бд должно быть определено что к чему подходит и выбрать что не подходит будет просто невозможно. Ну то есть коню ясно что у вас просто специфическая телега, не такая как на сайтах шмоток или интерьеров где человек сам решает что ему подходит, а интерфейс может только подсказывать. Когда речь идет о железках то подсказки перемещаются в определения и все.
Ну или заведите вторую телегу с такой спецификой и соотв. вторую кнопку - Сохранить. Будет тогда 2 - Купить иниипет - и Сохранить - в комплектацию. Комплектаций (папок, namespace'ов) может быть 1 или несколько.
kostyanet
26.05.2015, 08:11
Ну если вы на сайт машинок зайдете, то как сможете добавить в комплектацию выбранной деревянной модели узлы и агрегаты из фарша другой модели или даже другого бренда. Ну вот, у вас то же самое.
У долбоящеров на том не рекламном сайте почему-то все начинается с монитора.
а что изменилось? Поменял у себя на вашу строку. Ничего
Тогда вопрос - а каково назначение этого списка? Если для выбора товара, то первичным значением должна быть не цена, и тем более фото и прочее, а ID товара. Почему этого важного и определяющего товар параметра нет в списке, это удивительно. Но если у вас свои "тараканы" и это оправдано, то уж первичным значением должна быть цена. С этого определения и надо плясать, а уж потом определяться что и как на клиенте.
kostyanet, я это понимаю. Но задача сейчас не в этом же. Вы читали, что мне нужно сделать?
kostyanet
26.05.2015, 08:41
Вы не знаете что вам нужно сделать, но как обычно это принято - не признаетесь что не знаете, а цитируете коды, как будто бы знаете и проблема чисто техническая.
Короче, мне вообще по барабану, это ваше дело как вы там не знаете.
laimas, назначение списка - подобрать комплектующие. http://prntscr.com/79hb8h - выбирается значение. И рядом в столбцах должны отобразиться изображение(при клике переходим на товар для подробности) и цена его.
kostyanet, я не говорил, что знаю. Я js не знаю и не скрываю этого.
Вот это для чего?
<?php
foreach ($arr_get as $value) {
$ID = $value['ID'];
$Price = $value['Price'];
$Model = $value['Model'];
$photo = $value['photo'];
echo '<option data-price="'.$Price.'" data-image="'.$photo.'" value="'.$Manufacture.' ">'."$Manufacture"." "."$Model"." '</option>';
}
?>
Кстати, определять переменную $Price = $value['Price']; только ради того, чтобы ее поместить в строку, это просто разводить мусор в коде. И $value['photo'] - это плохо, если это путь.
Не надо мне ссылок, я и без них вижу что у вас не определено главного - что определяет товар. Так что его определяет в базе - уникальный идентификатор или цена, или модель, или еще что либо иное?
Вот как поймете это, придет просветление того, с чем же должен работать как клиентский скрипт, так и серверный.
laimas, для вывода всего списка моделей. Модель определять должна.
kostyanet
26.05.2015, 08:55
Вобщем нормально делается так: заводится отношение n^M - энное число отношений ко многим и вся комплектация по спецификациям в нее загоняется. Адаптеры с переходниками как-то надо приделать еще. Тогда любой выбор в прошлом работает как фильтр для всех остальных в будущем.
Что касается ответа на вопрос как загрузить все и показывать только то, что выбрано - так: в контейнер для рендера опции пихается хтмл сделанный по параметрам опции. Если параметров нет - пихается пусто. Все просто должно быть.
То есть разница лишь в том, что данные уже загружены. Все остальное в точности соответствует схеме загрузки данных по требованию.
kostyanet
26.05.2015, 08:58
Я js не знаю и не скрываю этого.
Да и php судя по гавнокоду на двойку.
kostyanet, может хватит лабуду в постах гнать? Или с корточек встань.
для вывода всего списка моделей. Модель определять должна.
Так чем определяться?!
kostyanet
26.05.2015, 09:08
Кстати, "на подобии" - предлог и пишется слитно и вот так: наподобие - "Тогда **, растопыря ноги наподобие буквы хера и подбочась наподобие ферта, произнёс следующую краткую и выразительную речь." Чуть более сложные предлоги: "в течение" и "в заключение". Запомните чтоб быть грамотнее.
Я скрываю изначально поля, а потом при выборе товара - показываю..
Схему загрузки по требованию по аяксу видели? Сделайте то же самое, только данные берите не с сервера, а с option.
kostyanet, именно. Я ж сказал, что новичок. И про говнокод тоже знаю.
laimas, в смысле, определяться? Если на вывод данных, то по имени селекта. Если я понял правильно
kostyanet
26.05.2015, 09:09
kostyanet, может хватит лабуду в постах гнать? Или с корточек встань.
"Отлезь гнида"
kostyanet
26.05.2015, 09:13
И про говнокод тоже знаю.
Так не бывает. Если вы знаете какой он гавнокод - то не гавните, а сразу пишете нормально.
Что касается js, то js он вообще, а js для браузера со всей тряхомудией загруженной страницы - в частности.
То есть js как скриптовый язык применяется не только в браузерах. Просто через браузеры он стал популярным. В винде вы можете писать скрипты на точно таком же js, только DOM там нет, в ФШ есть DOM и есть js, который оперирует объектами в том самом доме, который никакого отношения к хмтлю само собой.
В этом смысле изучать приходится не js, а ту часть, которая сношается с DOM, то есть фактически DOM.
Ну вот, зная о такой проперти дом-объекта как innerHTML (еще есть outerHTML) вы пользуетесь парсером браузера чтобы превратить кусок _нового_ хтмля - в часть document obkect model. Вы ему текст - вам рендер текста и элементы.
Кстати, "на подобии" - предлог и пишется слитно и вот так: наподобие - "Тогда **, растопыря ноги наподобие буквы хера и подбочась наподобие ферта, произнёс следующую краткую и выразительную речь." Чуть более сложные предлоги: "в течение" и "в заключение". Запомните чтоб быть грамотнее.
Схему загрузки по требованию по аяксу видели? Сделайте то же самое, только данные берите не с сервера, а с option.
К сожалению, не видел.
kostyanet, ты уже достал тут всех своим словесным поносом.
kostyanet, я начал на гавнокоде писать. Потом начну с нуля смотреть PDO по учебникам.
laimas, в смысле, определяться? Если на вывод данных, то по имени селекта. Если я понял правильно
Список на странице, это всего лишь элемент для выбора. Но он что пассивен для сервера или же как принадлежащий форме будет отправлен на сервер? А если будет отправлен, то сервер получит выбранное в нем значение. А у вас значения опций списка, это $Manufacture, но не ID. Так как же поймет сервер при получении формы что выбрано? Поэтому еще раз вопрос - что определят товар в вашей базе, какое поле?
laimas, скорее всего ID должен определять товар. Я передавал $Manufacture и $Model для того, чтобы записать в другую таблицу. Затем сделаю распечатку чека на выбранные комплектующие. Если я передам ID, то получу в поле только ID, но как записать вместо этого айди соответствующий товар с ID, который находится в таблице с товарами(например, процессоров).
У меня сборка для комплектации находится в другой таблице. Там поля типа процессор, кулер и т.д. Вот я и хочу записать значение всех селектов в столбцы
kostyanet
26.05.2015, 09:32
что определят товар
Узость мышления детектед. Без всяких ключей можно получить нужный кортеж имея все необходимые параметры на входе.
Профтыкать в равенство where все пары какие имеются и получишь ту самую единственную строку.
Для расширения мышления: работа через id всего лишь вариант оптимизации и повышения эффективности. Для отождествления записи в таблице никакие ID нахер не нужны. Без них все отождестволяется нормально как и предусмотрено идеей SQL.
kostyanet
26.05.2015, 09:36
Если я передам ID, то получу в поле только ID, но как записать вместо этого айди соответствующий товар с ID, который находится в таблице с товарами(например, процессоров).
Еще один забрел не на тот форум. Вам на sql.ru сперва, а потом уже ява-скрипты...
kostyanet, возможно. Ещё надо учиться, учиться, учиться. Да, у меня ужасный, отвратительный, гнилой и т.п. код, но для меня задача остается актуальной. Картинки, цена выбранного товара я получаю. Остается скрывать ИЗНАЧАЛЬНО цену и картинку до тех пор, пока не будет выбран товар в селекте.
kostyanet
26.05.2015, 09:44
Вы не собираетесь учиться, вам надо домучить свою бредятину чтобы она завтра работала, а что будет послезавтра - о том думать нация не велит. А послезавтра у вас будет не 6 id в дата-тегах, а 66, а после-после-завтра 666 и так далее. Единственная надежда что завтра и тем более послезавтра не наступят никогда и только день сурка ваша надежда.
скорее всего ID должен определять товар.
Не скорее всего, а именно ОН! А значит список должен формироваться таким:
<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. И пробелы лишние ни к чему.
Узость мышления детектед. Без всяких ключей можно получить нужный кортеж имея все необходимые параметры на входе.
Кыш из под ног, а то на хвост еще наступлю, будешь на таблетки работать. Бабушку свою учи несмышленыш. Несешь понос и даже не понимаешь сам, что это бред.
kostyanet
26.05.2015, 09:57
Идея SQL заключается в хранении данных без номеров строк и смещений - в отношениях, которые имеют именованные параметры типа имя-значение. То есть хранится все х знает как, а выбирается то, что нужно и в том виде и в том порядке, которые определены в сценарии запроса. Применение числовых идентификаторов не более чем, идентификатором может быть любое отношение если его значение уникально для таблицы. Достаточно сделать unique key на поле скажем prod_name и prod_name может служить идентификатором, поскольку драйвер вам не даст завести 2 одинаковых имени продукта.
Однако что такое одинаковое имя для компа и для человека? Например для человека это одно и то же
RF(GL) 6532091
RF (GL) 6532091
а для компа - два разных имени. Для защиты от бескультурья, для повышения эффективности запросов, для экономии ресурсов, унификации, оптимизации и тп - вместо каких угодно идентификаторов применяют - числа. Только поэтому, а не потому что без чисел нельзя обойтись. Запросто можно, сущность SQL в том и состоит что можно.
laimas, отдельное спасибо за демонстрацию примера, с помощью которого не надо было создавать мне $ID = $value['ID'] и т.д.
Но как теперь скрывать ИЗНАЧАЛЬНО цену и картинку до тех пор, пока не будет выбран товар в селекте.
kostyanet, если в базе определен первичный ключ, который уже уникален, то зачем использовать иное? И данный пост совсем не посвящен тому как можно в SQL задать индексы и их использовать? Ну а что такое число и что такое строка, в чем их разница и почему число лучше, это разводи полемику где либо в другом месте. Ну что лабуду то гнать?
Но как теперь скрывать ИЗНАЧАЛЬНО цену и картинку до тех пор, пока не будет выбран товар в селекте.
Не выводить их на страницу, а помещать в ячейки таблицы при выборе в списке. Как впрочем и производить расчет суммы за выбранное.
kostyanet
26.05.2015, 10:08
Так вот, достаточно однозначно отождествить кортеж и все его данные будут немедленно доступны.
Если, допустим идентификатором служит уникальное число, то получив это число мы получим все остальные отношения какие только могут быть.
Нет никакого смысла повсюду сопровождать уникальное отношение - кучей других отношений того же кортежа, потому что по уникальному мы в любой момент получаем какие угодно кортежи.
Ну блин что там изобретать. Что сохраняется в куках когда юзер нажимает заказать? - количество. Количество дает юзер. Минимум 1 штука. Это ввод юзера, мы его сохраняем и приделываем индентификатор - количество чего. Все, больше там ничего не надо в минимуме. Еще можно сохранить дату или цену - типа сделать снимок цены, но поскольку куки легко подделать, оно не имеет значения. Для правовых вопросов заказ должен быть сделан после регистрации которая подразумевает согласие с условиями предоставления услуг и забирает персональные данные.
Тогда как мы покажем всю тряхомудию о заказанном товаре? Блин, ну а как мы ее показываем на продуктовой странице по единственному идентификатору? Все то же самое.
kostyanet
26.05.2015, 10:14
если в базе определен первичный ключ,
Да потому вы конопатите читателям мозг. Ничего там не определяется в скуль таблице, никакие товары. Нет такой терминологии вообще.
Ваши фантазии работают только там, где ЗАРАНЕЕ определены ограничители. Например заведено отношение значение которого сам драйвер меняет при создании записи. Если таких ограничителе нет - ваши опредения по определению ничего не определяют.
То есть рассказывая небылицы про SQL вы низводите эту сказку до были массивов. Типа бд это такой массив, где всегда есть за что зацепиться. Х нанэ. Пока сам не сделаешь зарубки - не за что. Таков принцип.
kostyanet
26.05.2015, 10:17
не надо было создавать мне $ID = $value['ID']
Можете сэкономить на букафках раскидав строку по переменным
extract($row);
/*
теперь все ваши id-шмады существуют как переменные
*/
echo $id; /* вывели то, что было в $row['id'] */
Не выводить их на страницу, а помещать в ячейки таблицы при выборе в списке. Как впрочем и производить расчет суммы за выбранное.
Вот с этим у меня и проблемы. Для этого надо JS:(
kostyanet, спасибо. Будем знать!
kostyanet
26.05.2015, 10:23
Но как теперь скрывать ИЗНАЧАЛЬНО цену и картинку до тех пор, пока не будет выбран товар в селекте.
Тогда это будет интерфейс произвольного доступа. Изначально все и так скрыто, в css. Открывается по щелчку. А чтобы закрыть что было откртыто надо либо пробежаться в цикле по всему что открыто и закрыть перед тем как открыть щелкнутое; либо завести контрольную переменную в которой будет хранится ссылка на последнюю открытую.
Геморрой, короче, бесполезный.
kostyanet
26.05.2015, 10:26
Вот с этим у меня и проблемы. Для этого надо JS
Это не js, еще раз. Это - DOM. Надо знать что заселектить и куда сунуть в какой элемент модели документа, в какой конкретно div скажем или в table.
Вы что в трех соснах-то бродите. Это ж элементарная задача сейчас. Ну а как по вашему загружаются данные с сервера на том самом сайте? Как они появляются там, где надо?
Нет, ну был бы какой-то ценный рендер, из фрейморка замороченного какого-нибудь, в смысле что приходится за него цепляться. Но там же очевидно вы сами все придумали. Выкиньте этот нелепый хлам и сделайте нормально как люди делают для людей.
kostyanet
26.05.2015, 10:30
Ладно, пусть мучается, это у нас национальное.
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+ селекта", что за селекты, что куда складываются....
Как обратно скрыть картинку и цену, если выбирается значение "Выбрать"
Я не знаю что означает "складывается 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
26.05.2015, 13:19
В столбец Processor будут записываться данные вида : Тесттест, 200руб.
Я поцтулам. :-D В ява-скрипте оне не понимают.
kostyanet, так я хотел запросом записать в столбец. Используя Insert, а перечислять параметры через запятую.
Иначе не знаю(
kostyanet
26.05.2015, 13:27
Вот как делается
{"123":{"q":1,"p":37070},"126":{"q":1,"p":30600},"186":{"q":4,"p":6920}}
это записывается в куку юзера. p это - price - чисто ритуальная фича, на случай если юзер заказал в пнд, а во вт ценник поменялся, а он начал оформлять, тогда ему скажут - чувак, с тех пор ценник поменялся, продолжать по новой цене или как?
q - quantity - количество. А без названия - тот самый id, который и в json - id.
В бд заказ записывается только после оформления. Можно записать нормально, но кому оно надо - пишется как есть, тот самый json, поскольку под него уже есть интерфейс просмотра-редактирования, который и с заднего входа заюзан для этого поля. То есть оператор видит заказ точно так же, как видел его заказчик. Это важно, потому что глюки разных интерфейсов могут вызвать неоднозначность в финансовых вопросах. Когда код один на всех - то и возможные глюки у всех одинаковые.
kostyanet
26.05.2015, 13:29
так я хотел запросом записать в столбец.
Блеа, это не екзель, тут не надо копипастить данные как в дебильном екзеле.
Как же вы приложения пишите, если вообще не имеете представления о том, что же возвращает серверу форма?
Если опции этих списков, и пусть условно с именами 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). Так нужно.
kostyanet
26.05.2015, 13:41
Короче, харе тупить. Как пишутся телеги известно давным давно. Реализации могут быть разные, зеленые и красные, а принцип одинаков - в телеге сохраняется только выбор юзера, то есть данные которые он сам генерит своими действиями. Выбрал товар - это 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
26.05.2015, 13:53
А это(с селектами) я делаю аля нажал на "оформить"
Я года два назад покупал у китаезов кое-какие вещи и с тех пор время от времени получаю мессаги типа "снижена цена на товары в вашем списке желаний". Это значит wish list сохранен с той ценой, которая была актуальна в момент добавления товара. То есть ценник можно сохранять как snapshoot, для применения в различных ситуевинах. Но не как цену товара по которой он сейчас продается. Актуальная цена всегда берется из выставленного счета, а счет выставляется или человеком в офисе, или на сайте из данных в таблице.
kostyanet, cпасибо за разъяснение! Надо посмотреть на БД магазинов. Особенно с категориями (видеокарты, процессоры). Ведь у каждого товара в категории свои свойства: графическая частота у видеокарты, а у процессора нету вообще(как пример).
Потому что у меня такие таблицы: http://prntscr.com/79jgxf это для кулеров.
Не правильно же созданны?
"Актуальная цена всегда берется из выставленного счета, а счет выставляется или человеком в офисе, или на сайте из данных в таблице"
Верно. У меня админ меняет цену. Только так.
kostyanet
26.05.2015, 13:57
Дальнейшее усложнение телеги вовлекает бухгалтерские сущности. В теории можно вести заказ по дате, но на практике делается еще одна таблица, в которую валятся сведения о самом заказе: оформили, отгрузили, сколько, чего, фактический адрес получателя, как платил, когда получил, когда отменил, когда закрыл и все такое. Это уже для магазов которые реально продают через сеть, выдают треки и в таком роде. Вашему все равно не светит.
kostyanet
26.05.2015, 13:58
Надо посмотреть на БД магазинов.
Умора мля...
Дальнейшее усложнение телеги вовлекает бухгалтерские сущности. В теории можно вести заказ по дате, но на практике делается еще одна таблица, в которую валятся сведения о самом заказе: оформили, отгрузили, сколько, чего, фактический адрес получателя, как платил, когда получил, когда отменил, когда закрыл и все такое. Это уже для магазов которые реально продают через сеть, выдают треки и в таком роде. Вашему все равно не светит.
Я делаю для локального пользования. Минимально функций!
kostyanet
26.05.2015, 14:06
По интерфейсу никогда не понять как устроена бд. Ну вообще. Ну то есть можно только теории строить и предполагать. Что касается продажи разнородных товаров как комплектующих одного сложного товара - это для всех геморрой и называется он bill of material.
Самое нормальное - под каждую категорию заводится своя собственная таблица, со всеми своими отношениями, то есть полями имя-значение и интерфейс усложняется, поскольку для каждой таблицы нужна своя модель, свой рендер, свои фильтры, свои всякие опции-шмопции.
Зато в такой системе все быстро ищется и фильтруется и отождествляется.
Есть универсальный, типа, подход - хранить отношения не в кортеже, а во множестве отдельных типированных кортежей. Оно дает типа универсальный интерфейс, ну более менее, но взамен получаем геморрой с выборкой, фильтрацией и всем остальным скульным.
Выбирайте. Впрочем, вы все равно ничего не поняли, ибо решили что ява-скриптами все делается. Да нихера ими не делается такое.
kostyanet
26.05.2015, 14:09
Я делаю для локального пользования. Минимально функций!
С какого хера вы данные-то берете? Вам дали нормализованную базу по наименованиям или откуда вообще берутся товары чтоб их можно было заказать?
Варианты ответа: не дали. Значит сперва вы должны ее сами сделать, или сказать сначала дайте БД, потом я к ней напишу клиента. Вариант: дали - значит там все уже есть и надо только написать клиента. В чем проблема? Какие-то дебильные картинки скрывать? Вообще бред какой-то. Никто так не делает,
kostyanet
26.05.2015, 14:17
Все это написано не вам лично, а таким как вы профанам, которые лелеют надежду на скрипты, будто бы скриптами все можно починить автомобили или компы и заработать на халяву. Хера-то. Никогда вы ничего не сделает путного, так что сдавайтесь профессионалам и платите им деньги. Так и передайте своему начальству или самому себе.
kostyanet, ну принцип таков, что сидит паренек в магазинчике, к нему приходит клиент и говорит о своем заказе. Паренек собирает комплектующие и дает расчетный лист клиенту. Вуаля. (это типа селектов)
А, если клиенту надо 1 вещь какая-то, то паренек ходит по деталям компьютера и приобретает их. Затем всё вносится в корзину и также печатается расчетный лист. Как бы вот так.
Это же масштабный проектище, где надо учитывать всё, не будет в онлайне.
kostyanet
26.05.2015, 15:17
Я же говорю неоперабельно. Сидит какой-то паренек, он не низок не высок, ну, посадили и сидит. Приходит клиент, говорит вот у меня такой заказ. Паренек пихает заказ в принтер - выдает бумажку. Услуга оказана. При чем тут сайты и бд какие-то... хз.
Ну то есть люди невменяемые берутся за дело, которое не всем вменяемым под силу. Знаете почему? Потому что они не знают абсолютно ничего из того, что нужно знать и поэтому им все кажется легко. Понимание, то есть осознание факта что нихера не будет работать конечно придет.
собирает комплектующие
С полок что ли? Или у паренька есть хоть какой-тое екзель-шмокзель?
Судя по показаниям это дропшиппинг. Геморное до ужаса дело, поскольку собственная бд сразу и по определению будет состоять из гавна. То есть из голимых ссылок на кучу сайтов.
kostyanet, со склада :) А на складе - комплектующие. А комплектующие дал поставщик. А поставщик собирает/покупает у других. А те ещё что-то делают
kostyanet
26.05.2015, 15:30
У меня гипотеза что автор - женщина. Только женщина на 5 одинаковых вопросов где ваша база данных даст 5 разных ответов про паренька, про сидит, про клиента, про поставщика и про склад.
где ваша база данных
в phpMyadmin :D :D :yes:
kostyanet
26.05.2015, 15:50
Стопудова - баба.
У меня гипотеза что автор - женщина. Только женщина на 5 одинаковых вопросов где ваша база данных даст 5 разных ответов про паренька, про сидит, про клиента, про поставщика и про склад.
Стопудова - баба.
Молодой человек, успокойтесь! В принципе, вопрос решён)
Покажите ваши проекты, а то много знаете видимо
kostyanet
26.05.2015, 16:37
Покажите ваши проекты
Вид сбоку?
Когда речь аргументом становится требование показать что-то, то значит оппонент проявил себя человеком морально опустившимся.
Вид сбоку?
Когда речь аргументом становится требование показать что-то, то значит оппонент проявил себя человеком морально опустившимся.
Да нет. Просто оценить хочется и только. Интересно
kostyanet
26.05.2015, 17:15
Вы не можете ничего такого оценивать, поскольку ровным счетом ничего в этом не понимаете.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot