Да, в этой теме вы laimas показали свою интеллигентскую сущность. Интеллигент это человек небельмеса в вопросе, но начитавшийся предисловий и умеющий заковыристо повторять за собеседником то же самое, другими словами и более развернуто, с цитатами, с глубокими мыслями. Создавая впечатление профессионала и одновременно никак не информируя визави, интеллигент добивается вечной зависимости собеседника от своих пустых речей. Человек никогда не поумнеет общаясь с интеллигентом и самостоятельно ничего не сделает, просто потому что не научился ничему в этом общении. Самое злое что и вместе с интеллигентом он ничего не сделает, ибо интеллигент вовсе не специалист, который так же ставит в зависимость от себя людей, но специалист хотя бы за них все и делает. И - никогда ничего не делает, а только молотит о высшем.
|
kostyanet, попробовал разобраться в вашем коде с тремя таблицами, со списком, в принципе вышло. А в корзину попадает товар по старому, Array ( [2] => 3 [3] => 1 ) . Идёт перезапись старого размера новым. Карточка товара пока всё равно выводится таким образом:
<table align="center" style="border-width: 1; border-style: dashed" class="product" width="200" height="200"> <tr> <td valign="top" align="center" cellpadding="5" cellspacing="5"> <div><a href="#"><img src="userfiles/<?=$product['image']?>" width="150" height="100" alt="" /></a></div> <div class="description"> <div class="product-name"><a href="#"><?=$product['title']?></a></div> <div class="product-price">Цена: <?=$product['price']?> руб</div> </div> </td> <td valign="top"> <div><?=$product['description']?></a></div> <form action="index.php" method="get"> <fieldset> Размер: <input type="hidden" name="view" value="add_to_cart"> <input type="hidden" name="id" value="<?=$product['id']?>"> <select name="size"> <?php $result = $link->query("select `p`.`title`, `s`.`size` from `relations` as `r` left join `products` as `p` on `p`.`id`=`r`.`products_id` left join `sizes` as `s` on `s`.`id`=`r`.`size_id` where `r`.`products_id`='$id' "); while ($b = mysqli_fetch_assoc($result)) { echo "<option value='".$b['size']."'>" .$b['size']. " </option>"; } ?> </select></fieldset> <input type=image src="userfiles/8.jpg" width="60" height="60" value="Добавить в корзину"> </form> </td> </tr> </table> И размеры попадают в корзину через сессию: case('add_to_cart'): $id = $_GET['id']; $size = $_GET['size']; $_SESSION['cart_size'][$id] = $size; $add_item = add_to_cart($id); $_SESSION['total_items'] = total_items($_SESSION['cart']); $_SESSION['total_price'] = total_price($_SESSION['cart']); header('Location:index.php?view=product&id='.$id); break; laimas объяснял, что нужно заносить в массив эти данные, но пока на практике получился "ноль"... Так и не допёр, что за $escaped_quoted_path, точнее зачем это нужно и как выоводить - select * from model where path = $escaped_quoted_path;? И то же самое с $res['id'] в prods.model_id = $res['id']..... |
kostyanet
Моя практика говорит о том, что под тот базис, что есть у автора, много чего ты ту вещал, это выстрелы в холостую. Послушаешь таких речей, так надо писать учебники начиная с ООП, причем не поясняя вообще что это и что дает, и заканчивая приоритетами операторов. Не понимаешь ты этого, просто заносит тебя в понос, пальцы растопырил и .... Было бы все так просто, были бы все гениями. А что я могу, какая практика, это не суть важного, пост не моей личности посвящен, не моим проблемам, и базарить об этом, в чужих темах, это спам и неуважение к остальным. |
Полвечера сражаюсь с кодировкой "utf8mb4_general_ci". Нашёл подсказку на англоязычном сайте, пришлось немного поменять код в файле "DatabaseInterface.class.php". Теперь хоть ошибки на английском....
|
Цитата:
Вот вся сущность поста: case('add_to_cart'): $id = $_GET['id']; $size = $_GET['size']; $_SESSION['cart_size'][$id] = $size; $add_item = add_to_cart($id); $_SESSION['total_items'] = total_items($_SESSION['cart']); $_SESSION['total_price'] = total_price($_SESSION['cart']); header('Location:index.php?view=product&id='.$id); break; Толку трещать о высоких материях, если пока простых вещей не знаем. Надоели вы, горе "учителя" до нельзя. arhat78, Простой вопрос - есть массив А, есть массив В, как можно, ну или правильнее какими средствами можно элементы/значения массива В добавить в массив А? |
laimas, вот это простое сложение двух массивов: $result = $arrayА + $arrayВ; есть ещё функция array_merge;
Но у меня есть ещё (может и лишние функции вычисления total_items, total_price): function total_items($cart) { $num_items = 0; if(is_array($cart)) { foreach($cart as $id => $qty) { $num_items += $qty; } return $num_items; } } function total_price($cart) { $total_price = '0.00'; global $link; if(is_array($cart)) { foreach($cart as $id => $qty) { $result = $link->query("SELECT price FROM products WHERE id='$id' "); if($result) { $item_price = mysqli_fetch_assoc($result); $total_price += $item_price['price'] * $qty; } } return $total_price; } } ?> И add_to_cart (уже показывал эту бедную на функционал функцию): function add_to_cart($id, $size) { if(isset($_SESSION['cart'][$id])) { $_SESSION['cart'][$id]++; return true; } else { $_SESSION['cart'][$id] = 1; return true; } return false; } |
Цитата:
Но есть одна интересная деталь в поведении массивов при $arrayА + $arrayВ и array_merge(). Если ключи массива цифровые (индексный массив), то в первом случае ключи массива А, которые имеются и в массиве В будут перезаписаны его значениями, а при использовании array_merge() нет. И эту особенность ведь тоже можно использовать. А в случае строковых ключей в обоих случаях результат будет одинаков. А есть еще функции пересечения/расхождения массивов, а так же замены array_replace и array_replace_recursive. В общем набор большой, и общелкать какой-то массив проблем нет. Проблема ваша в другом - в корзину попадает товар по старому, Array ( [2] => 3 [3] => 1 ) А по по новому тогда как? Я вам задавал вопросы и не раз - как планируется торговать, как будут набираться товары, поштучно или же можно набирать количество (это по мимо размеров)... Не на один вопрос я ответа не видел. А ведь с того надо начинать. И чтобы не переписывать код обслуживающий корзину, взаимодействия клиент-сервер нужна такая структура таблицы, которая бы позволяла добавлять в нее элементы описывающие какие-то доп. характеристики товара, но код при этом нужно будет не переписывать. Все что я писал, это лишь примеры. Я мог бы и так написать - сервер получает от клиента такой массив описывающий выбор - Array(125, 42, 41). Можно и так, но это уже совсем иное, и иные правила торговли ботинками. Не надо просто копировать, не научитесь вы так ничему. Тогда уж не учится, а плюнуть на все это, у хотстера оплатить услугу "конструктор магазина", сконструировали и торгуем ботинками. Просто и голова не болит. :) |
Так я же не просто "копирую". За год я понимаю практически весь код, который написан. А вот новые подходы, которые вы показываете-подсказываете - пока тяжело даются. Я давал ссылку на магазин - там вроде как понятно, как выбирается ботинок и размеры к нему. И я не для коммерческих целей этим занимаюсь. Примерно год назад решил попробовать, что это такое за РНР и получится ли. Заинтересовало. Я этим занимаюсь в свободное от работы время, и чисто для себя.
|
Да, я помню об этой ссылке, да, был там. Но ведь вопрос возник какой - как быть, если размеров не один а несколько? И тут началось....
Не надо копировать, это примеры и их надо разбирать, я же не пишу их под конкретный ваш скрипт. Забросьте на время этот магазин, и сделайте проще - одну страницу, в которой и РНР код и html. Базу товаров на этой странице имитируйте обычным массивом - первичные ключи его, это ID товаров, а массивы под ними, это размеры и цена товара. Думаю не сложно такой массив вывести как списки в форме в котором можно выбрать эти размеры. РНР код также принимает форму, записывает полученное в сессию как корзину, и результаты работы над массивами выводит на экран, что позволяет и проследить, и понять "а так ли работает, как я хочу". Этого то ведь будет достаточно чтобы усвоить наконец-то инструменты РНР работы с массивами или нет? Думаю, что да. Когда будете использовать этот "учебный" скрипт задайтесь вопросом - будет ли удобно, если выбор одного размера одного товара, это отправка формы и $_SESSION['cart_size'][$id]++ или же нет, и вообще почему $_SESSION['cart_size'] это вообще нечто отдельное, а не как часть корзины и определяющая характеристики товара выбранного покупателем. Если действительно думать, то обязательно придет понимание того, что выбор товара по одному еще может быть в случае отправки параметров выбора Ajax, а в случае отправки формы непосредственно, это крайне неудобно для покупателя. Вот тут и должно прийти понимание формата данных которые должен принимать сервер от покупателя. Думаю, что должно прийти, если задумываться. Больше я не знаю что еще сказать, ведь об одном и том же уже какой раз говорится. |
Часовой пояс GMT +3, время: 06:31. |