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

Форум PHP

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

 

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

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

тема: Срочно требуется помощь. Сессии в разных версиях PHP или при разных настройках сервера
 
 автор: ck   (14.02.2006 в 08:09)   письмо автору
 
 

Всем доброго утра. Проблема такова. Есть корзина интернет-магазина. На локальном сервере все работает. В сети происходит какая-то невообразимая чехарда с типами данных в переменных. При первом добавлении товара все проходит гладко, но при втором оказывается, что массив в сессиях ($_SESSION['col']), где хранятся пары id товара => количество купленного товара преобразовался в строку, а только что полученная методом POST переменная $col с информацией о количестве товара в новой покупке превратилась в МАССИВ. Каким образом - Бог весть.
Понимаю, что копаться в длинном коде с утра пораньше - удовольствие сомнительное, и все-таки очень расчитываю на помощь - дело просто горит. В коде сейчас 7 раз встречается строка, выводящая тип трех переменных.
В первый раз она выводит логично:
string
111NULL
NULL

string
222NULL
NULL

string
333NULL
NULL

string
444NULL
NULL

1integer
555array
integer

integer
array
integer

integer
777array
integer

Во второй же:

array
111array
integer

string
222string
string

string
333string
string

string
444string
string

integer
integer
NULL

integer
777integer
NULL

И кроме того - ошибки:
Warning: Cannot use a scalar value as an array in /usr/home/irv/domains/i-r-v.ru/public_html/rif/bascet.php on line 48
Warning: Invalid argument supplied for foreach() in /usr/home/irv/domains/i-r-v.ru/public_html/rif/bascet.php on line 72

Как все это проиходит, можно полюбоваться здесь:
http://www.i-r-v.ru/rif/
Только придется вначале зарегистрироваться.

Помогите, товарищи, а...)
Код:

<?php
include_once("includes/functions.php");
//Проверяем логин и пароль из cookie и сессии, сопоставляя их с базой данных.
$login autorization();
if(empty(
$login)) {
  
refresh('ошибка''reg.php'2'необходима авторизация');
  exit;
}
//Если определена запись на удаление - удаляем
get('d');
if(isset(
$d) && $d != 'all') {
  unset(
$_SESSION['col'][$d]);
  unset(
$_SESISON['sum'][$d]);
  unset(
$_SESSION['cost'][$d]);
  unset(
$_SESSION['name'][$id]);
}
if(
$d == 'all') {
  unset(
$_SESSION['col']);
  unset(
$_SESISON['sum']);
  unset(
$_SESSION['cost']);
  unset(
$_SESSION['name']);
}
//Выводим шапку страницы
$main page('Корзина');
//Открываем буферизацию вывода
ob_start();
//Начинаем печатать таблицу
$menu "<a class = 'left_menu' href = 'javascript: history.go(-1)'>вернуться</a><br /><a class = 'left_menu' href = 'bascet.php?d=all'>очистить коризну</a><br />\n";
echo 
"<table width = '100%' height = '100%' cellpadding = '0' cellspacing = '0' valign = 'top' border = '1'>\n<tr>\n<td width = '100%' height = '20' colspan = '2' align = 'center' valign = 'top'>\n";
echo 
"<form action = 'index.php' method = 'post'>\n<input type = 'text' name = 'search' size = '50' value = '$search' />\n<input type = 'submit' value = 'поиск' />\n</form>\n<br />";
//Печатаем таблицу, ссылку "вернуться" 
echo "</td>\n</tr>\n<tr>\n";
//Печатаем остаток таблицы со словом buys вместо списка покупок
echo "<td width = '85%' align = 'center' valign = 'top'>\nbuys</td>\n</tr>\n</table>\n";
$text ob_get_contents();
ob_clean();
echo 
gettype($col)."<br />111".gettype($_SESSION['col'])."<br />".gettype($_SESSION['col'][$id])."<br />";
post_it('col');
post_it('id');
echo 
gettype($col)."<br />222".gettype($_SESSION['col'])."<br />".gettype($_SESSION['col'][$id])."<br />";
if(!empty(
$col)) {
  echo 
gettype($col)."<br />333".gettype($_SESSION['col'])."<br />".gettype($_SESSION['col'][$id])."<br />";
  
is_number($col);
  echo 
gettype($col)."<br />444".gettype($_SESSION['col'])."<br />".gettype($_SESSION['col'][$id])."<br />";
  
settype($colint);
  if(isset(
$_SESSION['col'][$id])) { $_SESSION['col'][$id] += $col; }
else {
  
$_SESSION['col'][$id] = $col;
}
echo 
$_SESSION['col'][$id];
echo 
gettype($col)."<br />555".gettype($_SESSION['col'])."<br />".gettype($_SESSION['col'][$id]);
  
$res mysql_fetch_array(mysql_query("select * from ASSORTIMENT where id = '$id'"));
  if(
$res['a_col'] < $col) {
    
$_SESSION['col'][$id] = $res['a_col'];
    
$col $res['a_col'];
    echo 
$res['a_col'];
  }
  
$_SESSION['cost'][$id] = $res['a_cost'];
  
$_SESSION['name'][$id] = $res['a_name'];
  
$_SESSION['sum'][$id] = $_SESSION['cost'][$id] * $_SESSION['col'][$id];
}
if(empty(
$_SESSION['col'])) {
  
$text str_replace('buys''<p>корзина пуста</p>'$text);
  
$menu "<a class = 'left_menu' href = 'javascript: history.go(-2)'>вернуться</a>";
  
$main str_replace('content_for_replace'$text$main);
  
$main str_replace('menu_place'$menu$main);
  echo 
$main;
  exit;
}
echo 
"<table width = '100%' cellpadding = '0' cellspacing = '0' border = '1' valign = 'top'>\n<tr>\n<td width = '50%'><p><b>Название товара</b></p></td>\n<td width = '10%'><p><b>Цена товара</b></p></td>\n<td width = '20%'><p><b>Кол-во товара</b></p></td>\n<td width = '10%'><p><b>Сумма за товар</b></p></td>\n<td width = '10%'>&nbsp;</td>\n</tr>\n";
$summa 0;
foreach(
$_SESSION['col'] as $key => $col) {
  echo 
"<tr>\n";
  echo 
"<td width = '50%' align = 'center' valign = 'center'><p><b>".$_SESSION['name'][$id]."</b></p></td>\n";
  echo 
"<td width = '10%' align = 'center' valign = 'center'><p><b>".$_SESSION['cost'][$id]."</b></p></td>\n";
  echo 
"<td width = '20%' align = 'center' valign = 'center'><p><b>".$_SESSION['col'][$id]."</b></p></td>\n";
  echo 
"<td width = '10%' align = 'center' valign = 'center'><p><b>".$_SESSION['sum'][$id]."</b></p></td>\n";
  echo 
"<td width = '10%' align = 'center' valign = 'center'><p><b><a class = 'bascet' href = 'bascet.php?d=$id'>удалить</a></td>\n</tr>\n";
  
$summa += $_SESSION['sum'][$id];
}
echo 
"<tr>\n<td width = '90%' colspan ='4' align = 'center'><p>итого</p></td>\n<td width = '10%'><p>$summa</p></td></tr>\n</table>\n";
echo 
"<a class = 'bascet' href = 'buy.php'>купить</a>";
echo 
gettype($col)."<br />".gettype($_SESSION['col'])."<br />".gettype($_SESSION['col'][$id]);
$t ob_get_contents();
ob_end_clean();
$text str_replace('buys'$t$text);
$main str_replace('content_for_replace'$text$main);
$main str_replace('menu_place'$menu$main);
echo 
$main;
echo 
gettype($col)."<br />777".gettype($_SESSION['col'])."<br />".gettype($_SESSION['col'][$id])."<br />";
?>

   
 
 автор: ck   (14.02.2006 в 08:36)   письмо автору
 
   для: ck   (14.02.2006 в 08:09)
 

Что-то просто немыслимое. Выяснил, что затем, при переходе на другую страницу - безо всякой вообще передачи данных в форму эта самая пременная $col становится массивом 1 => 1. Бред.

   
 
 автор: elenaki   (14.02.2006 в 09:47)   письмо автору
 
   для: ck   (14.02.2006 в 08:36)
 

она и есть массив. при включенном register_globals $_SESSION['col'] и $col - одна и та же переменная, a у вас там еще встречается $_SESSION['col']['id']...

   
 
 автор: ck   (14.02.2006 в 10:15)   письмо автору
 
   для: elenaki   (14.02.2006 в 09:47)
 

Поменял имя массива в сессии на kol. То есть просто присваиваю $_SESISON['kol'][$id] = $col;
Но $_SESSION['kol'][$id] упорно считается строкой и умножаться на цену отказывается. Не помогает и прямое приведение к типу integer переменной $col еще до присваивания. Переменная в сессии все равно строковая.

   
 
 автор: Саша   (14.02.2006 в 13:58)   письмо автору
 
   для: ck   (14.02.2006 в 10:15)
 

Я думаю что проблема как раз в register_globals. Переменная d не передается и врезультате глюк.

   
Rambler's Top100
вверх

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