|
|
|
| Всем доброго утра. Проблема такова. Есть корзина интернет-магазина. На локальном сервере все работает. В сети происходит какая-то невообразимая чехарда с типами данных в переменных. При первом добавлении товара все проходит гладко, но при втором оказывается, что массив в сессиях ($_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($col, int);
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%'> </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:09)
| | Что-то просто немыслимое. Выяснил, что затем, при переходе на другую страницу - безо всякой вообще передачи данных в форму эта самая пременная $col становится массивом 1 => 1. Бред. | |
|
|
|
|
|
|
|
для: ck
(14.02.2006 в 08:36)
| | она и есть массив. при включенном register_globals $_SESSION['col'] и $col - одна и та же переменная, a у вас там еще встречается $_SESSION['col']['id']... | |
|
|
|
|
|
|
|
для: elenaki
(14.02.2006 в 09:47)
| | Поменял имя массива в сессии на kol. То есть просто присваиваю $_SESISON['kol'][$id] = $col;
Но $_SESSION['kol'][$id] упорно считается строкой и умножаться на цену отказывается. Не помогает и прямое приведение к типу integer переменной $col еще до присваивания. Переменная в сессии все равно строковая. | |
|
|
|
|
|
|
|
для: ck
(14.02.2006 в 10:15)
| | Я думаю что проблема как раз в register_globals. Переменная d не передается и врезультате глюк. | |
|
|
|