01.06.2015, 13:12
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Да, в этой теме вы laimas показали свою интеллигентскую сущность. Интеллигент это человек небельмеса в вопросе, но начитавшийся предисловий и умеющий заковыристо повторять за собеседником то же самое, другими словами и более развернуто, с цитатами, с глубокими мыслями. Создавая впечатление профессионала и одновременно никак не информируя визави, интеллигент добивается вечной зависимости собеседника от своих пустых речей. Человек никогда не поумнеет общаясь с интеллигентом и самостоятельно ничего не сделает, просто потому что не научился ничему в этом общении. Самое злое что и вместе с интеллигентом он ничего не сделает, ибо интеллигент вовсе не специалист, который так же ставит в зависимость от себя людей, но специалист хотя бы за них все и делает. И - никогда ничего не делает, а только молотит о высшем.
|
|
01.06.2015, 13:13
|
Аспирант
|
|
Регистрация: 06.04.2015
Сообщений: 52
|
|
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']
.....
Последний раз редактировалось arhat78, 01.06.2015 в 17:35.
|
|
01.06.2015, 16:28
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
kostyanet
Моя практика говорит о том, что под тот базис, что есть у автора, много чего ты ту вещал, это выстрелы в холостую. Послушаешь таких речей, так надо писать учебники начиная с ООП, причем не поясняя вообще что это и что дает, и заканчивая приоритетами операторов.
Не понимаешь ты этого, просто заносит тебя в понос, пальцы растопырил и .... Было бы все так просто, были бы все гениями.
А что я могу, какая практика, это не суть важного, пост не моей личности посвящен, не моим проблемам, и базарить об этом, в чужих темах, это спам и неуважение к остальным.
|
|
01.06.2015, 19:37
|
Аспирант
|
|
Регистрация: 06.04.2015
Сообщений: 52
|
|
Полвечера сражаюсь с кодировкой "utf8mb4_general_ci". Нашёл подсказку на англоязычном сайте, пришлось немного поменять код в файле "DatabaseInterface.class.php". Теперь хоть ошибки на английском....
|
|
01.06.2015, 19:54
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от kostyanet
|
Создавая впечатление профессионала и одновременно никак не информируя визави
|
Слов нет. Выше плоды твоего пояснения. А может надо было проще 2 + 2 = 4, а уже потом 2 * 2 = 4?
Вот вся сущность поста:
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,
Простой вопрос - есть массив А, есть массив В, как можно, ну или правильнее какими средствами можно элементы/значения массива В добавить в массив А?
|
|
02.06.2015, 08:58
|
Аспирант
|
|
Регистрация: 06.04.2015
Сообщений: 52
|
|
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;
}
|
|
02.06.2015, 09:55
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от arhat78
|
$result = $arrayА + $arrayВ; есть ещё функция array_merge;
|
Правильно, а еще есть циклы while, for, foreach. array_merge, это тоже обход циклом, явно просто мы в этом случае его не пишем.
Но есть одна интересная деталь в поведении массивов при $arrayА + $arrayВ и array_merge(). Если ключи массива цифровые (индексный массив), то в первом случае ключи массива А, которые имеются и в массиве В будут перезаписаны его значениями, а при использовании array_merge() нет. И эту особенность ведь тоже можно использовать. А в случае строковых ключей в обоих случаях результат будет одинаков. А есть еще функции пересечения/расхождения массивов, а так же замены array_replace и array_replace_recursive.
В общем набор большой, и общелкать какой-то массив проблем нет. Проблема ваша в другом - в корзину попадает товар по старому, Array ( [2] => 3 [3] => 1 )
А по по новому тогда как? Я вам задавал вопросы и не раз - как планируется торговать, как будут набираться товары, поштучно или же можно набирать количество (это по мимо размеров)... Не на один вопрос я ответа не видел. А ведь с того надо начинать. И чтобы не переписывать код обслуживающий корзину, взаимодействия клиент-сервер нужна такая структура таблицы, которая бы позволяла добавлять в нее элементы описывающие какие-то доп. характеристики товара, но код при этом нужно будет не переписывать.
Все что я писал, это лишь примеры. Я мог бы и так написать - сервер получает от клиента такой массив описывающий выбор - Array(125, 42, 41). Можно и так, но это уже совсем иное, и иные правила торговли ботинками. Не надо просто копировать, не научитесь вы так ничему. Тогда уж не учится, а плюнуть на все это, у хотстера оплатить услугу "конструктор магазина", сконструировали и торгуем ботинками. Просто и голова не болит.
|
|
02.06.2015, 10:01
|
Аспирант
|
|
Регистрация: 06.04.2015
Сообщений: 52
|
|
Так я же не просто "копирую". За год я понимаю практически весь код, который написан. А вот новые подходы, которые вы показываете-подсказываете - пока тяжело даются. Я давал ссылку на магазин - там вроде как понятно, как выбирается ботинок и размеры к нему. И я не для коммерческих целей этим занимаюсь. Примерно год назад решил попробовать, что это такое за РНР и получится ли. Заинтересовало. Я этим занимаюсь в свободное от работы время, и чисто для себя.
Последний раз редактировалось arhat78, 03.06.2015 в 19:41.
|
|
02.06.2015, 11:13
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Да, я помню об этой ссылке, да, был там. Но ведь вопрос возник какой - как быть, если размеров не один а несколько? И тут началось....
Не надо копировать, это примеры и их надо разбирать, я же не пишу их под конкретный ваш скрипт. Забросьте на время этот магазин, и сделайте проще - одну страницу, в которой и РНР код и html. Базу товаров на этой странице имитируйте обычным массивом - первичные ключи его, это ID товаров, а массивы под ними, это размеры и цена товара.
Думаю не сложно такой массив вывести как списки в форме в котором можно выбрать эти размеры. РНР код также принимает форму, записывает полученное в сессию как корзину, и результаты работы над массивами выводит на экран, что позволяет и проследить, и понять "а так ли работает, как я хочу".
Этого то ведь будет достаточно чтобы усвоить наконец-то инструменты РНР работы с массивами или нет? Думаю, что да.
Когда будете использовать этот "учебный" скрипт задайтесь вопросом - будет ли удобно, если выбор одного размера одного товара, это отправка формы и $_SESSION['cart_size'][$id]++ или же нет, и вообще почему $_SESSION['cart_size'] это вообще нечто отдельное, а не как часть корзины и определяющая характеристики товара выбранного покупателем.
Если действительно думать, то обязательно придет понимание того, что выбор товара по одному еще может быть в случае отправки параметров выбора Ajax, а в случае отправки формы непосредственно, это крайне неудобно для покупателя. Вот тут и должно прийти понимание формата данных которые должен принимать сервер от покупателя. Думаю, что должно прийти, если задумываться.
Больше я не знаю что еще сказать, ведь об одном и том же уже какой раз говорится.
|
|
|
|