въпрос за $_SESSION

voynski

Registered
Значи имам продукт в дадена категория, искам като натисна даден бутон да ми вкарва категория_id и продукт_id в сесията. Незнам как се пи6е тва във
$_SESSION[] . Целта ми е после от базата да ми вади чрез тази сесия продуктите по категории. Кликнал съм на продукт банан да речем от категория плодове после на ябълка от същатата категория после на морков от зеленчуци и т.н. и да запемятава какво съм кликал и после по дадена категория да ми ги показва...от сесията. Дано да съм успял да го обясня :)
 
я пробвай нещо такова
$_SESSION['products']=array();
$_SESSION['products'][0]='bannan';
$_SESSION['products'][1]='dran dran';
и тнт
после print_r($_SESSION['products']); за да си видиш резултатите
 
$_SESSION['koshnica'] = array('key'=>'value');
и после each/foreach 3a $_SESSION['koshnica'], но важно е да се предвиди:
cookie size limit in IE is 4 KB (4096 bytes),
особено, като се има предвид, че това са само cookie-ma за потребителската кошница, а ако има и др., напр. user-login-cookies...
8)
 
Стигнах до следното нещо:

Код:
$_SESSION['cart'] = array($category_id=>array());

Така мисля че ще стане, но по какъв начин да вкарвам прудкт-id във вътрешния масив
Веднъж ще проверявам дали има категория с дадено id - ако няма създава такъв елемент във първия масив сас продукт_id във втрешния, ако има такава категория вече и ще проверява вътре дали има таквъв прудкти ако няма го вкарва ако го има return false да речем..

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

Първоначално създаване:

$cart[]="produkt 1";
$cart[]="produkt 2";
$cart[]="produkt 3";

$_SESSION['cart'] =$cart;

...регистрираш сесийна променлива, стойността й е стойността на масива.


Проверка за сесйна променлива и получаване на масива:

if(isset($_SESSION['cart'] ))
{
$cart=$_SESSION['cart'];
}

...обхождаш си масива $cart съвсем стандартно, пренареждаш го и т.н.
Ако правиш промени, повтаряш 1 действие, за да актуализираш стойността на сесийния масив.


Заличаване на сесийната променлива:

$_SESSION['cart']=array();
unset($_SESSION['cart']);

И това е всичко :)

Може да видиш и този урок:
http://it-place.net/index.php?type=dev&rid=5&srcid=531

По-специално частта "сесии и масиви"...

Успех!
 
Код:
//тука изкарваш от базата данни
while($row = mysql_fetch_array($result))
{
       $category[] = $row['category_id'];
       $produkt[] = $row['produkt_id'];
}

$_SESSION['cat'] = $category;
$_SESSION['produkt'] = $produkt;

foreach($_SESSION['cat'] as $cat)
{
       echo $cat."<br>\n";
}

foreach($_SESSION['produkt'] as $prod)
{
        echo $prod."<br>\n";
}

ако искаш да ги съединиш

Код:
//тука кода по горе

$totalarr = array_combine($category, $produkt);

$_SESSION['arr'] = $totalarr;

foreach($_SESSION['arr'] as $k=>$v)
{
        echo $k."=>".$v."<br>\n";
}
 
relax каза:
Код:
//тука изкарваш от базата данни
while($row = mysql_fetch_array($result))
{
       $category[] = $row['category_id'];
       $produkt[] = $row['produkt_id'];
}

$_SESSION['cat'] = $category;
$_SESSION['produkt'] = $produkt;

foreach($_SESSION['cat'] as $cat)
{
       echo $cat."<br>\n";
}

foreach($_SESSION['produkt'] as $prod)
{
        echo $prod."<br>\n";
}

ако искаш да ги съединиш

Код:
//тука кода по горе

$totalarr = array_combine($category, $produkt);

$_SESSION['arr'] = $totalarr;

foreach($_SESSION['arr'] as $k=>$v)
{
        echo $k."=>".$v."<br>\n";
}

А как да разбера кой продукт към коя категория е като комбинирам така двата масива ? И мен ми трябва да ги изкарам от базата след като сам ги записал в сесията. Там (в сесията) трябва всеки продукт да е свързан с категорията си
 
Ако колоните в БД са ти

Код:
produkt_id    category_id

и под тях имаш

Код:
produkt_id      category_id
qbylka               plodove
krusha               plodove
opel                    koli

то в масива ще стане така

Код:
array("qbylka" => "plodove", "krusha" => "plodove", "opel"=>"koli");

пък чрез foreach вече вадиш така

$k - ключ т.е. ще вади продукта
$v - стойност т.е. ще вади категорията
 
Ще се опитам пак да го обясня ...

Да ги изкарам от базата е лесно. Но в самата сесия как да се запомнят и да са свързани...


Он-лайн магазин - кликаш на категория плодове - излизат всички с картинки и т.н... Кликаш на банан - банана отива в количката , но в количката да излиза "плодове - 1 брой". Кликаш на праскова - в количката става "плодове - 2 броя", кликаш на морков - в количката става "зеленчуци - 1 брой" . Сътветно ще си го направя тия плодове и зеленчуци и т.н. да са с "+" от пред като го натисна става "-" и показва кои са продуктите под категориите.

Така сега как като кликнеш на продукт сесията да записва категорията и продукта. Това според мен става с двумерни масиви в сесията , но как се пише ...
Трябва да е нещо от сорта :
Код:
$_SESSION['cart']=array($category_id=>array($product_id,$product_id,$product_id...),
$category_id=>array($product_id,$product_id,$product_id...));
 
Ами сега утивам на даскало довечера ако не ме мързи ще ти го направя пък ако искаш ми виж урока който съм писал(той е само един) и гледай от него как съм го писал като масива го слагаш в сесия. Незнам ама май няма да се оправиш като се прибера довечера ще го напрая
 
voynski,
не се сърди, но ми се струва, че ще ти помогне, ако прочетеш малко за масивите. Проблема със сесиите е едно, но с масивите - друго. Тук има много подробен урок за тях - виж в уроците на bafitu.

Моето предложение е да използваш двумерен масив или 2 взаимосвързани масива - първия за категорията, а втория за продукта.

Пример:

$cart[]="produkt 1";
$cart[]="produkt 2";
$cart[]="produkt 3";

$kat[]="kategoriq 1";
$kat[]="kategoriq 3";
$kat[]="kategoriq 5";


$_SESSION['cart'] =$cart;
$_SESSION['kat'] =$kat;

...забележи, че и двата масива са индексирани по подразниране. Така на продукт 1 съответства категория 1, на продукт 2 - категория 3 и т.н.


Ето и обхода на двата масива от примера:

for($i=0; $i <count($cart); $i++)
{
$produkt=$cart[$i];
$kategoriq=$kat[$i];

echo "Категория: $kategoriq - Продукт: $produkt <BR>";
}

Ориентираш ли се?
 
sizif само не разбрах каква е разликата между твоя и моя код като моя е по по-краткия начин ако разбираше автора поне малко от ПХП щеше да види че кода е много лесен
 
relax,

от поне 4 часа спя, но помисли малко и ще видиш, че двумерния ти масив е сбъркан логически, същото се отнася за цялата идея с "ключ - категория" защото:
А) може да имаш няколко продукта от една категория. Тук имаш 2 хипотези - асоциативен масив/цифров масив

В първия случай (зависи от начина на образуване на масива) или ще можеш да го обходиш, но само с foreach или while, което значи без да можеш да управляваш процеса или при постъпково създаване елемент след елемент, просто ще губиш продукти.
Във втория случай - цифрово индексиране, дублираната категория означава със сигурност, че ще 'изтриеш' първата присвоена стойност.

Б) процесът е неуправляем. Ако все пак го докараш до масив, той ще е хаотичен и ще трябват отново foreach или while. Ако искаш да изтриеш продукт, т.е. да премахнеш елемент, колко операции трябва да извършиш, за да го локализираш и каква сигурност ще имаш?

Мисля, че би трябвало да гледаш на проблема не само откъм момента на спечелване на точката. Човека ще иска да ползва този скрипт.

Отивам да спя.

Успех и на двамата!
 
не е на мен не ми е до точката аз ако исках точки във всяка тема щях да пиша довечера ще ако не ма мързи ако нямам работа по друго нещо ще му го напиша
 
И двамата не схванахте за какво говоря, може и да не разбирам толкова от php но успях да да го направя то4но както си мислех че трябва да е :

$_SESSION['cart'] = array($category_id=>array($product_id,$product_id...),
$category_id=>array($product_id,$product_id...));

Утре ако не ме домързи ще ви го напиша
 
Значи няма смисъл и аз да си напъвам мозъка.. ? Пък ако си напълн сигурен пусни направо урок
 

Back
Горе