Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: добавление в корзину
 
 автор: JESS   (03.08.2008 в 02:52)   письмо автору
 
 

Здрасте!
Подскажите пожалуйста саму систему добавления товаров в корзину, вот я тут начеркал , но при простом просмотре выходят пустые поля...

главная
<?php
  session_start
();
 if(empty(
$_POST)) {
echo 
'<form name="form1" method="POST">
    <p><input type="submit" name="1">
    <input type="hidden" name="order" value="100">
    <input type="hidden" name="number" value="77"></p>
</form>'
;

  } else {

 
//print "Order#".$_POST['order']." / Number -".$_POST['number']."<br>";

    
$_SESSION['goods'][$_POST[order]] = $_POST['number'];

}
print 
"<a href='korzina2.php'>Kundvagn</a>";
?>


корзина
<?php

session_start
();

//$_SESSION['goods']['100'] = 7;
if(!isset($_SESSION['goods'])) { print "ingen"; } else {

foreach(
$_SESSION['goods'] as $key => $val)
{
  print 
"Order #".$key." Number - ".$val."<br>";
}
}
//unset($_SESSION['goods']);

 
print "<a href='not2.php'>Back</a>";

?>

  Ответить  
 
 автор: sim5   (03.08.2008 в 08:41)   письмо автору
 
   для: JESS   (03.08.2008 в 02:52)
 

Подход сам не верен в корне. Если страница товаров допускает выбор и помещение в коризину только одного товара, то покупателю нужно дать возможность изменять его количество в корзине, либо удалять его из корзины. Корзина, в свою очередь, должна иметь динамическое отображение основной информации - количество товаров в ней и их общую цену. Это для того, чтобы при каждом выборе товара, не отправлять покупателя "в корзину". При добавлении/удалении товаров из корзины, постоянно производится расчет их стоимости, на основании которого, например, можно: запретить оформление заказа, если общая цена товаров меньше стоимости минимального заказа; произвести перерасчет цены с учетом скидки, если сумма заказа превысила установленный для этого случая предел; и т.п. Покупатель должен иметь возможность перейти из динамической корзины в корзину с полным описанием. Эта корзина должна отображать: наименование товара, его цену, количество выбранно, цену за выбранное количество товара, количество всех выбранных товаров и общую сумму заказа. Здесь покупатель может изменить количество выбранного товара, удалить его, либо вообще очистить корзину.
От сюда следует, что вы должны записывать в сессиюю id товара и выбранное его количество. Делая запрос к базе, производить расчет суммы заказа, а для подробной корзины, выводить еще и наименование товара. Если произошло оформление заказа, информация о товарах этого заказа перписывается в базу, а из сессии удаляется.
То, что "начеркали" вы, это не корзина, это пример работы с сессией. Так как вы совсем не проверяете - есть ли уже в корзине товар с таким id или нет, не работаете с количеством товара и прочее. В вашем примере просто добавляется одно значение, и достаточно:
echo $_SESSION['goods'][$_POST['order']];
И заключайте имена полей в кавычки:
$_SESSION['goods'][$_POST['order']] = $_POST['number'];

  Ответить  
 
 автор: JESS   (03.08.2008 в 17:39)   письмо автору
 
   для: sim5   (03.08.2008 в 08:41)
 

Я имелл ввиду сама система вывода товаров на страницу и в дальнейшем нажатием на кнопку происходила добавление товара в корзине...

  Ответить  
 
 автор: sim5   (03.08.2008 в 17:50)   письмо автору
 
   для: JESS   (03.08.2008 в 17:39)
 

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

  Ответить  
 
 автор: JESS   (03.08.2008 в 20:29)   письмо автору
 
   для: sim5   (03.08.2008 в 17:50)
 

я даже не знаю как объяснить, а вот как формами выводить товары, что бы создавалась сессия на товар id и количество?

  Ответить  
 
 автор: sim5   (04.08.2008 в 04:40)   письмо автору
 
   для: JESS   (03.08.2008 в 20:29)
 

Товары не выводятся формами, список товаров может быть элементами формы, а форма и сессия разные объекты. Вы как покупаете в обычном магазине? Тоже самое и в интернет магазине, но со своей спецификой. Если ваш магазин, это возможность положить один товар в корзину (вы ведь так добавляете его в сессию, а количество товара в скрытом поле (77), это можно назвать шуткой, если только это количество не равно 1), то сперва подумайте над тем, чтобы этот товар не возможно было бы опять выбрать. Но в таком случае это уже не магазин - можно ожидать, что покупатель купит у вас только один "Лексус", но вот купить коньяка для его обмыва, он скорее всего захочет бутылочек эдак 100-300.
То что вы написали, это вы создаете и заполняете массив в сессии, и ничего неверного в вашей записи нет. Но ведь это не корзина. При ее заполнении, вы должны проверять: поступил товар id112 в количестве 1 штука, но прежде чем его поместить в корзину, вы должны проверить, есть ли такой товар в корзине. Если есть, то просто приплюсовать еще один, если нет, добавить этот товар.
Решите сначала - как будет осуществлятся выбор товаров со страниц, от этого зависит, что потребуется выводить на страницу, то есть, именно какие элементы формы потребуются. Это же и определит механизм обработки и помещения в сессию поступивших данных.
Корзина обязательно должна иметь динамическое отображение, а получение информации для этого и подробного описания корзины товаров - это одна и та же по сути операция, значит...
Не ставьте задачу кусочками - решать ее можно последовательно, но не наоборот.

  Ответить  
 
 автор: JESS   (04.08.2008 в 05:26)   письмо автору
 
   для: sim5   (04.08.2008 в 04:40)
 

Решите сначала - как будет осуществлятся выбор товаров со страниц, от этого зависит, что потребуется выводить на страницу, то есть, именно какие элементы формы потребуются. Это же и определит механизм обработки и помещения в сессию поступивших данных.

Ну вот мне это и надо, ни как не могу понять!

  Ответить  
 
 автор: sim5   (04.08.2008 в 05:47)   письмо автору
 
   для: JESS   (04.08.2008 в 05:26)
 

Если вобор товара только по одному, то достаточно ссылки типа <a href="addcart.php?id=110">Добавить в корзину</a>, и формы не потребуется. Если можно добавить произвольное количество товаров, то формой:

<form action="">
Выбрать <input type="text" name="id_100"> шт.
Выбрать <input type="text" name="id_129"> шт.
Выбрать <input type="text" name="id_78"> шт.
.........
</form>

Обычными строковыми функциями из имени поля можно получить id товара, а значение поля, это естественно количество выбранного.

  Ответить  
 
 автор: Trianon   (04.08.2008 в 10:01)   письмо автору
 
   для: sim5   (04.08.2008 в 05:47)
 

Здесь напрашивается указывать в качестве имен полей формы элементы массива:
Выбрать <input type="text" name="qty[100]" > шт.
Выбрать <input type="text" name="qty[129]" > шт.
Выбрать <input type="text" name="qty[78]" > шт.

  Ответить  
 
 автор: sim5   (04.08.2008 в 10:13)   письмо автору
 
   для: Trianon   (04.08.2008 в 10:01)
 

Да, напрашивается, но это лишние операции работы с массивом будут, по моему.

  Ответить  
 
 автор: JESS   (04.08.2008 в 18:19)   письмо автору
 
   для: sim5   (04.08.2008 в 10:13)
 

вот я тут начеркал, и хотел спросить, как сделать что бы после нажатия на ссылку, вместо ссыли был текст "Товар уже добавлен к корзину"..?
<?php
  session_start
();
  
ob_start();


echo 
'<a href="?id=120">Add+</a><br>';
echo 
'<a href="?id=130">Add+</a><br>';
echo 
'<a href="?id=140">Add+</a><br>';


     
$number "1";
     if(isset(
$_GET['id'])) {
     
$_SESSION['goods'][$_GET['id']] = $number;
     
header("Location:  ./not2.php");}

echo 
"<p><a href='korzina2.php'>Kundvagn</a></p>";
?>

  Ответить  
 
 автор: BinLaden   (04.08.2008 в 18:54)   письмо автору
 
   для: JESS   (04.08.2008 в 18:19)
 

Пользователь может только 1 штуку купить?

  Ответить  
 
 автор: JESS   (04.08.2008 в 19:02)   письмо автору
 
   для: BinLaden   (04.08.2008 в 18:54)
 

как бы да, но в корзине можно будет изменить количество!

  Ответить  
 
 автор: BinLaden   (04.08.2008 в 19:44)   письмо автору
 
   для: JESS   (04.08.2008 в 19:02)
 

А почему бы не увеличить сразу это количество?

  Ответить  
 
 автор: JESS   (04.08.2008 в 20:07)   письмо автору
 
   для: BinLaden   (04.08.2008 в 19:44)
 

Всмысле изменять количество до вложения в корзину, а не вней?

  Ответить  
 
 автор: sim5   (04.08.2008 в 20:24)   письмо автору
 
   для: JESS   (04.08.2008 в 20:07)
 

Вы можете воспользоваться двумя способами добавления товара в корзину - по одной штуке, или по несколько штук. В любом случае, если вам надо информировать покупателя, то проверяйте перед выводом товаров на страницу и корзину товаров - есть товар в корзине, значит..., а тут могут быть варианты:
1. вместо ссылки добавления в корзину, текст "Товар положен в корзину".
2. вместо "Выбрать", "В корзине" и в поле ввода уже количество положенного товара в корзину. Можно изменить, а можно только и в основной корзине менять.
В общем проверяйте корзину, и выбирайте как вы считаете нужным. А сама корзина, это уже когда вы перед кассой с нею - можете вообще все назад вернуть, можете что-то изменить, что-то добавить. Наименования товаров в ней, хорошо бы имели ссылку на страницу подробного описания этого товара, вдруг покупатель забыл что-то о нем.

  Ответить  
 
 автор: JESS   (04.08.2008 в 20:31)   письмо автору
 
   для: sim5   (04.08.2008 в 20:24)
 

>1. вместо ссылки добавления в корзину, текст "Товар положен в корзину".

а можно так ли сделать?


<?php

if(isset($_SESSION['goods']['120']))
{
print 
"Товар положен к корзину.";

} else {

echo 
'<a href="?id=120">Add+</a><br>';
}

if(isset(
$_SESSION['goods']['130']))
{
print 
"Товар положен к корзину.";

} else {

echo 
'<a href="?id=130">Add+</a><br>';
}
?>

  Ответить  
 
 автор: sim5   (04.08.2008 в 21:17)   письмо автору
 
   для: JESS   (04.08.2008 в 20:31)
 

Собственно как хотите так и делайте. В смысле, если у вас можно добавлять только по одному товару в корзину, то вместо ссылки сообщение. Только не так, как это вы расписали. Вы товары на страницу как выводите и по сколько? Наверное же не по одному (ну исключая страницу подробного описания). А значит получив список товаров из базы, вы будете выводить их обрабатывая массив. Так ведь? Значит зачем вам для каждого писать если есть этот, то... если есть этот, то... Обрабатывая массив полученных товаров, получив в цикле id очередного товара, вам достаточно проверить, есть ли такой индекс в массиве корзины товаров, и если есть, значит товар в корзине, если нет, значит... и в цикле будет всего одна запись. Развернете массив, получите у соответствующих товаров, соответствующие записи - либо ссылки, либо текст.

  Ответить  
 
 автор: JESS   (04.08.2008 в 22:09)   письмо автору
 
   для: sim5   (04.08.2008 в 21:17)
 

ну точто я сейчас делаю, то это понять как все работает, а так я хочю сделать магазин, с SQL товары будут выводиться по 10 или как по икрану подойдет, подробное описание будет, ну и все такое, есть много бесплатных скриптом на эту тему, но я хочю сдлать все сам...

Вот еще вопрос, как сделать в порзине отбор товаров, сделать на каждый товар chekbox и форму для изменения количства и рядом кнопку, ИЗМЕНИТЬ и кнопку удалить или делать 3 конопки внизу,

1. удалить выделленые товары chekboxoм
2. применить изменения *если изменненно количество товаров!
3. Add to card.

  Ответить  
 
 автор: sim5   (04.08.2008 в 22:37)   письмо автору
 
   для: JESS   (04.08.2008 в 22:09)
 

Количество выбранного товара в корзине, это поле ввода, которое можно редактировать, ввести новое значение. Товары которые можно удалить, можно отметить чекбоксом. При этом, если пользователь укажет в поле значение 0 или вообще его очистит, то считать такой товар тоже удаленным. В общем об условиях ваших сообщите пользователю, иначе "обрастете" лишними проверками. Достаточно одной кнопки "Применить изменения", так как проверив поля количества товаров в корзине, вы обновите просто корзину. Кнопка "Добавить в корзину" при этом будет лишняя. А вот кнопку "Очистить корзину" надо добавить, не исключено, что кто-то воспользуется ей, передумав, захочет сделать новый выбор когда, а товаров в корзине много.

  Ответить  
 
 автор: JESS   (04.08.2008 в 22:50)   письмо автору
 
   для: sim5   (04.08.2008 в 22:37)
 

Это значит что сделать на управлении с чекбоксами удобнее что бы удалить товар?
Изменять количество товара , и потом обновить всю корзину и количество товаров обновиться, а так же и очистить всю корзину, так удобнее?

  Ответить  
 
 автор: sim5   (04.08.2008 в 22:59)   письмо автору
 
   для: JESS   (04.08.2008 в 22:50)
 

Не хотите чекбосками, напишите - "Если вы хотите удалить товар из корзины, очистите поле Количество этого товара..." ну или типа того. Вам решать. Но представьте себе, что список товаров может быть весьма длинным, и что быстрее будет, очистить поля у товаров или отметить такие чекбоксами? Думаю, что второе. Просто вы должны учесть ситуацию, когда пользователь может указать количество 0 или вообще очистить поле. И то, что вы в этом случае будете считать товар удаленным, пользователь должен знать. Можно обновлять количество товаров в корзине сразу при изменениях в полях, но это делать лучше с использованием технологии AJAX тогда, иначе будет обрименительно для пользователя. Поэтому, без AJAX, производите изменения в корзине (запись в сессию) по кнопке "Применить изменения" (SUBMIT).

  Ответить  
 
 автор: JESS   (05.08.2008 в 00:04)   письмо автору
 
   для: sim5   (04.08.2008 в 22:59)
 

хорошо, но вот как сделать на одну форму 3 кнопки, или это не возможно что бы

одна удаляла выбранные чекбоскы

другая обновляла форму с новыми данными

третья Add to card что бы записывала в базу

что то я не могу врубуться, только одно смог сделать только удаление =(

может со свичем сделать?

  Ответить  
 
 автор: sim5   (05.08.2008 в 10:32)   письмо автору
 
   для: JESS   (05.08.2008 в 00:04)
 

Кнопки (если говорить о submit) должно быть две - одна для того чтобы очистить корзину, вторая для обновления ее. Каждый товар имеет свой уникальный номер. Этот номер можно привязать к имени любого элемента формы, а в случае с чекбоксами, то этот номер непосредственно указать как значение. Вот вам корзина:

<div align="right">
<form action="cart.php" method="post">
<input type="submit" name="clear" value="Очистить корзину">
<fieldset style="border: 1px solid #696969; padding: 6 6 6 6; margin-bottom: 12px;">
<legend style="font-weight: bold; color: #696969; margin-bottom: 6px;">Ваша корзина</legend>
<table bgcolor="#696969" cellspacing="1" cellpadding="4" width="100%">
<tr bgcolor="#f5f5f5">
  <td>Товар</td>
  <td>Цена, руб</td>
  <td>Выбрано</td>
  <td>Стоимость, руб</td>
  <td>Удалить</td>
</tr>
<tr bgcolor="#ffffff">
  <td><a href="goods.php?id=101">Пряники</a></td>
  <td>25.00</td>
  <td><input type="text" name="c101" value="5"></td>
  <td>125.00</td>
  <td><input type="checkbox" name="del[]" value="101"></td>
</tr>
<tr bgcolor="#ffffff">
  <td><a href="goods.php?id=91">Бублики с дыркой</a></td>
  <td>15.00</td>
  <td><input type="text" name="c91" value="10"></td>
  <td>150.00</td>
  <td><input type="checkbox" name="del[]" value="91"></td>
</tr>
<tr bgcolor="#ffffff">
  <td><a href="goods.php?id=82">Конфеты "Клуша"</a></td>
  <td>45.00</td>
  <td><input type="text" name="c82" value="3"></td>
  <td>135.00</td>
  <td><input type="checkbox" name="del[]" value="82"></td>
</tr>
<tr bgcolor="#ffffff">
  <td colspan="2">Всего</td>
  <td>18</td>
  <td>410.00</td>
  <td>&nbsp;</td>
</tr>
</table>
</fieldset>
<input type="submit" name="update" value="Обновить корзину">
</form>
</div>

Кнопки отправки формы разнесены, так, чтобы случайно не "жмахнуть" не ту. Вам остается только проверять какая из кнопок была нажата и произвести необходимые действия.
В форме, элементы ввода имеют имя связанное с id товара, а чекбоксы для удаления, имеют значения равные этим id. Получив id поля ввода, и, если значение его равно 0 или пустое, или, если установлен чекбокс со значением раным этому id, то удаляем товар из корзины.

  Ответить  
 
 автор: JESS   (05.08.2008 в 15:44)   письмо автору
 
   для: sim5   (05.08.2008 в 10:32)
 

Теперь понятно, а вот Add to card как можно сделать, может 2 скрытные формы?

я тут полистал странуцу с магазинами, то там распространенно только 2 кнопки,
1. ставиш выбранным товарам количество, если 0 то при Обновлении удаляеться товар сам,
2. К Кассе

  Ответить  
 
 автор: sim5   (05.08.2008 в 16:51)   письмо автору
 
   для: JESS   (05.08.2008 в 15:44)
 

Какаих две скрытых формы? Зачем? Ваши "мытарства" с корзиной, пока отношения не имеют к MySQL. Поэтому, смотрите ответ в разделе РНР в соданной вами теме.

  Ответить  
 
 автор: JESS   (05.08.2008 в 16:55)   письмо автору
 
   для: sim5   (05.08.2008 в 16:51)
 

но будут, ка только я пойму что и как то сразу отношение появиться , =) мне пока только одно не ясно как из корзины после покупки товары записать в базу..

  Ответить  
 
 автор: sim5   (05.08.2008 в 17:11)   письмо автору
 
   для: JESS   (05.08.2008 в 16:55)
 

Вы еще с корзиной толком то не разобрались, а уже запись. Каждая покупака, это офрмление заказа. Если оформление заказа прошло успешно, то записываете в таблицу заказов все параметры заказчика, а по номеру этого заказа, пишите в таблицу товаров заказа данные из сессии - id товара и его количество.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования