Forum Webscript.Ru

Программирование => PHP => Тема начата: Turok от 12 Апреля 2006, 15:50:48

Название: Массив сессии - все время ошибка (
Отправлено: Turok от 12 Апреля 2006, 15:50:48
Приветствую вас!
Помогите плиз с кодом. Задумка такая: есть каталог товаров в БД, нужно чтобы велась статистика показов товара. Счетчик увеличивается только если смотрящий "уникальный".
Делаю при помощи сессий (особая уникальность не требуется), но никак не получается без ошибок. т.е. либо ошибки (Warning: in_array(): Wrong datatype for second argument и Warning: array_push(): First argument should be an array) постоянны либо только при просмотре первого любого товара( а далее все работает как нужно).
вот код: так ошибки постоянно

session_start();
setcookie(session_name(),session_id(), time()+3600, "/");
$id=(int)$id;
$id="".$_GET["id"];

if (!session_is_registered(\'countid\')) session_register(\'countid\');
if (in_array($id, $_SESSION[\'countid\']))
{

}else {
array_push($_SESSION[\'countid\'], $id);
$scount = mysql_query("UPDATE Tovar SET t_count=t_count+1 WHERE t_id=\'$id\'") or die("Error: ".mysql_error());
}
 

а так ошибка только при первом просмотре:

session_start();
setcookie(session_name(),session_id(), time()+3600, "/");
$id=(int)$id;
$id="".$_GET["id"];

$_SESSION[\'countid\'];
$countid[]=0;
$countid=array_unique($countid);
$countid=array_values($countid);

if (in_array($id, $_SESSION[\'countid\']))
{

}else {
array_push($_SESSION[\'countid\'], $id);
$scount = mysql_query("UPDATE Tovar SET t_count=t_count+1 WHERE t_id=\'$id\'") or die("Error: ".mysql_error());
}
 
Помогите плиз удержать массив без ошибок.
Название: Массив сессии - все время ошибка (
Отправлено: for_i_0 от 12 Апреля 2006, 16:28:40
Цитировать
Turok:
Wrong datatype for second argument и Warning:


PHP тебе орет во всю что второй аргумент функции in_array содержит не правильный тип данных !
Название: Массив сессии - все время ошибка (
Отправлено: Turok от 12 Апреля 2006, 16:36:25
т.е. $_SESSION[\'countid\'] такая запись для in_array и array_push неприемлема?
Название: Массив сессии - все время ошибка (
Отправлено: Turok от 12 Апреля 2006, 16:46:52
если в начале определяю $_SESSION[\'countid\']=array();
то ошибка пропадает но в сессии не сохраняются посещенные ИД, массив содержит только одно значение просто меняет его на новое ((
Название: Массив сессии - все время ошибка (
Отправлено: html_coder от 12 Апреля 2006, 17:14:33
А почему бы просто не использовать array_push, а просто делать так $_SESSION[\'countid\'][] = $id а в самом начале просто проверять массив это или нет



if(is_array($_SESSION[\'countid\']))
{
if(!in_array($id, $_SESSION[\'countid\']))
{
$_SESSION[\'countid\'][] = $id;
}
}
else
{
$_SESSION[\'countid\'] = array();
}


P.S: код не проверял
Название: Массив сессии - все время ошибка (
Отправлено: for_i_0 от 12 Апреля 2006, 17:22:28
Цитировать
Turok:
если в начале определяю $_SESSION[\'countid\']=array(); то ошибка пропадает


Turok
in_array() - функция которое ищет значение в массиве так ?
первый аргумент mixed. второй array.
делаем выводы!


Вот тебе руководство:
PHP.NET::in_array() (http://www.php.net/manual/en/function.in-array.php)
Название: Массив сессии - все время ошибка (
Отправлено: Turok от 12 Апреля 2006, 17:47:14
html_coder и зачем я заморачивался с array_push =) Спасибо, пока работает посмотрим как себя покажет после потери сессии

session_start();
setcookie(session_name(),session_id(), time()+3600, "/");
$id=(int)$id;
$id="".$_GET["id"];
if (!session_is_registered(\'countid\')) session_register(\'countid\');

if(is_array($countid))
{
    if(!in_array($id, $countid))
    {
        $countid[] = $id;
        $scount = mysql_query("UPDATE Tovar SET t_count=t_count+1 WHERE t_id=\'$id\'") or die("Error: ".mysql_error());
    }
}
else
{
    $countid = array();
}


for_i_0 спасибо, я просто весь запутался в типах данных