Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Cессии. Несколько значений

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): [1] 2 3 »   

> Без описания
Dezmonds
Отправлено: 27 Мая, 2011 - 08:39:13
Post Id



Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




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

А что если мы нажимаем не на один товар а на несколько ?да и еще и не один раз..
Как записать в сессию несколько значений ? чтобы потом вывести целый список...

Вы купили:
товар 1
товар 36
товар 28

Попробовал сделать так:
При нажатии на кнопку заказать:

PHP:
скопировать код в буфер обмена
  1.  
  2. $_SESSION['$id'] = array('id' => $id, item' => $item,);


Отображение в корзине:
PHP:
скопировать код в буфер обмена
  1. foreach ($_SESSION['$id'] as $id => $item)
  2. echo $id."=>".$item;


Только что то не работает... Выводит в корзине id=>1item=>Товар 1

(Отредактировано автором: 27 Мая, 2011 - 09:05:59)



-----
Колян! Я надыбал макароны!
 
 Top
Toxa
Отправлено: 27 Мая, 2011 - 08:53:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


как это не удивительно, но php выводит именно то, что вы написали. В чем проблема? что сделать-то надо? Если я правильно прочитал ваши мысли (я еще не настоящий телепат), то вам надо сделать вложенный массив
PHP:
скопировать код в буфер обмена
  1. $_SESSION['$id'] = array_push($_SESSION['id'], array('id' => $id, 'item' => $item));


ну и вывод, соответственно будет таким
PHP:
скопировать код в буфер обмена
  1. foreach ($_SESSION['$id'] as $array) {
  2.    echo $array['item'];
  3. }


-----
Удобный сервис для хранения файлов
 
 Top
Dezmonds
Отправлено: 27 Мая, 2011 - 09:02:23
Post Id



Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Собственно ругаеться Недовольство, огорчение
Warning: array_push() expects parameter 1 to be array, string given in (это на главной, где добавляем сессии в массив )

Warning: Invalid argument supplied for foreach() in (это в корзине. вывод)


-----
Колян! Я надыбал макароны!
 
 Top
Toxa
Отправлено: 27 Мая, 2011 - 09:06:18
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


ну это потому, что надо было предварительно объявить $_SESSION['id'] как массив

а вторая ошибка - следствие первой


-----
Удобный сервис для хранения файлов
 
 Top
Dezmonds
Отправлено: 27 Мая, 2011 - 09:13:35
Post Id



Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Toxa пишет:
ну это потому, что надо было предварительно объявить $_SESSION['id'] как массив

а вторая ошибка - следствие первой

Извините многого не знаю... просто на хороших примерах мне проще учиться...

PHP:
скопировать код в буфер обмена
  1. $_SESSION['$id'] = array();
  2. foreach ($_SESSION['$id'] as $array) {
  3.    echo $array['item'];
  4. }

В корзине объявил- но ничего теперь не выводит. на главной тоже объявил.
если в корзине объявить так: тогда выдает ошибку - > Warning: Invalid argument supplied for foreach() in если так: тогда ошибок нет, но ничего не выводит.


-----
Колян! Я надыбал макароны!
 
 Top
Toxa
Отправлено: 27 Мая, 2011 - 09:36:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


эта строчка означает, что отныне переменная $_SESSION['id'] будет представлять собой массив, причем ПУСТОЙ. Так что прописывать ее надо ДО занесения каких-либо данных в массив. То есть в нашем случае до
PHP:
скопировать код в буфер обмена
  1. $_SESSION['$id'] = array_push($_SESSION['id'], array('id' => $id, 'item' => $item));


И далее нигде!
А вообще приведите весь листинг скриптов, пожалуйста, а то не совсем понятно, чего вы хотите сделать


-----
Удобный сервис для хранения файлов
 
 Top
svbPavel
Отправлено: 27 Мая, 2011 - 09:39:22
Post Id



Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Март 2011  
Откуда: Свободный


Помог: 0 раз(а)




Если я правильно понял, то можно сделать примерно так (пишу с коленки))):

массив такой:
PHP:
скопировать код в буфер обмена
  1.  
  2. $cart = array('id' =>'id', // id юзера ?
  3.                     'cart'=array('item_id'=>'count')
  4.                     ) ;
  5.  
  6. $_SESSION['id'] = $cart ;
  7.  

далее показываем саму карзину:
PHP:
скопировать код в буфер обмена
  1.  
  2. foreach($_SESSION['id'] as $val){
  3.         if(is_array($val)){
  4.                 foreach($val as $item_id=>$item_count){
  5.                         echo "<p>$item_id - $item_count штук" ;
  6.                 }
  7.         }
  8. }
  9.  
 
 Top
Dezmonds
Отправлено: 27 Мая, 2011 - 09:46:45
Post Id



Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Да тут толком то какой код.. скилет не больше..

index.php

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. include("bd/bd.php");
  4. include("item.php");
  5.  
  6. $result = mysql_query("SELECT * FROM product",$db);
  7. if (!$result)
  8. {
  9.         echo "<p>Ошибка выборки";
  10.         exit(mysql_error());
  11. }
  12. if (mysql_num_rows($result) > 0)
  13. {
  14. $myrow = mysql_fetch_array($result);
  15.  
  16. do
  17. {
  18.  
  19. $myrow["description"] = mb_substr($myrow["description"],0,100,'utf-8');
  20. <div class='pizza_view'>
  21. <form action='' method='post'>
  22.  
  23. <input name='id' type='hidden' value='%s'>
  24. <input name='name' type='hidden' value='%s'>
  25.    <table width='225' height='339'>
  26.  <tr>
  27.    <td height='206' colspan='2' align='center'><img src='%s' width='225' height='225'></td>
  28.    </tr>
  29.  <tr class='add_to_cart'>
  30.    <td width='115' height='17' align='center'><span class='wight'>%s гр.</span</td>
  31.    <td width='113' align='center'><span class='price'>%s</span></td>
  32.  </tr>
  33.  <tr>
  34.    <td height='57' colspan='2' align='left' valign='top'>%s</td>
  35.    </tr>
  36.  <tr>
  37.    <td height='23' align='center' valign='top'> Колличество: <input name='' type='text' value='1' class='coll'></td>
  38.    <td height='23' align='center' valign='top'>   <input name='submit' type='submit' value='Заказать' class='bottom_coll'> </td>
  39.  </tr>
  40.    </table>
  41. </form>
  42.    </div>",$myrow["id"],$myrow["name"],$myrow["img"],$myrow["wight"],$myrow["price"],$myrow["description"]);
  43. }
  44. while ($myrow = mysql_fetch_array($result));
  45.  
  46. }
  47. else
  48. {
  49.         echo "<p>В таблице нет записей.</p>";
  50.         exit();
  51. }
  52. ?>  
  53.  
  54.  
  55.  


basket.php
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  <?PHP
  4.  
  5. foreach ($_SESSION['$id'] as $array) {
  6.    echo $array['item'];
  7. }
  8.  
  9.  ?>      
  10.  
  11.  



item.php
PHP:
скопировать код в буфер обмена
  1. <?
  2. if(isset($_POST['id'])){$id = $_POST['id'];     }
  3. if(isset($_POST['name'])){$item = $_POST['name'];       }
  4.  
  5. if(isset($_POST['submit']))
  6. {
  7. $_SESSION['id'] = array();
  8. $_SESSION['$id'] = array_push($_SESSION['id'], array('id' => $id, 'item' => $item));
  9.  
  10. }
  11. ?>


-----
Колян! Я надыбал макароны!
 
 Top
pome
Отправлено: 27 Мая, 2011 - 10:06:30
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Цитата:
Только что то не работает... Выводит в корзине id=>1item=>Товар 1


попробуй код:

PHP:
скопировать код в буфер обмена
  1.  
  2. $arr=Array();
  3. array_push($arr, 1);
  4. array_push($arr, 36);
  5. array_push($arr, 28);
  6.  
  7. $_SESSION['$id'] = $arr;
  8. foreach ($_SESSION['$id'] as $id => $item) echo "$id=>$item<br>";

(Отредактировано автором: 27 Мая, 2011 - 10:07:02)

 
 Top
Dezmonds
Отправлено: 27 Мая, 2011 - 10:40:46
Post Id



Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




pome ни то...

Нужно сделать чтобы товар, на которы я нажал. добавлялся в сессию..
Даже если я на главной нажал заказать для 5 разных товаров, чтобы все эти 5 товаров записались в сессию

А в корзине выводились все товары из сессии (которые пользователь добавил в корзину)


-----
Колян! Я надыбал макароны!
 
 Top
pome
Отправлено: 27 Мая, 2011 - 11:17:14
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Dezmonds пишет:
pome ни то...

Нужно сделать чтобы товар, на которы я нажал. добавлялся в сессию..
Даже если я на главной нажал заказать для 5 разных товаров, чтобы все эти 5 товаров записались в сессию

А в корзине выводились все товары из сессии (которые пользователь добавил в корзину)


Блин да все то:
index.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. foreach ($_POST as $key => $value) {
  4.         if (!$_SESSION['id']) $_SESSION['id']=Array();
  5.         $_SESSION['id'][$_POST['tovar']]=$_POST['col'];
  6. }
  7. print_r($_SESSION);
  8.  
  9. ?>
  10.  
  11. <table border=1>
  12. <form action='' method='post'>
  13. <tr><td>Товар 1<input type='hidden' value='1' name='tovar'></td>
  14. <td><input type='text' name='col'></td>
  15. <td><input type='submit'></td></tr></form>
  16. <form action='' method='post'>
  17. <tr><td>Товар 36<input type='hidden' value='36' name='tovar'></td>
  18. <td><input type='text' name='col'></td>
  19. <td><input type='submit'></td></tr></form>
  20. <form action='' method='post'>
  21. <tr><td>Товар 28<input type='hidden' value='28' name='tovar'></td>
  22. <td><input type='text' name='col'></td>
  23. <td><input type='submit'></td></tr></form>
  24. </table>
  25.  
  26. <a href='busket.php'>корзина:</a>
  27.  
  28.  


busket.php:
 
 Top
svbPavel
Отправлено: 27 Мая, 2011 - 11:33:25
Post Id



Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Март 2011  
Откуда: Свободный


Помог: 0 раз(а)




во еще как можно Улыбка
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //Добавление товара в корзину
  4. if($_SESSION['cart']){
  5.         $cart = $_SESSION['cart'] ;
  6. } else $cart = array() ;
  7.  
  8. $item_id = 123456 ; //ид товара
  9. $item_count = 1 ; //количество товара
  10.  
  11. $cart[$item_id] = $item_count ; // тут добавление
  12. $_SESSION['cart'] = $cart ;
  13. ?>
  14.  
  15. <?PHP
  16. //Вывод товара из корзины
  17. $cart = $_SESSION['cart'] ;
  18. foreach($cart as $item_id=>$item_count) {
  19.         echo "ID товара: $item_id , количество: $item_count " ;
  20. }
  21. ?>
  22.  
  23. <?PHP
  24. //Удалить товар из корзины можно какнить так (если индийски код, извиняюсь, тоже новичек в пхп)))
  25. function delete_item($cart, $delete_id){
  26. $new_cart = array() ;
  27.         foreach($cart as $item_id=>$item_count){
  28.                 if($item_id != $delete_id){
  29.                         $new_cart[$item_id]=$item_count ;
  30.                 }
  31.         }
  32.         return $new_cart ;
  33. }
  34. ?>
  35.  

(Отредактировано автором: 27 Мая, 2011 - 11:34:45)

 
 Top
Dezmonds
Отправлено: 27 Мая, 2011 - 11:35:49
Post Id



Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Спасибо pome. что то видимо я напутал Улыбка точно ) работает...
толи я какой то глупый толи что... но не могу никак разжевать что собственно тут происходит словами...
Прочитал http://php.su/learnphp/cs/?cycles раза 4 и все равно.. не могли бы вы мне словами разжевать.

PHP:
скопировать код в буфер обмена
  1. foreach ($_POST as $key => $value)
  2. {
  3. if (!$_SESSION['id'])
  4. $_SESSION['id']=Array();
  5. $_SESSION['id'][$_POST['name']]=$_POST['count'];
  6. }
  7.  

(Отредактировано автором: 27 Мая, 2011 - 11:40:56)



-----
Колян! Я надыбал макароны!
 
 Top
pome
Отправлено: 27 Мая, 2011 - 12:21:50
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Dezmonds пишет:
не могли бы вы мне словами разжевать.

PHP:
скопировать код в буфер обмена
  1. foreach ($_POST as $key => $value)
  2. {
  3. if (!$_SESSION['id'])
  4. $_SESSION['id']=Array();
  5. $_SESSION['id'][$_POST['name']]=$_POST['count'];
  6. }
  7.  


Короче суть такова: при каждом нажатии кнопки "добавить" перезагружается страничка и приходит массив $_POST такого вида :
$_POST (Array)
['name']=1;
['col']=3;

кстати, код можно упростить, если передаются данные ОДНОГО товара. А так и есть
PHP:
скопировать код в буфер обмена
  1.  
  2. if (!$_SESSION['id']) $_SESSION['id']=Array();
  3. $_SESSION['id'][$_POST['name']]=$_POST['count'];
  4.  


Ну и соответственно в $_SESSION['id'] под номером товара записывается его заказанное количество. Да и все собственно.

теперь
$_SESSION['id'] (Array)
[1]=3;

при следующем обращении к страничке это значение никуда не девается, можно добавлять новые или удалять старые (unset($_SESSION['id'][1]))

PS: не забудь про спасибоУлыбка
 
 Top
Dezmonds
Отправлено: 27 Мая, 2011 - 12:32:00
Post Id



Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




pome - так, вроде понятно, а как можно вывести это в нужном мне стиле.
Тоесть не так как выводит:

Array ( [id] => Array ( [Маргарита] => 1 [Гавайская] => 50 ) )
А скажем так:

Id Товар: Колличество: Сумма:
1 Маргарита 1 -
2 Гавайская 50 -

И вообще как управлять определенными данными в массиве.. Тоесть допусти по id /
Типа удалить товар где Id = 1

P.S: я бы рад.. как только наберу нужное колличество постов с меня обязательно спасибо!


-----
Колян! Я надыбал макароны!
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB