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

Форум PHP

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

 

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

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

тема: формирование и вывод элементов сессионного масива
 
 автор: inga   (31.07.2007 в 13:21)   письмо автору
 
 

Формирую карзину для покупателя:

<?
if(isset($_SESSION["count"])) // Если есть
 
$_SESSION["count"] (тоесть человек уже что 
то выбирал
создаю переменную $count и 
таким образом создаю следуйщий индекс для 
нового товара записывая его в сессионные 
переменные
 
{
     echo 
$count=$_SESSION["count"]+1;
     
$_SESSION["index['".$count."']"]=$indeks;
     
$_SESSION["name['".$count."']"]=$name;
     
session_unregister("count");// удаляю чтобы после присвоить новое значение
     
$_SESSION["count"]=$count;
 }
 else 
// Если же $_SESSION["count"] нет то записываю все в 0 элемент.
 
{
     
$count=0;
     
$_SESSION["index['".$count."']"]=$indeks;
     
$_SESSION["name['".$count."']"]=$name;
     
$_SESSION["count"]=$count;
 }
// ну и тут вывожу
 
for($i=0$i<$count+1;$i++)    
 {
      if(
$i==1) continue; // это пришлось 
написатьтак как постоянно выдает ошибку 
что первого элемента нет
не понятно почему 
его нет
     
echo "<tr>";
               echo 
"<td >".$_SESSION["index['".$i."']"]."</td>";
               echo 
"<td >".$_SESSION["name['".$i."']"]."</td>";
     echo 
"</tr>";
}
?>

И выходит ерунда. В карзине больше чем два товара не выводит, первый выводит тот что был выбран в самом начале и вторым выводит последний, сколько бы я их не выбирала. ПОМОГИТЕ РАЗОБРАТЬСЯ

   
 
 автор: Trianon   (31.07.2007 в 13:27)   письмо автору
 
   для: inga   (31.07.2007 в 13:21)
 

определите, пожалуйста, переменные $indeks и $name
А то непонятно, откуда что берется.
умалчиваемая нумерация индексов в массиве идет от нуля.
Так что добавлять единицу не требуется.

   
 
 автор: inga   (31.07.2007 в 14:49)   письмо автору
 
   для: Trianon   (31.07.2007 в 13:27)
 

Переменная $indeks перкедается при выборе товара, а $name вытягивается из базы в зависимости от $indeks.

   
 
 автор: Trianon   (31.07.2007 в 15:09)   письмо автору
 
   для: inga   (31.07.2007 в 14:49)
 

если name зависит от indeks - её вообще в сессии можно не держать.
я так понимаю, indeks - это код товара?
<? 
    session_start
();
    
$kodtov intval($_POST['kodtov']); 
    if(!isset 
$_SESSION['tov'][$kodtov]) 
        
$_SESSION['tov'][$kodtov] = 0;
    ++ 
$_SESSION['tov'][$kodtov];

   
    
$list implode(','array_keys($_SESSION['tov']));
    
$res =   mysql_query($sql "SELECT id, name FROM tovar WHERE id IN ($list)"
        or die(
"Error in $sql :"mysql_error());
    for(
names = array(); $row  mysql_fetch_assoc($res); )
        
$names[$row['id']] = $row['name'];

    foreach(
$_SESSION['tov'] as $tov => $count)
        echo 
"Code: $tov, Name: ".htmlspecialchars($name[$tov]).", count: $count<br/> \r\n";
}
?>

   
 
 автор: inga   (31.07.2007 в 16:32)   письмо автору
 
   для: Trianon   (31.07.2007 в 15:09)
 

если я indeks не буду держать в сесиии как же он выведется в карзине. Я вообще все держу в сессиях, там помимо этих переменных еще много всякого, подсчет цены и др. Тут я написала сокращенный вариант. Пока человек не определился окончательно с выбором товара все держу в сессии, он же может еще и удалить чтото, а после уже все буду записывать в базу. Так подскажите где ошибка в моем примере?

   
 
 автор: inga   (31.07.2007 в 16:55)   письмо автору
 
   для: inga   (31.07.2007 в 16:32)
 

вот я вывожу все сессионные пременные:

array(40) { ["metka"]=> &int(0)
1) товар ["index['0']"]=> &string(4) "8303" 
["name['0']"]=> &string(9) "АБОНЕМЕНТ" 
["smsp['0']"]=> &string(4) "0.27" 
["shtuki['0']"]=> &string(1) "1" 
["cena_pered['0']"]=> &float(1.5) 
["cena['0']"]=> &float(0.045) ["q['0']"]=> 
&int(1) ["messs['0']['1']"]=> &int(0) 
["messs['0']['2']"]=> &int(0) ["messs['0']
['3']"]=> &int(0) ["messs['0']['4']"]=> 
&int(0) ["messs['0']['5']"]=> &int(0) 
["messs['0']['6']"]=> &int(0) ["messs['0']
['7']"]=> &int(1) ["messs['0']['8']"]=> 
&int(0) ["messs['0']['9']"]=> &int(0) 
["messs['0']['10']"]=> &int(0) ["messs['0']
['11']"]=> &int(0) ["messs['0']['12']"]=> 
&int(0) 

2) товар ["index['2']"]=> &string(4) "8232" 
["name['2']"]=> &string(20) "АВТО ВОСТОК 
(ХАРКIВ)" ["smsp['2']"]=> &string(4) "10.1" 
["shtuki['2']"]=> &string(1) "1" 
["cena_pered['2']"]=> &float(1.5) 
["cena['2']"]=> &float(11.6) ["q['2']"]=> 
&int(1) ["messs['2']['1']"]=> &int(0) 
["messs['2']['2']"]=> &int(0) ["messs['2']
['3']"]=> &int(0) ["messs['2']['4']"]=> 
&int(0) ["messs['2']['5']"]=> &int(0) 
["messs['2']['6']"]=> &int(0) ["messs['2']
['7']"]=> &int(1) ["messs['2']['8']"]=> 
&int(0) ["messs['2']['9']"]=> &int(0) 
["messs['2']['10']"]=> &int(0) ["messs['2']
['11']"]=> &int(0) ["messs['2']['12']"]=> 
&int(0) ["count"]=> &int(1) } 

может это поможет понять где ошибка, вот видите первого индеска нет и больше двух в карзину не записывается, просто проподает то что было выбрано предпоследним

   
 
 автор: Trianon   (31.07.2007 в 18:10)   письмо автору
 
   для: inga   (31.07.2007 в 16:32)
 

Ошибка в том, что с массивами в php так не работают.
Вы пытаетесь типичный C-код переложить на php.
Посмотрите, как это делается в php

<?
session_start
();
$indeks код_товара;
$name   наименование_товара;
if(!isset(
$_SESSION["index"][$indeks])) // Если нет $_SESSION["index"][idx] (тоесть человек еще не выбирал этот товар)
 
{
     echo 
$count=$_SESSION["count"]+1;
     
$_SESSION["index"]['count']=0;
     
$_SESSION["index"]['name']=$name;
 }
 ++
$_SESSION["index"]['count'];

// никаких session_unregister - это старый инструмент
// ну и тут вывожу
 
foreach($_SESSION["index"] as $idx => $tov)
 {
     echo 
"<tr>";
               echo 
"<td >".$idx."</td>";
               echo 
"<td >$tov[name]</td>";
               echo 
"<td >$tov[count]</td>";
     echo 
"</tr>";
}
?>

   
 
 автор: inga   (01.08.2007 в 11:16)   письмо автору
 
   для: Trianon   (31.07.2007 в 18:10)
 

ну так вообще не работает, откуда будет браться count?
при выводе переменных сессии выводит:

["index"]=> &array(1) { ["count"]=> string(5) "30246" } ["name"]=> &array(1) { ["count"]=> string(5) "AVISO" } ["smsp"]=> &array(1) { ["count"]=> string(5) "16.76" } ["shtuki"]=> &array(1) { ["count"]=> string(1) "1" } ["cena_pered"]=> &array(1) { ["count"]=> float(1.5) } ["cena"]=> &array(1) { ["count"]=> float(18.26) } ["q"]=> &array(1) { ["count"]=> int(1) } ["count"]=> &int(1) ["messs"]=> &array(1) { ["$count"]=> array(1) { ["$i"]=> int(0) } } }

Может я не правильно как то вопрос задаю, уже не знаю что думать

   
 
 автор: Trianon   (01.08.2007 в 12:20)   письмо автору
 
   для: inga   (01.08.2007 в 11:16)
 

count - если если вы говорите о количестве заказанного товара определенного кода - должен храниться (и наращиваться) в одном из элементов подмассива, по индексу кода товара.
count - количество выбранных видов товара - должно определяться функцией count(массив_с товарами)

Код и вправду нужно несколько поправить.
<?
session_start
();
$indeks код_товара;
$name   наименование_товара;
if(!isset(
$_SESSION["index"][$indeks])) // Если нет $_SESSION["index"][idx] (тоесть человек еще не выбирал этот товар)
 
{
     
$_SESSION["index"][$indeks]['count']=0;
     
$_SESSION["index"][$indeks]['name']=$name;
 }
 ++
$_SESSION["index"][$indeks]['count'];

 foreach(
$_SESSION["index"] as $idx => $tov)
 {
     echo 
"<tr>";
               echo 
"<td >".$idx."</td>";
               echo 
"<td >$tov[name]</td>";
               echo 
"<td >$tov[count]</td>";
     echo 
"</tr>";
}
?>


давайте всё же определимся, откуда поступают данные, и каким образом нужно их вывести на экран.

   
 
 автор: inga   (01.08.2007 в 12:55)   письмо автору
 
   для: Trianon   (01.08.2007 в 12:20)
 

спасибо, вроде уже разобралась.

   
Rambler's Top100
вверх

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