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

Форум PHP

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

 

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

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

тема: корзина-условие
 
 автор: RuslanBLR   (24.12.2011 в 15:50)   письмо автору
 
 

подскажите! как реализовать такое условие, если товар имется в корзине, то когда еще раз когда нажимаешь на кннопку в "в корзину" выводило сообщение -товар имеется в корзине и не добовлять товар в корзину?

исходный код:

<? session_start(); 
  
 function 
addtocart($product_id$product_price) {
  
$_SESSION['prod_count']++;
  
$incart=$_SESSION['prod_count'] - 1;
  
$_SESSION['product_id'][$incart] = $product_id;
  
$_SESSION['product_price'][$incart] = $product_price;
  
$_SESSION['product_count'][$incart] = 1;
  }
 
$summ=$_SESSION['product_price'][$i]* $_SESSION['product_count'][$i];
 
$price=$_SESSION['product_price'][$i];
  
 
?>
  
 <?
  
 
if(!empty($_POST)){    
     
addtocart($_POST["product_id"],$_POST["product_price"]);  
   }  
  
   include 
"setup/options.php";  
   if(!
mysql_connect($host,$USER,$PASSWD)) exit(@mysql_error());  
   if(!
mysql_select_db($DB)) exit(@mysql_error());  
  
   
$r mysql_query("SELECT * FROM CLIPS WHERE kod = {$_GET['kod']}");  
  
   
$page "<form id='form1' name='form1' method='post' action='{$_SERVER["REQUEST_URI"]}'>";  
   while(
$f mysql_fetch_array($r)){ 
     
$page .= "<table border=1 width=100%> 
     <tr><td align=center bgcolor=#000000><font color=white>код: 
{$f['kod']}</font></td> 
     <td align=center bgcolor=#000000><font color=white>место установки:</font></td> 
     <td align=center bgcolor=#000000><font color=white>тип: 
{$f['tip']}</font></td></tr> 
     <tr><td width=5% align=left bgcolor=#FFFFFF height=5px><img src='clips/
{$f['image']}' width=120px height=120px></td> 
     <td align=center>
{$f['setup']}</td><td width=120px height=120px>картинка</td></tr> 
     <tr><td align=center bgcolor=#000000><font color=white>OEM:</font></td> 
     <td align=center bgcolor=#000000><font color=white>марка автомобиля:</font></td> 
     <td align=center bgcolor=#000000><font color=white>размеры:</font></td></tr> 
     <tr><td bgcolor=#E8E8E8 align=center>
{$f['original']}</td> 
     <td align=center>
{$f['marka']}</td> 
     <td>T= 
{$f['T']} <br>H= {$f['H']}<br>F= {$f['F']}<br>D= {$f['D']}<br>T1= {$f['T1']}<br> 
     T2= 
{$f['T2']}<br>L= {$f['L']}<br>G= {$f['G']}<br>S1= {$f['S1']}<br>S= {$f['S']}<br> 
     S min= 
{$f['Smin']}<br>S max= {$f['Smax']}</td></tr></table><br>
 <p class=contGLAV2><strong>Цена: 
{$f['price']} бел.руб.</strong></p>
     <input type=hidden name='product_price' value="
.$f[price]." /> 
     <input type=hidden name='product_id' value="
.$f[id]." /> 
     <input type=hidden name='tocart' value=tocart /> 
 <table border=0 width=100%><tr><td align=center>
     <input type=submit name='sub' value='В корзину' id='korz' />  
 </td></tr></table>"
;
 
$f['price']=$_SESSION['price'];
 echo 
"$f[price]";
   }  
   
$page .= "</label></form>";  
   
   echo 
$page;
  
  
   
 
?>

  Ответить  
 
 автор: cheops   (24.12.2011 в 16:17)   письмо автору
 
   для: RuslanBLR   (24.12.2011 в 15:50)
 

При помощи функции in_array() проверьте есть ли $product_id в массиве $_SESSION['product_id']. Если есть, товар уже есть в корзине, если нет - это новый товар.

  Ответить  
 
 автор: RuslanBLR   (24.12.2011 в 16:31)   письмо автору
 
   для: cheops   (24.12.2011 в 16:17)
 

как это записать и куда?

if(in_array($_SESSION['product_id']))

  Ответить  
 
 автор: cheops   (24.12.2011 в 16:40)   письмо автору
 
   для: RuslanBLR   (24.12.2011 в 16:31)
 

Функция in_array() принимает два параметра
if($product_id, in_array($_SESSION['product_id']))
{
  // Товар уже есть
}
else
{
  // Это новый товар
}

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

  Ответить  
 
 автор: RuslanBLR   (24.12.2011 в 16:51)   письмо автору
 
   для: cheops   (24.12.2011 в 16:40)
 

Я все понимаю. Спасибо вам. Вот куда я вставил.

<?

if(!empty($_POST)){   

if(
$product_idin_array($_SESSION['product_id'])) 

  echo 
"Товар уже есть"

else 

    
addtocart($_POST["product_id"],$_POST["product_price"]); 
  }  
}



выводит ошибку:

Parse error: syntax error, unexpected T_STRING in .................

  Ответить  
 
 автор: cheops   (24.12.2011 в 17:07)   письмо автору
 
   для: RuslanBLR   (24.12.2011 в 16:51)
 

А на какую строку указывает ошибка?

  Ответить  
 
 автор: RuslanBLR   (24.12.2011 в 18:05)   письмо автору
 
   для: cheops   (24.12.2011 в 17:07)
 

if($product_id in_array($_SESSION['product_id']))

  Ответить  
 
 автор: cheops   (24.12.2011 в 18:07)   письмо автору
 
   для: RuslanBLR   (24.12.2011 в 18:05)
 

А, это я подошибся (нет возможности проверить ваш код), следует заменить эту строку так
if(in_array($product_id, $_SESSION['product_id']))

  Ответить  
 
 автор: RuslanBLR   (24.12.2011 в 18:10)   письмо автору
 
   для: cheops   (24.12.2011 в 18:07)
 

когда нажимаю кнопку в корзину выдает ошибку

Warning: in_array() [function.in-array]: Wrong datatype for second argument in

  Ответить  
 
 автор: cheops   (24.12.2011 в 18:14)   письмо автору
 
   для: RuslanBLR   (24.12.2011 в 18:10)
 

Распечатайте дамп массива $_SESSION, как он выглядит?

  Ответить  
 
 автор: RuslanBLR   (24.12.2011 в 18:18)   письмо автору
 
   для: cheops   (24.12.2011 в 18:14)
 

Array
(
    [prod_count] => 1
    [product_id] => Array
        (
            [0] => 1
        )

    [product_price] => Array
        (
            [0] => 50000
        )

    [product_count] => Array
        (
            [0] => 1
        )

)



только почему-то когда я нажимаю кнопку массив пуст- потом нажимаю обновить страницу и только тогда выводит вышеуказаный массив.

что это пулучается что кождый раз если пользователь обновит страницу столько товара и добавится в корзинк. С другой стороны и если реализовать то что мы сейчас делаем все будет нормально....

  Ответить  
 
 автор: cheops   (24.12.2011 в 19:10)   письмо автору
 
   для: RuslanBLR   (24.12.2011 в 18:18)
 

Значит у вас в сессию данные не поступают, поэтому и in_array() жалуется, лучше перед этой функцией поставить проверку is_array(), чтобы не допускать ситуации проверки, когда $_SESSION['product_id'] пуст.

  Ответить  
 
 автор: RuslanBLR   (24.12.2011 в 19:24)   письмо автору
 
   для: cheops   (24.12.2011 в 19:10)
 

извините я не понимаю!!!!

проверка in_array() это как? так что ли? извините еще раз

if (isset(in_array($_SESSION['product_id'])))

  Ответить  
 
 автор: RuslanBLR   (24.12.2011 в 19:26)   письмо автору
 
   для: RuslanBLR   (24.12.2011 в 19:24)
 

или вот так?

if(is_array($_SESSION['product_id']))

  Ответить  
 
 автор: cheops   (24.12.2011 в 20:10)   письмо автору
 
   для: RuslanBLR   (24.12.2011 в 19:26)
 

Совершенно верно.

  Ответить  
 
 автор: RuslanBLR   (24.12.2011 в 20:19)   письмо автору
 
   для: cheops   (24.12.2011 в 20:10)
 

а что нам это дает - что мы узнали что переменная является массивом.

может можно реализовать так, только получается что товар добавляется 1 раз и все, и другие уже тоже не добавляются, как правильно написать чтобы $_SESSION[product_id] не добавила такой же id: ?


if($_SESSION[product_id]=$_SESSION[product_id])

  Ответить  
 
 автор: RuslanBLR   (26.12.2011 в 13:41)   письмо автору
 
   для: cheops   (24.12.2011 в 20:10)
 

СПАСИБО БОЛЬШОЕ - ВСЕ ПОЛУЧИЛОСЬ!!!!!!!! извините просто не туда вставил код.
Подскажите не получается убрать эту ошибку:

Warning: in_array() [function.in-array]: Wrong datatype for second argument in


уже все перепробовал - как вы сказали поставить перед i
f(in_array($product_id, $_SESSION['product_id']))


проверку:
if(is_array($_SESSION['product_id']))


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

<? session_start(); 

function 
addtocart($product_id$product_price) {
if(
is_array($_SESSION['product_id'])){
if(
in_array($product_id$_SESSION['product_id'])){

  echo 
"<p class=contGLAV2><font color=#BEBEBE><strong>товар уже есть в корзине</font></strong></p>";

}  
else  
{  
 
$_SESSION['prod_count']++;
 
$incart=$_SESSION['prod_count'] - 1;
 
$_SESSION['product_id'][$incart] = $product_id;
 
$_SESSION['product_price'][$incart] = $product_price;
 
$_SESSION['product_count'][$incart] = 1;
 }
 }
}
?>

  Ответить  
 
 автор: cheops   (26.12.2011 в 13:56)   письмо автору
 
   для: RuslanBLR   (26.12.2011 в 13:41)
 

Попробуйте изменить вот это условие
if(is_array($_SESSION['product_id'])){
следующим образом
if(is_array($_SESSION['product_id']) && !empty($_SESSION['product_id'])){

  Ответить  
 
 автор: RuslanBLR   (26.12.2011 в 14:18)   письмо автору
 
   для: cheops   (26.12.2011 в 13:56)
 

ошибку не выводит - но не чего и не добавляет!

может я опять не так проверяю ( не туда добавил) потому что без этой проверки все нормально - но ошибку выводит:

<?
function addtocart($product_id$product_price) { 
if(
is_array($_SESSION['product_id']) && !empty($_SESSION['product_id'])){
if(
in_array($product_id$_SESSION['product_id'])){ 

  echo 
"<p class=contGLAV2><font color=#BEBEBE><strong>товар уже есть в корзине</font></strong></p>"

}   
else   
{   
 
$_SESSION['prod_count']++; 
 
$incart=$_SESSION['prod_count'] - 1
 
$_SESSION['product_id'][$incart] = $product_id
 
$_SESSION['product_price'][$incart] = $product_price
 
$_SESSION['product_count'][$incart] = 1
 } 
 }
}
?>


ошибку выводит только один раз при первом добавлении товара - потом все нормально - это когда без проверки is_array

  Ответить  
 
 автор: RuslanBLR   (26.12.2011 в 15:06)   письмо автору
 
   для: cheops   (26.12.2011 в 13:56)
 

СПАСИБО ВАМ БОЛЬШОЕ!!!!! РАЗОБРАЛСЯ ЧТО Я НЕПРАВИЛЬНО СДЕЛАЛ!!!!!!! ОГРОМНОЕ СПАСИБО!!!!!!!!!!

вот что получилось:

<? session_start(); 
 
$_SESSION['product_id'][$incart] = $product_id
function 
addtocart($product_id$product_price) { 

if(
is_array($_SESSION['product_id']) && !empty($_SESSION['product_id'])){
if(
in_array($product_id$_SESSION['product_id'])){ 

  echo 
"<p class=contGLAV2><font color=#BEBEBE><strong>товар уже есть в корзине</font></strong></p>"

}  

else   
{   
 
$_SESSION['prod_count']++; 
 
$incart=$_SESSION['prod_count'] - 1
 
$_SESSION['product_id'][$incart] = $product_id
 
$_SESSION['product_price'][$incart] = $product_price
 
$_SESSION['product_count'][$incart] = 1

 } 
 }
}
?>

  Ответить  
 
 автор: RuslanBLR   (26.12.2011 в 20:11)   письмо автору
 
   для: cheops   (24.12.2011 в 20:10)
 

извините у меня ошибка вылезла, помогите пожалуйсто!!!!

вот код:

<? session_start(); 
 
$_SESSION['product_id'][$incart] = $product_id
function 
addtocart($product_id$product_price) { 

if(
is_array($_SESSION['product_id']) && !empty($_SESSION['product_id'])){
if(
in_array($product_id$_SESSION['product_id'])){ 

  echo 
"<p class=contGLAV2><font color=#BEBEBE><strong>товар уже есть в корзине</font></strong></p>"

}  

else   
{   
 
$_SESSION['prod_count']++; 
 
$incart=$_SESSION['prod_count'] - 1
 
$_SESSION['product_id'][$incart] = $product_id
 
$_SESSION['product_price'][$incart] = $product_price
 
$_SESSION['product_count'][$incart] = 1

 } 
 }
}
?>


а это дамп сессии карзины и там получаю 1 пустой index - от чего это???

<?
Array
(
    [
product_id] => Array
        (
            [] => Array
                (
                    [] => 
                    [
0] => 1
                    
[1] => 2
                    
[2] => 3
                
)

            [
0] => 1
            
[1] => 2
            
[2] => 3
        
)

    [
prod_count] => 3
    
[product_price] => Array
        (
            [
0] => 50000
            
[1] => 100000
            
[2] => 34000
        
)

    [
product_count] => Array
        (
            [
0] => 1
            
[1] => 1
            
[2] => 1
        
)
)
?>

  Ответить  
 
 автор: RuslanBLR   (24.12.2011 в 19:50)   письмо автору
 
   для: cheops   (24.12.2011 в 19:10)
 

видимо я не туда вствил проверку if(in_array($product_id, $_SESSION['product_id']))

как я думаю, потому что когда обнавляю страницу и массив заполняется, то и ошибка пропадает, то и товар продолжает добавлятся в карзину при обновлении!!!!!

  Ответить  
 
 автор: RuslanBLR   (24.12.2011 в 18:06)   письмо автору
 
   для: cheops   (24.12.2011 в 17:07)
 

извините, ошибся вот эту ошибку выдает:

Parse error: syntax error, unexpected ',' in 


на эту строку:

if($product_id, in_array($_SESSION['product_id'])) 

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

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