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

Форум PHP

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

 

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

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

тема: Как передать данные в "мою корзину"
 
 автор: diman   (07.08.2006 в 13:45)   письмо автору
 
 

Есть такая задумка. Клиент заказывает товар. Но он может заказать и несколько товаров. И вот мне надо чтобы они все отправлялись в корзину. Я сделал это таким способом:
Вначале проверяется был ли зарегестрирован пользователь
Если же да, то данные о товаре заносятся в файл
Ну а там уже при переходе по ссылочке "моя корзина" из этого файла будут браться данные заказа и отображаться в браузере.

Проблемка заключается в том, что не зарегестрированный пользователь не сможет заказать товар. Но я просмотрел некоторые сайты, но там можно помещать товар и не зарегистрированым пользователям. Как это органзизовать?

   
 
 автор: kasmanaft   (07.08.2006 в 13:49)   письмо автору
 
   для: diman   (07.08.2006 в 13:45)
 

можно заменить корзину-файл на корзину-cookie ... то есть чтобы id товара заносился в cookie, а не в файл

   
 
 автор: Diman   (07.08.2006 в 14:21)   письмо автору
 
   для: kasmanaft   (07.08.2006 в 13:49)
 

Да можно и в куки, вот только как система будет понимать, чтобы показывать данные товаров именно того пользователя, который в сети, а не какого-то другого? И если с помощью куки, то как? Так как с куками я еще не работал, все время брал сессии. Да и и с куками если работать, то они могут на машине клиента быть отключены, что тогда? Именно по этой причине я ими вообще не пользуюсь.

   
 
 автор: tuder   (07.08.2006 в 14:46)   письмо автору
 
   для: Diman   (07.08.2006 в 14:21)
 

>Так как с куками я еще не работал, все время брал сессии.
С нерегистрённым - хранить в сессии. Завершил сессию - накрылась его корзина.

   
 
 автор: Alex Kraft   (07.08.2006 в 14:45)   письмо автору
 
   для: diman   (07.08.2006 в 13:45)
 

Попробуйте массив сессий...

   
 
 автор: Diman   (07.08.2006 в 14:59)   письмо автору
 
   для: Alex Kraft   (07.08.2006 в 14:45)
 

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

   
 
 автор: krollik   (07.08.2006 в 15:31)   письмо автору
 
   для: Diman   (07.08.2006 в 14:59)
 

хм.. алгаритм не сложный: просто при каждой покупке(нажатии Отправить в корзину) добавляеться элемент в массив, массив в свою очередь лежит в сессии.. А потом(перед оформление заказа) просто выводиш значения массива =) Вроде всё просто =)

   
 
 автор: Alex Kraft   (07.08.2006 в 16:26)   письмо автору
 
   для: Diman   (07.08.2006 в 14:59)
 

Все просто:
В корзину передается id товара - $id
$_SESSION['korzina'] = array();

Сам товар, т.е. его id, передается так:
$_SESSION['korzina'][$id]
Можно также передать количество товара - переменную quantity... и общую сумму - переменную summ... как их вычеслить - труда не составит... надо просто подсчитать кол-во элементов массива $_SESSION['korzina']... и по id товара узнать его стоимость и сложить ее.

Чтобы и незарегистрированный пользователь смог помещать товар в корзину, проверяйте его сессию при расчете, а не когда он выбирает товар... Допустим, я вошел в магазин, выбрал себе несколько наименований товара. Когда я хочу оплатить товар, то я попадаю в кассу, т.е. на страницу, где проверяется моя сессия пользователя. Если моя сессия пользователя существует, т.е. я залогинился, то я вижу определееную страницу страницу... то, что обычно видет посетитель: тип оплаты, сумму и т.д. Если моя сессия пользователя не существует, то я вижу приглашение пройти авторизацию. Но сессия моей корзины не пропала... когда я зарегистрировался и зайду в раздел Моя Корзина, то я там увижу выбранный мной товар.

   
 
 автор: diman   (11.08.2006 в 20:31)   письмо автору
 
   для: Alex Kraft   (07.08.2006 в 16:26)
 

Есть БД. В ней содержится такое поле 'kod' целого типа, которое отвечает за код продукции. Код продукции везде разный.
Далее существует форма в которой отображается сама продукция. Заказчик должен
ввести в поле формы код выбранной продукции. И в зависимости от того как он ввел, должны появляться соответственно следующие сообщения: "Код не введен", "Код не верный", "Спасибо за покупку. Ваш заказ отправлен в корзину". Вроде бы это сделать очень просто. С этим у меня проблем никогда не было, но здесь твориться какая-то чертовщина. Не зависимо какой код я введу (в том случае и неправильный) у меня отображается надпись последнего содержания, т. е. заказ отправлен в корзину. Почему так происходит?

Теперь второй промах. Когда я захожу по ссылочке в "мою корзину" (используются сессии", то все время отображается только последняя выбранная продукция. Там я еще красоту не наводил, сдела просто чтобы пока был виден сам результат, т. е. должны отображаться выбранные заказы. Почему так происходит?
Прилагаю свои скрипты.

P.S. Да, и еще. В ozon.ru когда нам понравилась какая-то вещь, то мы нажимает на ссылку "добавить в корзину" и появляется в этом же окне другое маленькое окошко, но оно как бы является одним целым с предыдущим. Как это делается?

   
 
 автор: Trianon   (11.08.2006 в 21:06)   письмо автору
 
   для: diman   (11.08.2006 в 20:31)
 

Перед echo имеет смысл else поставить. Нет?

   
 
 автор: Diman   (12.08.2006 в 09:53)   письмо автору
 
   для: Trianon   (11.08.2006 в 21:06)
 

C этим понятно, но тогда почему query воспринимает любой код, даже если такого в БД нет? Он при любом значении кода выдает что все нормально. Такого же просто быть не может.
А как быть со второым и с третьим вопросами? Почему у меня выдает список только последнего выбранного товара? Ведь это же массив сессий.

   
 
 автор: куч1963   (12.08.2006 в 10:30)   письмо автору
 
   для: Diman   (12.08.2006 в 09:53)
 

Вот это условие, выводит если в базе есть продукт с твоим номером.
if(mysql_num_rows($res)>0)
{

}
если это условие не выполняется то идет
echo
"<table><tr>
<td>Ваш заказ отправлен в корзину</td>
</tr></table>";
Так , что в твоем исполнении при любом условии будет вывод - Ваш заказ отправлен в корзину.
Правильнее было бы наверное так

<?php
   $_SESSION
['korzina'] = array();
   
$query="SELECT * FROM production Where kod=".$_POST['kod'];
   
$res=mysql_query($query);
   if (
$res)
   {
     if(
mysql_num_rows($res) == 0)
     {
echo 
"нет продукта";
     }
else
{
        while(
$prod mysql_fetch_array($res))
        {
           if (
$prod['kod']==$_POST['kod'])
           {
              
$_SESSION['korzina'][$prod['id_product']]=
                  
$prod['kod']."/".$prod['name']."/".$prod['price'];
              
session_register('korzina['.$prod['id_product'].']');  //не пойму эту строку?
          
echo
       
"<table><tr>
          <td>Ваш заказ  "
.$prod['name']."  отправлен в корзину</td>
       </tr></table>"
;
 }
        } 
// End while
     
}

     
   }  
// End $res
?>

Возьми попробуй так
Файл обработчик формы car.php
<?php
 session_start
();
$referer=getenv("HTTP_REFERER");
   if (! isset(
$_SESSION['cadd_ses']) && isset($_POST['addme']))
   {    
       
$cadd_ses=array();
       while ( 
$elements=each($_POST['cadd']) )
       {
       
$cadd_ses[$elements["value"]]=1;
       }
     
    
$_SESSION['cadd_ses']=$cadd_ses;
     }
   else if (isset(
$cadd[0]) )
   {
       while ( 
$elements=each($_POST['cadd']) )
       {
        if (isset(
$_SESSION['cadd_ses'][$elements["value"]])) //удаление
         
unset($_SESSION['cadd_ses'][$elements["value"]]);
        else
         
$_SESSION['cadd_ses'][$elements["value"]]=1;
       }
          
   }

print 
"<HTML><HEAD>\n";
      print 
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=$referer'>\n";
      print 
"</HEAD></HTML>\n";
      exit();
?>
//++++++++++++++++++++++++++++++++++++++++++++++

И форма к нему

if(isset($pid)) {    
$qp = mysql_query

("SELECT * FROM links where p_id='$pid' ");
 for($i=0;$i<$qprow = mysql_fetch_row($qp);$i++)

<form method="post"  name="addprocuct" action="car.php"><input type="hidden" name="addme" value="addtocart">
<INPUT  type="hidden" name="cadd[]" VALUE="<?= $pid;?>">
if (isset($_SESSION['cadd_ses'][$qprow[0]]))
{Продукт в корзине}
else
{Добавить в корзину}
</form>


так вывожу в корзине 

$j=0; 
while ($element=each($_SESSION['cadd_ses']))
{
        
       $id=$element["key"];
       $result= mysql_query("select * from links where p_id='$id'") OR DIE(" не получилось!!! ");
       $row=mysql_fetch_object($result);

$row->name;
}

   
 
 автор: Diman   (12.08.2006 в 10:42)   письмо автору
 
   для: куч1963   (12.08.2006 в 10:30)
 

Вы совершенно правы. Совсем не подумал про то что надо было еще проверить на наличие нулевого результата своего запроса. А где вы написали что не поняли мою строку, то честно говоря я сам толком не знаю как правильно записать зарегестрированный массив сессий. Подскажите как. А может быть вообще это лишнее?

   
 
 автор: Diman   (14.08.2006 в 09:24)   письмо автору
 
   для: Diman   (12.08.2006 в 10:42)
 

Из ваших предложений я все таки выбрал свой первоначальный вариант. У меня каждая продукция показывается на форме отдельно. Да и в своем я лучше разберусь.
Но у меня возникает проблема с корзиной, а вернее в запись в массив данных о продукции. Когда я выбираю какую-либо продукцию, она заносится в массив сессий, но если я выбираю другую продукцию, то она автоматически заменит старую или наверное опустошает ту сессию в которой были данные. Почему так происходит? Ничего не могу понять. Еще раз прилаю свои скрипты, вместе с формой вывода самой продукции. Может так будет ясней.
В файле description.php есть такие строки, именно в них и происходит занесение данных о выборе клиента в массив сессий. Именно здесь и надо чего то изменить. Наверное как-то проверить, что если есть такое значение в этом массиве, то ничего не надо делать, а если есть то заносить данные. Я пытался так делать, но ничего не выходит. Ругается что несовпадение типа (использовал функцию in_array($mas, $value). Очень Вас прошу, помогите пожалуйста. Это осталась последняя вещь, и можно заниматься уже дизайном.

while($prod = mysql_fetch_array($res))
        {
           if ($prod['kod']==$_POST['kod'])
           {
              $_SESSION['korzina'][$prod['id_product']]=
                  $prod['kod']."/".$prod['name']."/".$prod['price'];
              echo
              "<table><tr>
                  <td>Ваш заказ  ".$prod['name']."  отправлен в корзину</td>
              </tr></table>";
           }
        } // End while

   
 
 автор: Diman   (14.08.2006 в 21:10)   письмо автору
 
   для: Diman   (14.08.2006 в 09:24)
 

Ну что, мне кто-нибудь поможет или нет?

   
Rambler's Top100
вверх

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