[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с глобальными переменными
anton_nestor
Здравствуйте! Есть проблема. Почитал Ваш форум, понял, что она скорее всего пустячная, но ответа я не нашел. Потому, если повторяюсь - простите. НО:
1) объявляю глобальный массив на одной странице, забиваю в него данные в ней же (parsing.php);
2) вывожу его скриптом на другой страницы (menus.php);
3) проверяю, есть ли в нем данные на третьей странице (index.php) - есть!
а теперь:
4) в index.php пытаюсь реализовать технологию AJAX: по нажатию на ссылку - идет обновление только части данных, а именно: кликаю, например, на ссылку с id = "1" данные передаются на страницу getnew.php и там из моего глобального массива должен выбраться элемент с индексом = "1" и передаться назад в index.php. AJAX реализован, он данные передает, но ПРОБЛЕМА в том, что на странице getnew.php мой глобальный массив "не видится", т.е. ставлю такое условие и оно не выполняется sad.gif :

if (isset(@GLOBALS['array_of_news']))
{
...
}




Спустя 1 час, 42 секунды (9.01.2010 - 08:55) VolCh написал(а):
Вообще странный синтаксис @GLOBALS обычно $GLOBALS, но это мелочи, насколько я понял. Не очень понятно, как работают пункты 1-3, то есть даже они не должны работать (если я правильно понял все эти "забиваю", "вывожу", "проверяю"). Все переменные, включая глобальные и суперглобальные, существуют только в момент работы скрипта. Скрипт выдал в браузер результат, завершился и всё, никаких переменных. Два исключения, и то не постоянных - куки и сессии.

Спустя 1 час, 1 минута, 3 секунды (9.01.2010 - 09:56) ИНСИ написал(а):
VolCh либо константа подойдет, мне кажется smile.gif ?
anton_nestor в следующий раз, постарайся пожалуйста использовать другой подход к объяснению проблемы. Потому что от этого ведь зависит: Смогут ли тебе помочь smile.gif

Спустя 1 час, 48 минут, 7 секунд (9.01.2010 - 11:44) VolCh написал(а):
welbox2 вроде массив динамически формируется, чего-то там парсится... Хотя может и пойдёт, а может сериализация устроит

Спустя 4 минуты, 50 секунд (9.01.2010 - 11:49) anton_nestor написал(а):
Господа, может Вам частично код подкинуть? Просто думал обойтись без этого...

Спустя 6 минут, 57 секунд (9.01.2010 - 11:56) VolCh написал(а):
anton_nestor
суть в том, что в getnew.php $array_of_news должен формироваться заново, либо храниться в куках/сессиях/файле/бд, ну как извращение в каком-нить memcached ph34r.gif и в getnew.php считываться

Спустя 33 минуты, 19 секунд (9.01.2010 - 12:29) anton_nestor написал(а):
VolCh: с сессиями пробовал изначально - тот же результат, на куки - нет желания.

Вот краткий образ работы пунктов 1-3:

есть страница "index.php":


...
<body>
...


 
<?php
/*обращаюсь к странице, где будет сформирован $GLOBALS['array_of_news']*/
require_once('parsing.php');
?>


...
</body>



-----------------------------
на странице "parsing.php":


<?php

/*создал массив*/

$i = 0;
$GLOBALS['array_of_news'] = array(
$i => array(
"pubDate" => "",
"title" => "",
"discription" => ""
)
);


/*заполнил массив*/

foreach($news as $n)
{
$GLOBALS['array_of_news'][$i]['pubDate'] = $n['pubDate'];
$GLOBALS['array_of_news'][$i]['title'] = iconv("UTF-8", "Windows-1251", $n['title']);
$GLOBALS['array_of_news'][$i]['discription'] = iconv("UTF-8", "Windows-1251", $n['description']);
$i++;
}

/*обращаюсь к треттей странице (menus.php), в ней данные будут выводиться в табличку*/

require_once("menus.php");
printParser();
?>


--------------------------------
на странице "menus.php":


<?php

...
function printParser()
{

/*заполняю данными таблицу*/
for ($i=0;$i<=(count($GLOBALS['array_of_news']));$i++)
{

print '<tr><td>';
echo $GLOBALS['array_of_news'][$i]['title'];
print '</td></tr>';

...

}

}

?>


Все. Посредством описанных выше действий на странице "index.php" получил данные из глобального массива $GLOBALS['array_of_news'].

Теперь, когда я на странице "index.php" нажимаю на ссылку, посредством AJAXа обращаюсь к странице "getnew.php", в которой есть такой код и это все что там есть:

<?php
if ((isset($_GET['id'])) and (isset($GLOBALS['array_of_news'])))
{
echo $GLOBALS['array_of_news'][$_GET['id']]['title'];
}
?>


Вот такая картина. Если убрать вотрую часть условия и вывести просто какую-нибудь строчку текста, то данные аяксом передаются.

Что скажите в таком случае? Как быть?

Спустя 1 час, 1 минута, 49 секунд (9.01.2010 - 13:31) VolCh написал(а):
anton_nestor
С терминологией у вас проблемы - первые три файла все не отдельные страницы, а формируют одну страницу.

Выхода по сути два - или разобраться с сессиями (или еще как-то хранить инфу вне скриптов - в файле или БД), или тупо в getnew.php инклудить parsing.php, чтобы он формировал массив заново (только перенести
require_once("menus.php");
printParser();
в index.php

P.S. Чувство дежавю - сам когда переходил из оффлайн-программирования к веб-, ровно такие же проблемы испытывал, раз объявил переменную глобальной, значит она должна быть доступна из любого скрипта smile.gif

Спустя 2 часа, 12 минут, 23 секунды (9.01.2010 - 15:43) ИНСИ написал(а):
anton_nestor мне кажется тебе вот это:

$GLOBALS['array_of_news'] = array(
$i => array(
"pubDate" => "",
"title" => "",
"discription" => ""
)
);


надо заменить на

global $GLOBALS['array_of_news'] = array(
$i => array(
"pubDate" => "",
"title" => "",
"discription" => ""
)
);


то есть, ты просто не объявил глобальным сам массив.

Спустя 2 минуты, 18 секунд (9.01.2010 - 15:46) VolCh написал(а):
welbox2 $GLOBALS - это предопредленный массив
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.