опять сессии и как их редактировать ?

sebastjan

Новичок
В предыдущем посте о корзине был вопрос по добавлению значения в корзину, с этим разобрался.
Ну теперь мучает вопрос как это дело редактировать.
Перепробовал кучу способов удаления переменной из текущей сесси ,не выходит ничего.
Может кто взглянет и поможет?
Очень буду благодарен!
PHP:
<?
session_start();
echo "<form action='m.php' method='post'>
<input name='id1' type='hidden'/>
<input name='ss1' value='BAZA-Konfety' type='hidden'/>
<input name='ok1' type='submit' value='ok1'/><br/><br/>
<input name='del1' type='submit' value='Delet1'/>
</form>";
echo "<form action='m.php' method='post'>
<input name='id2' type='hidden'/>
<input name='ss2' value='Avrora' type='hidden'/>
<input name='ok2' type='submit' value='ok2'/><br/><br/>
<input name='del2' type='submit' value='Delet1'/>
</form>";
 if( $_POST['ok1']){// esli nazata knopka ok1
	   $i=$_POST['id1'];//inizializacija peremennoi
      $_SESSION['$i']['name-BD']=$_POST['ss1'];
	   foreach($_SESSION['$i'] as $key=>$value)
        { echo $key."====".$value."<br><br>"; }
///////////////////////////////////	 
	}
 if( $_POST['ok2']){// esli nazata knopka ok2
	   $i=$_POST['id2']; //inizializacija peremennoi
      $_SESSION['$i']['sort']=$_POST['ss2'];
	   foreach($_SESSION['$i'] as $key=>$value)
        { echo $key."====".$value."<br><br>"; }
	}
//////////////////////////////////	 
// knopka delet1  dlja udelenia casti sessii
	 if ($_POST['del1']){
	   $i=$_POST['id1'];
	 session_unregister('si');
	 }
?>
 

Redjik

Джедай-мастер
unset () - удаленние переменной сессии

сорри код влом читать =)
 

timach2

Новичок
Мануал говорит session_unregister() function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.

пиши так
PHP:
unset($_SESSION['si']);
 

sebastjan

Новичок
Спасибо за помощь, но есть вопросы с работой сессии
и так моя задача запись переменных в сессию
1-имя_таблицы
2-имя_артикля
3_количество
Затем выводим сессию

Всё вроде бы да работает, но есть одно но,
Я использую две формы со скрытыми полями где передаю переменные и значение в массив сесси.
Но вот сталкнулся с проблеммой, как только совпадают значение переменных из формы, всё ломаеться
Не выводит сессия вторую пару ключ-значение.
Я понимаю что что то туплю, но без вашей помощи полный кирдык,
прошу ткните носом.
Читаю уже вторую неделю про массивы и сессси ,пока что не получаеться
Очень прошу совета и помощи
Вот краткий код
PHP:
<?
session_start(); header("Content-Type: text/html; charset=utf-8"); 
echo "<form action='a1.php' method='post'>
<input name='a' value='TD-B' type='hidden'/>
<input name='b' value='id-Art' type='hidden'/>
<input name='c' value='Summa' type='hidden'/>
<input name='d' value='Stuky' type='hidden'/>
<input name='ok' type='submit' value='ok'/><br/><br/>
</form>
<form action='a1.php' method='post'>
<input name='a' value=TD-B' type='hidden'/>
<input name='b' value='id-Art' type='hidden'/>
<input name='c' value='Summa' type='hidden'/>
<input name='d' value='Stuky' type='hidden'/>
<input name='ok' type='submit' value='ok'/><br/><br/>
</form>";

 if( $_POST['ok']){// esli nazata knopka ok1 prisvaivaem znacenie sessii
    $_SESSION[$_POST['a']]=$_POST['b'];//
     $_SESSION[$_POST['c']]=$_POST['d'];//
 foreach($_SESSION as $key=>$value){ echo $key." = ".$value."<br>";}
   }
?>
 

tiger-nick

Новичок
Попробуй переписать корзину...
А именно:

Создай массив в PHP и записывай в сессию

Пример для одной таблицы(не проверял, но должно работать)
PHP:
//массив товаров в корзине
$kart=array();
// добавление в корзину
function AddToKart($item, $count){
  global $kart;
  //если такой товар уже есть в корзине, то добавляем количество наименований
  if(isset($kart[$item])) $kart[$item]+=$count;
  else $kart[$item]=$count;
}
//чтение данных из сессии (запись в переменную $kart)
function ReadFromKart(){
  global $kart;
  $kart = unserialize($_SESSION['kart']);
}
//удаление из корзины
function DeleteFromKart($item){
  global $kart;
  unset($kart[$item]);
}
//сохранение корзины в сессии
function SaveKart(){
  global $kart;
  $_SESSION['kart']=serialize($kart);
}
Для второй таблицы можно сделать $_SESSION['kart2'] или еще лучше записывать так:
PHP:
//Добавление товаров в корзину
function AddToKart($table, $item, $count){
  global $kart;
  //если такой товар уже есть в корзине, то добавляем количество наименований
  if(isset($kart[$table][$item])) $kart[$table][$item]+=$count;
  else $kart[$table][$item]=$count;
}
//Удаление товара из корзины
function DeleteFromKart($table,$item){
  global $kart;
  unset($kart[$table][$item]);
}
Функции ReadFromKart и SaveKart останутся неизменными и будут работать и во 2м примере

Надеюсь помог :) А все скрытые поля можешь удалить :)

Да, еще одно - если написать на классах, то получится очень даже симпатично и не надо будет использовать "global"!
 

sebastjan

Новичок
громное спасибо за поддержку, отличная идея у вас tiger-nick.
Я подумывал о том чтоб не использовать эту кучу скрытых полей, подумывал о массивах но так как не очень пока разбираюсь с управлением массивов,
пробовал использовать сессии массив.
Ваша мысль по поводу классов вообще кажеться суппер, сажусь учить классы.
Смысл понял, осталось дело за практикой.
Вот подумал о логике.
Может сначало на рнр считать результат с работой пользователя и корзиной а потом уж заносить в класс и сессию, так как в вашем примере.?
 

tiger-nick

Новичок
Вывод данных измассива можно сделать в цикле:
PHP:
foreach($kart as $id => $count){
    echo 'Идентификатор товара = '.$id.'; Количество ='.$count.'<br>';
}
Если использовать классы, то лучше всю логику вписать внутри класса, а потом использовать. Будет выглядеть примерно так:
PHP:
$KART = new Kart;
$KART->Add('id 1го товара', 'количество 1го товара');
$KART->Add('id 2го товара', 'количество 2го товара');
$KART->Add('id 3го товара', 'количество 3го товара');
$KART->Save();
в конструктор класса вписать чтение данных из сессии, т.е. при создании экземпляра класса выгрузку данных из сессии и ее запись в какуюто переменную
 

sebastjan

Новичок
Попробуй переписать корзину...
А именно:

Создай массив в PHP и записывай в сессию

Пример для одной таблицы(не проверял, но должно работать)
PHP:
//массив товаров в корзине
$kart=array();
// добавление в корзину
function AddToKart($item, $count){
  global $kart;
  //если такой товар уже есть в корзине, то добавляем количество наименований
  if(isset($kart[$item])) $kart[$item]+=$count;
  else $kart[$item]=$count;
}
//чтение данных из сессии (запись в переменную $kart)
function ReadFromKart(){
  global $kart;
  $kart = unserialize($_SESSION['kart']);
}
//удаление из корзины
function DeleteFromKart($item){
  global $kart;
  unset($kart[$item]);
}
//сохранение корзины в сессии
function SaveKart(){
  global $kart;
  $_SESSION['kart']=serialize($kart);
}
Для второй таблицы можно сделать $_SESSION['kart2'] или еще лучше записывать так:
PHP:
//Добавление товаров в корзину
function AddToKart($table, $item, $count){
  global $kart;
  //если такой товар уже есть в корзине, то добавляем количество наименований
  if(isset($kart[$table][$item])) $kart[$table][$item]+=$count;///Это получаеться многомерный массив ?
  else $kart[$table][$item]=$count;
}
//Удаление товара из корзины
function DeleteFromKart($table,$item){
  global $kart;
  unset($kart[$table][$item]);
}
Суть я понял но к сожалению мне пока затруднительно выводить из сессии многомерный массив
 

sebastjan

Новичок
Нашол может не очень изящное решение но вроде простое.
Осталось прикрутить редактирование сессии.
PHP:
<?
session_start(); 
header("Content-Type: text/html; charset=utf-8"); 
echo "<form action='a1.php' method='post'>
<input name='id' value='NAME_ARTIKLJ AA'   type='hidden'/>
<input name='ss' value='1'  type='hidden'/>
<input name='b' value='5'  type='hidden'/>
<input name='ok'type='submit' value='ok'/><br/><br/>
</form>
<form action='a1.php' method='post'>
<input name='id' value='NAME_ARTIKLJA_B'   type='hidden'/>
<input name='ss' value='1'  type='hidden'/>
<input name='b' value='6'  type='hidden'/>
<input name='ok'type='submit' value='ok'/><br/><br/>
</form>";

 if( $_POST['ok']){#if1
	$b=$_POST['b'];
	$i=$_POST['id'];
	$_SESSION[$i]="| KOSTET 1x St. |".$_POST['ss']." EU| Kolicestvo |".$_POST['b']."<hr>";
	echo "<p>";
	foreach($_SESSION as $k=>$kk)
	{ echo $k."---".$kk."<br>"; }
    echo "</p>";
   }#if1
/////////////////////////////////////////////
?>
 

sebastjan

Новичок
Есть вопрос по массивам, не подскажите как например при переборе массива те или иные значения передавать к переменным.
К примеру
PHP:
foreach($_SESSION as $k=>$kk)
    { echo $k."---".$kk."<br>"; }
выводит всё подряд что есть.
Может надо останавливать обработку массива , типа с фунцкцией
PHP:
[B]next()[/B]
и передавать значение ?
 

tiger-nick

Новичок
В этом нет ничего сложного, для двух таблиц, нужно будет использовать два цикла:
PHP:
foreach($kart['table1'] as $id => $count){ ... }
foreach($kart['table2'] as $id => $count){ ... }
 
Сверху