Кол-во одного наименования товара в корзине и сумма

Godman

Новичок
Кол-во одного наименования товара в корзине и сумма

Здравствуйте
Написал я простой интернет-магазин, если не учитывать одно но.
Проблема возникла с указанием кол-ва одного наименования товара. Скрипт корзины не пишу, ибо реализовать подсчет о бычной форме не получается.
Собственно говоря проблема в input в указании name и value
В форме ниже вводим необход. кол-во нажимаем "пересчитать" и выводится сумма одного наименования, но при этом значение value сбрасывается до 1, как этого избежать, чтобы вводимое значение оставалось?
<?php
if(!empty($_POST))
{
$_POST['tov'][1]=234; // цена товара
$_POST['tov'][1]*=$_POST['kol'][1];
$_POST['tov'][2]=124;
$_POST['tov'][2]*=$_POST['kol'][2];
$_POST['sum']=$_POST['tov'][1]+$_POST['tov'][2];
}
?>
<html>
<body>
<form action="" method="post">
Укажите кол-во<input type="text" name="kol[1]" value="1">Цена: <?=$_POST['tov'][1]?><br>
Укажите кол-во<input type="text" name="kol[2]" value="1">Цена: <?=$_POST['tov'][2]?><br>
<input type="submit" name="submit" value="Пересчитать">
</form>
На общую сумму <?=$_POST['sum']; ?>
</body>
</html>
 

faost

Новичок
По умолчанию ставить 1, если пользователь уже "перисчитывал" - выводить указанное им количество товара, которое хранится в массиве $_POST['kol']
 

Godman

Новичок
Автор оригинала: faost
По умолчанию ставить 1, если пользователь уже "перисчитывал" - выводить указанное им количество товара, которое хранится в массиве $_POST['kol']
Как это должно работать поняно, непонятно как одновременно ставить по умолчанию 1 и в тоже время выводить указанное кол-во товара, т.е. value="1" и в тоже время value="<?=$_ POST['kol'][1]?>"
Если есть возможость <input type="text" name="что ставить" value="что ставить"> ?

-~{}~ 17.08.06 22:18:

Автор оригинала: Фанат
только не $_POST['kol'], а $_SESSION['cart'][2]
Не понял, value="чему равно" ?
 

Фанат

oncle terrible
Команда форума
непонятно как одновременно ставить по умолчанию 1 и в тоже время выводить указанное кол-во товара, т.е. value="1" и в тоже время value="<?=$_ POST['kol'][1]?>"
зачем одновременно?
выводи что-то одно
Не понял, value="чему равно" ?
количеству из корзины
корзина ведь у тебя на сессиях?
 

faost

Новичок
Автор оригинала: Godman
Как это должно работать поняно, непонятно как одновременно ставить по умолчанию 1 и в тоже время выводить указанное кол-во товара, т.е. value="1" и в тоже время value="<?=$_ POST['kol'][1]?>"
Если есть возможость <input type="text" name="что ставить" value="что ставить"> ?
В отдельную переменную записывать едииницу (если пользователь еще не "пересчитывал") или $_POST['kol'][1] (если пользователь "пересчитал"), и затем уже к value присваивать значение этой переменной
 

Godman

Новичок
Автор оригинала: faost
В отдельную переменную записывать едииницу (если пользователь еще не "пересчитывал") или $_POST['kol'][1] (если пользователь "пересчитал"), и затем уже к value присваивать значение этой переменной
С кол-вом товара разобрался, проблематично все это вставить в скрипт.
Товары я вывожу в цикле, там же и ссылки для удаления товаров формируются и общая сумма, поле input для указания кол-ва товара тоже планирую вставить в цикл(каждому товару свое поле), проблема в том как сослаться на каждое поле ввода и подсчитывать сумму одного наименования товара ?
$_POST['tovar'][1]="мыло"; //наименование
$_POST['cent'][1]=35; //цена

$_POST['tovar'][1]="мочалка";
$_POST['cent'][1]=180;

$_SESSION['sum']=0;// начальная общая сумма равна нулю
foreach($_SESSION['cek'] as $val) //по индексу зарегистрированных переменных вывожу товары
{
echo "<a href='get.php?del=$val'>удалить</a> Товар: ".$_POST['tovar'][$val]." || цена: ".$_POST['cent'][$val]."<br>";
$_SESSION['tov'][$val]=$_POST['tovar'][$val]."-".$_POST['cent'][$val];
$_SESSION['sum']=$_SESSION['sum']+$_POST['cent'][$val];
}
 

Анатолий

Новичок
Автор оригинала: Godman
С кол-вом товара разобрался, проблематично все это вставить в скрипт.
Товары я вывожу в цикле, там же и ссылки для удаления товаров формируются и общая сумма, поле input для указания кол-ва товара тоже планирую вставить в цикл(каждому товару свое поле), проблема в том как сослаться на каждое поле ввода и подсчитывать сумму одного наименования товара ?
$_POST['tovar'][1]="мыло"; //наименование
$_POST['cent'][1]=35; //цена

$_POST['tovar'][1]="мочалка";
$_POST['cent'][1]=180;
А тебе не кажется, что после выполнения этого кода в корзине окажется ТОЛЬКО "мочалка"???
И вообще тебе уже Фанат подсказывал структуру корзины, попробуй так:
PHP:
$_SESSION['cart'][goods_id] = array('title' => 'Мыло', 'price' => 35, 'count' => 1);
// А итоговую суммы не нужно хранить в сесии. Ее несложно и не долго подсчитать:
$cart_total = 0;
$cart_count = 0;
if (isset($_SESSION['cart'])) {
	foreach ($_SESSION['cart'] as $goods) {
		$cart_total += $goods['count']*$goods['price']; // Общая сумма
		$cart_count += $goods['count']; //Общее кол-во
	}
}
 

Фанат

oncle terrible
Команда форума
Анатолий
я не такую структуру подсказывал.
поскольку не понимаю, зачем в корзине хранить наименование и цену товара.
считаю, что вполне достаточно одномерного массива айди - цена
 

Анатолий

Новичок
Фанат
Я же не говорю, что ты такую подсказывал. Я сказал, что ты предложил нормальную структуру, а потом предложил человеку свою.

По моему, хранение наименования и цены в корзине, позволяет сэкономить на зыпросах к БД.
 

Фанат

oncle terrible
Команда форума
потому что при написании прорамм надо руководствоваться здравым смыслом, а не соображениями экономии.
 

Анатолий

Новичок
Фанат
По-моему, здравый смысл в том, чтоб добавить некую "избыточность" (в виде названия товара и его цены) в сессионный массив, нежели каждый раз обращаться за этими данными к БД.
Здравый смысл = минимальная нагрузка на сервер + разумное время разработки.

Так, что здесь я с тобой не соглашусь. Мне кажется, если можешь избежать лишнего запроса к БД, без особых усилий, то лучше его избежать. :) (Простите за тавтологию)
 

Godman

Новичок
Автор оригинала: Анатолий
А тебе не кажется, что после выполнения этого кода в корзине окажется ТОЛЬКО "мочалка"???
И вообще тебе уже Фанат подсказывал структуру корзины, попробуй так:
PHP:
$_SESSION['cart'][goods_id] = array('title' => 'Мыло', 'price' => 35, 'count' => 1);
// А итоговую суммы не нужно хранить в сесии. Ее несложно и не долго подсчитать:
$cart_total = 0;
$cart_count = 0;
if (isset($_SESSION['cart'])) {
	foreach ($_SESSION['cart'] as $goods) {
		$cart_total += $goods['count']*$goods['price']; // Общая сумма
		$cart_count += $goods['count']; //Общее кол-во
	}
}
Каким образом в этом скрипте пользователь сможет указать свое значение кол-ва товара ?

-~{}~ 18.08.06 11:29:

Автор оригинала: Фанат
Анатолий
я не такую структуру подсказывал.
поскольку не понимаю, зачем в корзине хранить наименование и цену товара.
считаю, что вполне достаточно одномерного массива айди - цена
Единственная проблема сейчас, это указание кол-ва одного наим. товара, все остальное уже написано.
Я имею ввиду следующую схему:

Название товара Кол-во Цена Сумма
Мыло 2 30 60
Мочалка 3 50 150

Итого: 5 210

проблема разместить поле ввода "Кол-во" в каждой строке, и общую сумму одного наим. товара, т.е. в схеме это "60" "150".
 

Анатолий

Новичок
Godman
Как это каким?
При нажатии на кнопку (ссылку) "Добавить в корзину"
выполняешь код
Код:
$_SESSION['cart'][goods_id] = array('title' => 'Мыло', 'price' => 35, 'count' => 1);
Где goods_id - ID-шник добавляемого товара
count - количество добавляемых товаров, получаешь от пользователя. Как получать это уже твое дело. Самое простое сделать рядом с кнопкой поле ввода колечества.
Только не забудь проверить полученные данные!!!
Если пользователь ввел отрицательное или нулевое количество, то добавляй 1, иначе сколько ввел
 

Фанат

oncle terrible
Команда форума
Анатолий
можешь не соглашаться.
мне чихать на твоё согласие или несогласие.
здесь таких, как ты, больше половины бегает. которые не понимают масштабов. И сэкономив копейку, гордятся собой неимоверно.
объяснять вам всё равно бесполезно. это в мозге отсутвует какой-то важный участок.

Godman
с одним товаром у тебя проблем нет? проблема только если товаров в корзине несколько? или что?
 

Анатолий

Новичок
Фанат
А в чем состоит масштабность постоянного обращения к БД?
Уж снизойди до меня объяснением....
 

Фанат

oncle terrible
Команда форума
какое страшное слово - "постоянное обращение а БД".
ааааа! у меня упадёт база от постоянного обращения!!!
упадёт и придавит!
спасайся кто может!!!
 

Анатолий

Новичок
Фанат
Скажи мне, смысл постоянно запрашивать из БД одно и тоже.
Вот ты один раз спросил: "Как зовут данный товар?" Тебе ответили. Ты запомнил. И все.
А так, как-будто амнизией страдаешь. Спросил - ответили. Пользователь походил по сайту. Снова, спросил - ответили и т.д.
 
Сверху