На localhost скрипт работает как нужно, в Интернете не хочет. (+)

alekciy

Новичок
На localhost скрипт работает как нужно, в Интернете не хочет. (+)

Собственно написал я скрипт для работы с БД на XML:
http://alekciy.h16.ru/freelance/franky/index.php?page=view&sample=clear

При включении галочек и нажатии кнопки "Показать выбранное" после отправки формы мы получаем только те данные, которые отметили в форме. При тестировании на своем компе все работает как и задумано, а при выкладывании в сеть после нажатия этой кнопки мы получаем не выбранные значения, а всю БД :(
Уже ума не приложу, в чем может быть дело. Однако после многочисленных экспериментов удалось установить приблизительно место бага. Текст всего скрипта приводить смысла нет, он очень большой. Но логика такова.
При запуске скрипта стартует сессия и все данные из БД записываються в сессионные переменные. Если пользователь отправляют форму скрипту, то происходит перебор сессионых переменных и если галочка включена, то создается элемент массива.
PHP:
print 'Значение массива name';
print_r($name);
print '<br>';
 
if ($_POST['session'] == 'yes') {	//если данные отправлены из формы, начинаем перебор
	foreach ($_SESSION['date'] as $key => $val) {
		$k = "cbox$key";	//имя тегов input из формы запроса
		if ($_POST[$k] == 'on') {
			$date[$key] = $_SESSION['date'][$key]; //создаем элементы массивов
			$name[$key] = $_SESSION['name'][$key];
			$city[$key] = $_SESSION['city'][$key];
			$street[$key] = $_SESSION['street'][$key];
			$home[$key] = $_SESSION['home'][$key];
			$telephone[$key] = $_SESSION['telephone'][$key];
			$fax[$key] = $_SESSION['fax'][$key];
			$scheme_journey[$key] = $_SESSION['scheme_journey'][$key];
			$price[$key] = $_SESSION['price'][$key];
			$flag++;	//если окажеться, что пользователь не выбрал ни одну галочку
						//то это флаг равень нулю
		};
	};
};
Первые три строки я написал для отладки. И вот что выходит. Т.к. этот код в начале скрипта, и ни какие переменные ещё не инициированы, то код print_r($name) ни чего по идее выводит в браузер не должен. На localhost так и происходит, а вот в сети нет! Отчего же так? Может от того, что сервер в интернете работает под FreeBSD, а у меня под Windows? Может так быть, что значение массива $name он сам заполняет данными (или сохраняет значения массива? ведь работа ведёться в пределах одной сессии).
 

alekciy

Новичок
Извиняюсь... а это точно то?
"...Дело в том, что в целях безопасности, начиная с версии 4.1, ..."
Но у меня то дома стоит 4.3.2 и все нормально работает. Кроме того везде используется супер глобальный массив $_POST.
 

sage

Новичок
у тебя дома register_globals Off, на сервере - On
попробуй на сервере
PHP:
echo 'register_globals = ' . ini_get('register_globals') . "\n";
 

alekciy

Новичок
'у тебя дома register_globals Off, на сервере - On'
8-/

-~{}~ 27.02.06 04:52:

Да... точно.... провайдер пошел на такое?!?!?!??! (ни чего не понимаю....)
А какой может быть выход?
 

Andreika

"PHP for nubies" reader
alekciy
а самому инициализировать переменные А.С.Пушкин не позволяет?
 

alekciy

Новичок
Не помогает (((

-~{}~ 27.02.06 05:17:

Andreika
Это которые? $date и прочие пытался не помогает...
 

sage

Новичок
alekciy
ой, это уже я с утра =) посмотри мой предыдущий пост
 

Andreika

"PHP for nubies" reader
пытался до вызова session_start или после?
а это рабочий код у тебя или так, набросал для примера?
 

alekciy

Новичок
Так я же говорю, что да, register_globals = On на сервере хостера.
Себе на серваке так поставил ON и все стало работать как и у хостера, т.е. лево. Значит все дело в этой настройке. Видимо придется скрипт переделать отказавший от суперглобальных массивов?

(угу, сам вот уже сплю... на работу скоро... совсем что ли спать не ложиться?...мда...)
 

alekciy

Новичок
>пытался до вызова session_start или после?
session_start как и положено в первой строке кода.

>а это рабочий код у тебя или так, набросал для примера?
Дома на локальном Apache сервере (с register_globals=Off) все работает как и задуманно. Т.е. скрипт рабочий.
 

Andreika

"PHP for nubies" reader
alekciy
т.е. даже если ты перед самым print_r($name); ставишь $name=null; то все равно выводит какие-то данные?
 

alekciy

Новичок
sage
Нет, не помогает. Ресурс вообще становиться недоступным тогда. 404-ая.
 

alekciy

Новичок
Andreika
Нет, тогда при первом запуске не выводит. Но скрип тогда не работает.

Warning: Invalid argument supplied for foreach() in H:\web\freelance\franky\index.php on line 260

-~{}~ 27.02.06 05:36:

строка 260 это

foreach ($_SESSION['date'] as $key => $val) {

-~{}~ 27.02.06 05:43:

все... остатки мозга спеклись... пойду спать... (*материт внутренним голосов хостера*).
 

Andreika

"PHP for nubies" reader
PHP:
session_start(); //стартуем сессию

unset($names); // отвязываем(убиваем ссылку) $names от переменной сессии .. остальные так-же

$names = array(); // инициализация
а дальше как обычно
 

alekciy

Новичок
Andreika
"Уряяяяяяяяяя!!! Дядя Федор приехал!" (с)
Все сработало, спасибо!

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