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

Форум PHP

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

 

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

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

тема: Не вывести кол-во в корзине
 
 автор: kapitalist   (05.02.2012 в 20:15)   письмо автору
 
 

Привет делаю корзину

<?php
session_start
();
$id $_GET[id];
$old $_SESSION['cart'];
if (isset (
$id)) {
$_SESSION['cart'] = "$id,$old";
}
$url=$_SERVER['HTTP_REFERER'];
print 
$url;
print 
'<script>document.location="'.$url.'"</script>';
?>
-так добавляю id в сессию

echo "<table cellspacing='0' cellpadding='0' width='98%' style='margin-left: 6px;'><tr><td class='left_board2'>Название</td><td class='left_board2'>Количество</td><td class='left_board2'>Вес</td><td class='left_board2'>Цена</td></tr>";
if(!empty($_SESSION['cart']))
{
    $arr = explode(',', $_SESSION['cart']);
  
    $where_in = array();
  
    foreach($arr as $item)
    {
        $where_in[] = (int)$item;
    }
  
    unset($arr);
  
    $sql = "SELECT * FROM `catalog` WHERE `id` IN (" . implode(',', $where_in) . ") ORDER BY `id` ASC";
  
    $res = mysql_query($sql);
  
    while($row = mysql_fetch_assoc($res))
    {
echo "<tr><td class='right_board1'><a href='page.php?id=$row[id]'>$row[title]</a></td><td class='right_board1'></td><td class='right_board1'>$row[ves] кг</td><td class='right_board1'>$row[price] руб.</td></tr>";
    }
}
else
{
echo "Вы не добавили товары в корзину!";
}

так вывожу товары в на странице корзины. Но не могу понять как добавить количество и изменять его?
Подскажите, плиз!

  Ответить  
 
 автор: cheops   (05.02.2012 в 21:21)   письмо автору
 
   для: kapitalist   (05.02.2012 в 20:15)
 

//$_SESSION['cart'] = "$id,$old";
Вам будет сильно проще, в том числе и для реализации этой задачи, если вместо хранения идентификаторов через запятую в строке, вы будет хранить их в виде массива.

  Ответить  
 
 автор: kapitalist   (05.02.2012 в 22:53)   письмо автору
 
   для: cheops   (05.02.2012 в 21:21)
 

Я сначала так и делал. Но в итоге мне сказали, лучше через запятую, чем в массиве.

  Ответить  
 
 автор: cheops   (05.02.2012 в 23:16)   письмо автору
 
   для: kapitalist   (05.02.2012 в 22:53)
 

А чем лучше-то? Только неудобнее и вот сейчас когда нужно количество ввести, куда его вводить? Массив из одномерного можно в двумерный превратить, а тут что параллельно строку с количеством вводить и писать простыни кода, которые будут проводить согласование двух строк и в котором обязательно будут трудно-улавливаемые ошибки... вообще не понимаю, преимущество одной строки в сессии: медленнее, неудобнее... Если это для cookie, то массив всегда можно быстро свернуть при помощи implode()/explode(). В общем решительно не вижу аргументов в пользу одной строки, тем более когда речь заходит о сложных, таких как корзина, в которой нужно редактировать, обновлять, менять количество, пересчитывать...

  Ответить  
 
 автор: kapitalist   (05.02.2012 в 23:27)   письмо автору
 
   для: cheops   (05.02.2012 в 23:16)
 

Смотри, у меня просто на странице товара сделано так:
if(!empty($_SESSION['cart']))
{
$arr = explode(',', $_SESSION['cart']);
if(in_array($id, $arr))
{
echo "<div id='to_cart1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Добавлено!<br><a href='cart.php'>перейти в корзину</a></div>";
}
else
{
echo "<div id='to_cart'><a href='to_cart.php?id=$id'>Купить!</a></div>";
}
}

А как это сделать, через массив я не понял. И никто не подсказал :(

  Ответить  
 
 автор: kapitalist   (06.02.2012 в 12:40)   письмо автору
 
   для: kapitalist   (05.02.2012 в 23:27)
 

Так. Вообщем пошло по тихоньку.
Код на странице товара сделал так:
if (isset ($_SESSION['cart'][$id])) {
echo "<div id='to_cart1'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Добавлено!<br><a href='cart.php'>перейти в корзину</a></div>";
}
else {
echo "<div id='to_cart'><a href='to_cart.php?id=$id'>Купить!</a></div>";
}


Добавляю id в сессию так:
<?php
session_start
();
$id $_GET[id];
if (isset (
$id)) {
$_SESSION['cart'][$id] = $id
}
$url=$_SERVER['HTTP_REFERER'];
print 
$url;
print 
'<script>document.location="'.$url.'"</script>';
?>


В корзине все вывожу так:
<?  
echo "<table cellspacing='0' cellpadding='0' width='98%' style='margin-left: 6px;'><tr><td class='left_board2'>Название</td><td class='left_board2'>Количество</td><td class='left_board2'>Вес</td><td class='left_board2'>Цена</td></tr>";
    if(isset(
$_SESSION['cart'])){ 
          
$sql "SELECT * FROM catalog WHERE id IN ("
          foreach(
$_SESSION['cart'] as $id => $value) { 
           
$sql .= $id ","
           } 
           
$sql substr($sql,0,-1) . ") ORDER BY id ASC"
           
$query mysql_query($sql); 
           if (!empty(
$query)) { 
           while(
$row mysql_fetch_assoc($query)) {
echo 
"<tr><td class='right_board1'><a href='page.php?id=$row[id]'>$row[title]</a></td><td class='right_board1'></td><td class='right_board1'>$row[ves] кг</td><td class='right_board1'>$row[price] руб.</td></tr>";
           } 
           }else { 
           echo 
"<i>Добавте в корзину чтонить</i>"
           } 
           } else { 
           echo 
"<p>Ваша корзина пуста</p>"
           } 
?>


Но как вывести количество не понимаю! Подскажите, пожалуйста.

  Ответить  
 
 автор: kapitalist   (06.02.2012 в 14:25)   письмо автору
 
   для: kapitalist   (06.02.2012 в 12:40)
 

Неужели никто не может подсказать, как это сделать?

  Ответить  
 
 автор: cheops   (06.02.2012 в 14:39)   письмо автору
 
   для: kapitalist   (06.02.2012 в 12:40)
 

Количество разных видов товаров? Тогда удобно воспользоваться функцией count()
<?php
  
echo count($_SESSION['cart'])."<br />";
?>

  Ответить  
 
 автор: kapitalist   (06.02.2012 в 15:15)   письмо автору
 
   для: cheops   (06.02.2012 в 14:39)
 

Так ведь count показывает общее число. А мне нужно для каждого товара вывести количество и менять его!

  Ответить  
 
 автор: cheops   (06.02.2012 в 15:32)   письмо автору
 
   для: kapitalist   (06.02.2012 в 15:15)
 

Тогда наряду с $_SESSION['cart'][$id] = $id; вам нужно предусмотреть возможность для количества. Вообще не очень понятно, зачем два раза $id - у вас же есть эта информация в ключе, значит значение можно использовать для количества товара, т.е. вместо $_SESSION['cart'][$id] = $id; лучше писать $_SESSION['cart'][$id] = 1;, где 1 и есть количество товара, нужно будет 5 штук, просто увеличите это значение на 4. Тогда и для каждой позиции можно вывести количество товаров и подсчитать общее количество товаров в корзине можно как сумму элементов массива $_SESSION['cart'].

  Ответить  
 
 автор: kapitalist   (06.02.2012 в 16:59)   письмо автору
 
   для: cheops   (06.02.2012 в 15:32)
 

Спасибо! Это переделал. Но как мне сделать если у меня форма выглядит вот так:
echo"<form method='post' action='add_cart.php'> ";
echo "<table cellspacing='0' cellpadding='0' width='98%' style='margin-left: 6px;'><tr><td class='left_board2'>Название</td><td class='left_board2'>Количество</td><td class='left_board2'>Вес</td><td class='left_board2'>Цена</td></tr>";
    if(isset($_SESSION['cart'])){ 
          $sql = "SELECT * FROM catalog WHERE id IN ("; 
          foreach($_SESSION['cart'] as $id => $value) { 
           $sql .= $id . ","; 
           } 
           $sql = substr($sql,0,-1) . ") ORDER BY id ASC"; 
           $query = mysql_query($sql); 
           if (!empty($query)) { 
           while($row = mysql_fetch_assoc($query)) {
echo "<tr><td class='right_board1'><a href='page.php?id=$row[id]'>$row[title]</a></td><td class='right_board1'>";?><input type="text" name="quantity-<?php echo $row['id'];?>" size="5" value="<?php echo "" $_SESSION['cart'][$row['id']]; ?>"/><?echo"</td><td class='right_board1'>$row[ves] кг</td><td class='right_board1'>$row[price] руб.</td></tr>";
           } 
           }
       
           else { 
           echo 
"<i>Добавте в корзину чтонить</i>"
           } 
           } else { 
           echo 
"<p>Ваша корзина пуста</p>"
           } 
?>
</table>
<input type="submit" name="submit" value="Пересчитать" />
</form>


Т.е. как мне увеличить значение для нескольких товаров сразу?

  Ответить  
 
 автор: kapitalist   (06.02.2012 в 18:26)   письмо автору
 
   для: kapitalist   (06.02.2012 в 16:59)
 

Народ подскажите пожалуйста! Не могу я понять!

  Ответить  
 
 автор: kapitalist   (06.02.2012 в 22:21)   письмо автору
 
   для: kapitalist   (06.02.2012 в 18:26)
 

Оказывается все так элементарно:
if($_POST['submit']){
    foreach($_SESSION['cart'] as $id => $value) {
        $_SESSION['cart'][$id]= $_POST['quantity-'.$id];
    }
}

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

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