Сссия и козина, как то не понятно.

sebastjan

Новичок
Учусь и учусь а понять не могу,
есть две формы, как бы добавление в козину по сессии.
Сессия работает, но не понимаю как мне сделать чтоб не проподала запись а добавлялась.
Придобавлении предыдущая запись исчезает и появляеться новая.
Очень прошу помощи, может кто обьяснит как сделать простую корзину добавлентия артиклей.


PHP:
<?
session_start();
echo "<form action='aaa.php' method='post'>
kolicestvo<input name='a' type='text' size='3'value='1' maxlength='20'/>cena-5.5 eu
<input name='ok1' type='submit' value='ok1'/><br/><br/>
<input name='td_name'  value='TABLIZA_1' type='hidden'/>
<input name='art_name' value='ARTIKEL_1' type='hidden'/>
<input name='cena' value='5.5' type='hidden'/>
udalit iz korzini<input name='del' type='submit' value='Delet'/>
</form><br>";

echo "<form action='aaa.php' method='post'>
kolicestvo<input name='a' type='text' size='3'value='1' maxlength='20'/>cena-7 eu
<input name='ok2' type='submit' value='ok2'/><br/><br/>
<input name='td_name'  value='TABLIZA_2' type='hidden'/>
<input name='art_name' value='ARTIKEL_2' type='hidden'/>
<input name='cena' value='7' type='hidden'/>
udalit iz korzini<input name='del' type='submit' value='Delet'/>
</form>";
if( $_POST['ok1'])
     {
      $_SESSION[i]['td_name']=$_POST['td_name'];
      $_SESSION[i]['art_name']=$_POST['art_name'];
      $_SESSION[i]['cena']+=$_POST['cena'];
      $_SESSION[i]['kol']+=$_POST['a'];  
      $_SESSION[i]['rezult']=$_SESSION[i]['cena']*=$_POST['a'];
       $ss="Iz tablici ".$_SESSION[i]['td_name']." polucen artikel <br>";
       $ss.= $_SESSION[i]['art_name']." - Naimenovaniem <br>";
       $ss.= $_SESSION[i]['kol']."-x-".$_POST['cena']." EU = ".$_SESSION[i]['rezult'];
	   echo $ss;
	}
if( $_POST['ok2'])
     {
      $_SESSION[i]['td_nam']=$_POST['td_name'];
      $_SESSION[i]['art_nam']=$_POST['art_name'];
      $_SESSION[i]['cen']+=$_POST['cena'];
      $_SESSION[i]['ko']+=$_POST['a'];  
      $_SESSION[i]['rezul']=$_SESSION[i]['cen']*=$_POST['a'];
       $dd="Iz tablici ".$_SESSION[i]['td_nam']." polucen artikel <br>";
       $dd.= $_SESSION[i]['art_nam']." - Naimenovaniem <br>";
       $dd.=$_SESSION[i]['ko']."-x-".$_POST['cena']." EU = ".$_SESSION[i]['rezul'];
	   echo $dd;
	}

 if ($_POST['del']){
session_unset($_SESSION[i][$_POST['del']]);
echo "Artikel udalion iz korzini";
}
?>
 

sebastjan

Новичок
Да я так понял что можно любой индекс прикруть, пробовал и ID .
Дело в том что в артикли лежат в разных таблицах базы, и отслеживать по ИД не знаю как,
Вот решил сначала сформировать запрос в сессии где будет название табицы и имя артикля а потом уж при подтверждении загружать из базы то что выбранно.
Наверное логика корявая, но увы поа что не додумался не до чего лучшего.
 

WDStalker

Новичок
наверное правильно $i и оно должно быть ID товара чтобы потом знать, как обратиться к массиву $_SESSION
 

sebastjan

Новичок
PHP:
$_SESSION[i]
Я так понимаю что это ключ, и ему можно присваивать любое навание.
к примеру ключ -это будет название таблицы в базе, для того чтоб потом можно было его извлечь для запроса к определённой таблицы.
PHP:
$_SESSION[i]][a]
второй ключ юудет имя артикля для того же запроса.
а вот как выводить два ключа в массиве тоже не понятно
PHP:
foreach($_SESSION[i] as $key=>$value){ echo $key.'--'.$value."<br>"; }
это я так понял что выведет ключ =значение из ключа [a]
а как перебрать массив чтоб вывело и первый ключ?
 

sebastjan

Новичок
Ну вот привязал к ключу значение, но всё же затираеться предыдущий артикел
почему не пойму?
Вроде бы разные массивы в сессии из каждой формы, но выводит или одно или другое, а хочеться чтоб оставалось уже добавленноев корзину.
PHP:
<?
session_start();
echo "<form action='aaa.php' method='post'>
kolicestvo<input name='a' type='text' size='3'value='1' maxlength='20'/>cena-5.5 eu
<input name='ok1' type='submit' value='ok1'/><br/><br/>
<input name='td_name'  value='TABLIZA_1' type='hidden'/>
<input name='art_name' value='ARTIKEL_1' type='hidden'/>
<input name='cena' value='5.5' type='hidden'/>
udalit iz korzini<input name='del' type='submit' value='Delet'/>
</form><br>";

echo "<form action='aaa.php' method='post'>
kolicestvo<input name='a' type='text' size='3'value='1' maxlength='20'/>cena-7 eu
<input name='ok2' type='submit' value='ok2'/><br/><br/>
<input name='td_nam'  value='TABLIZA_2' type='hidden'/>
<input name='art_nam' value='ARTIKEL_2' type='hidden'/>
<input name='cen' value='7' type='hidden'/>
udalit iz korzini<input name='del' type='submit' value='Delet'/>
</form>";
if( $_POST['ok1'])
     {
	   $i=$_POST['td_name'];
      $_SESSION[$i]['td_name']=$_POST['td_name'];
      $_SESSION[$i]['art_name']=$_POST['art_name'];
      $_SESSION[$i]['cena']+=$_POST['cena'];
      $_SESSION[$i]['kol']+=$_POST['a'];  
      $_SESSION[$i]['rezult']=$_SESSION[$i]['cena']*=$_POST['a'];
       $ss="Iz tablici ".$_SESSION[$i]['td_name']." polucen artikel <br>";
       $ss.= $_SESSION[$i]['art_name']." - Naimenovaniem <br>";
       $ss.= $_SESSION[$i]['kol']."-x-".$_POST['cena']." EU = ".$_SESSION[$i]['rezult'];
	   echo $ss;
	}
if( $_POST['ok2'])
     { 
	 $i=$_POST['td_nam'];
      $_SESSION[$i]['td_nam']=$_POST['td_nam'];
      $_SESSION[$i]['art_nam']=$_POST['art_nam'];
      $_SESSION[$i]['cen']+=$_POST['cen'];
      $_SESSION[$i]['ko']+=$_POST['a'];  
      $_SESSION[$i]['rezul']=$_SESSION[$i]['cen']*=$_POST['a'];
       $dd="Iz tablici ".$_SESSION[$i]['td_nam']." polucen artikel <br>";
       $dd.= $_SESSION[$i]['art_nam']." - Naimenovaniem <br>";
       $dd.=$_SESSION[$i]['ko']."-x-".$_POST['cen']." EU = ".$_SESSION[$i]['rezul'];
	   echo $dd;
	}

 if ($_POST['del']){
session_unset($_SESSION[$i][$_POST['del']]);
echo "Artikel udalion iz korzini";
}
?>
 

tiger-nick

Новичок
Ответ тут

session_unset - закроет всю сессию, т.е. удалятся все ее значения - корзина будет пуста, а в добавок еще и авторизация (при условии, что она имеется и сделана на сессиях)
 

tiger-nick

Новичок
Написал микрокод:
PHP:
<?
session_start();
echo $_COOKIE['PHPSESSID'];
session_unset();
?>
После обновления страницы PHPSESSID остается неизменным, т.е. сессия НЕ ЗАКРЫВАЕТСЯ
 

zerkms

TDD infected
Команда форума
tiger-nick
Ты придаёшь слову "закрываться" в контексте сессий неправильный смысл.

Закрытая сессия - такая, данные которой записаны на диск.
А то, о чём говоришь ты называется регенерация: http://ru2.php.net/manual/en/function.session-regenerate-id.php
 

tiger-nick

Новичок
Просто не поняли друг друга... Одно слово имеет несколько значений - каждый волен понимать их по своему...
Но в данном случае я имел ввиду что сессия не ЗАВЕРШАЕТСЯ (удаление всех данных сессии, и идентификатора), а не регенирацию (замену идентификатора)...
Смыл примера в том, что сессия не завершается и идентификатор не заменяется, просто происходит очистка значений...
 

tz-lom

Продвинутый новичок
tiger-nick
а какая тебе разница что за PHPSESSID там стоит?
важны же данные в сессии,а не её идентификатор
с другой стороны,по неизменному идентификатору можно следить за пользователем в не зависимости от того залогинился он или нет и собирать какую нибудь статистику
 

tiger-nick

Новичок
Разница в том, что если идентификатор существует и он не изменился - это значит, что сессия не была завершена, закрыта, анулирована, удалена, утеряна и т.д. (кому как больше нравится)
Прав zerkms в #8, #10

session_unset() очищает значения сессии, но не удаляет саму сессию, выполняет чтото вроде этого:
PHP:
foreach($_SESSION as $n => $v)
{
    unset($_SESSION[$n]);
}
 

tz-lom

Продвинутый новичок
tiger-nick
зерк то прав,вопрос в том читаешь ли ты что он пишет и что написано в документации
и не менее главный вопрос , на который ты не потрудился ответить (заметь что не мне это нужно,я и так знаю) ,это а нафига убивать PHPSESSID ? при любой попытки хоть что то сделать с сессиией (удалена она,вообще никогда не открывалась или что то ещё) будет тем или иным способом получен PHPSESSID и заведена новая сессия при необходимости , и чего в результате удалением ты добьёшься?
 

tiger-nick

Новичок
Чего можно добится удалением PHPSESSID?
Может это и не существенно, но:
- PHPSESSID хранится в кукисах, а у браузеров есть ограничения на количество переменных и размер данных в кукисах (причем в разных браузерах по-разному);
- при удалении или изменении кука с записью PHPSESSID, данные сессии не удалятся (некоторе время), но идентификатор будет утерян и, к примеру, авторизация вывалится (не проверял, но скорее всего так и будет);

Можно еще рассмотреть одну ситуацию:
На одном и том же сайте с одного компьютера по очереди авторизируются 2 человека (авторизация основанна на сессиях), первый зашел и вышел, у него в сессии накопился определенный набор параметров, а потом вышел, но не закрыл браузер, при этом при переходе по ссылке "выйти" не использовалась функция session_unset(). Потом авторизировался второй человек, у него в сессии другой набор параметров, например: не наполнена корзина... И что он видит: у него в учетке висит заполненная корзина и товары в ней совпадают с товарами того, кто первый был на этом сайте

Это конечно все очень относительно и, возможно, особого смысла не имеет, но это есть... поэтому и обсуждаем :)

А с zerkms я согласился в прошлом сообщении (#16)
 

tz-lom

Продвинутый новичок
но не закрыл браузер, при этом при переходе по ссылке "выйти" не использовалась функция session_unset().
а в чём тогда смысл кнопки "выйти" ? по идее она дропает либо данные с сессии,либо куку(что вариант топорный и череват всякими глупостями типа трекинга куки с последующим восстановлением)
или вы любитель вариантов "а я криво напишу,а потом костыль впишу" ?

А с zerkms я согласился в прошлом сообщении (#16)
я видел,и не с зерком спорю
 

tiger-nick

Новичок
Разные программисты бывают и мануалы тоже разные... Как и ты
это а нафига убивать PHPSESSID
мало кто заморачивается насчет этого... А смысл о есть!
Я, нас самом деле, тоже не заморачивался... Но узнав к чему это может привести в конечном итоге ... лучше пару "лишних" строк напишу, но будет все ОК нежели допустить подобное...

А ты спориш значит? :) Я нет, я человек копающий истину...
 
Сверху