[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: потеря значения переменной
BlackWater
Здравствуйте.
У меня есть

if (!$_POST[submit])
{
Hello();
}

else
{
$hi=Search($_POST[login], $_POST[pass]); //функция для поиска в файле нужной строки
echo $hi; //выводит значение

}
if ($_POST[go]) //другая функция, которая записует введенные данные в другой файл
{

WriteToFile($hi, $_POST[revers], $_POST[mal], date("d.m.y")); //запись в файл
echo ("\tThank's ");echo "return: "; echo $hi; // не выводит значение
}

Пробывал глобальную переменную создвать, занести в глобальный массив - результат тот же..
Как мне добраться до $hi во втором цикле, что бы записать в файл значение?



Спустя 16 минут, 15 секунд (19.03.2011 - 18:32) Commander Keen написал(а):
Я конечно не соображаю в PHP, но простите, где здесь цикл? У вас 2 разных условия, так что не удивительно что в 2 условии переменная не работает, так как объявляется только в 1ом

Спустя 18 минут, 33 секунды (19.03.2011 - 18:50) neadekvat написал(а):
Этот код так и находится в файле, или он располагается на расстоянии тысяч строк и в разных файлах?
Если именно так, как показано, то переменная выведет значение. Если нет - то и показывать/рассказывать надо как есть.

Кстати, сделайте error_reporting(E_ALL), чтобы убедиться, что вы допускаете ошибку при подобном обращении к элементам массива.

Спустя 2 минуты, 35 секунд (19.03.2011 - 18:53) BlackWater написал(а):
Опечятка, не цикл а условие. Я объявлял эту переменную как глобальную:
global $hi;

Все равно ее нет.
neadekvat - все находится в одном скрипте!

Спустя 8 минут, 30 секунд (19.03.2011 - 19:01) inpost написал(а):
BlackWater
Она не присваивается, поэтому никак. Во втором цикле проверить, есть ли переменная, если нету - запустить снова этот участок, где создаётся $hi из первого условия, то есть просто скопи-пастить.

Спустя 8 минут, 4 секунды (19.03.2011 - 19:10) BlackWater написал(а):
inpost
if (!isset($hi))
{$hi=Search($_POST[login], $_POST[pass]);
WriteToFile($hi, $_POST[revers], $_POST[mal], date("d.m.y"));
echo ("\tThank's ");echo "return: "; echo $hi;}

Так что-ли? Но фу-я Search выполняет действия, которые потом повторяют вывод данных, и это же ведь "некрасиво", скрипт повторяет действия, а это только трата времени...
error_reporting(E_ALL);

выводит Undefined variable: hi - то что вы мне и говорите.
Я попробывал
 global $hi;
if (!$_POST[submit])
{
Hello();
}

else
{
//echo ("Main commands: "); echo ($_POST[login]); echo ($_POST[pass]); echo ("\n");

$hi=Search($_POST[login], $_POST[pass]);

}
if ($_POST[go])
{
error_reporting(E_ALL);
WriteToFile($hi, $_POST[revers], $_POST[mal], date("d.m.y"));
echo ("\tThank's ");echo "return: "; echo $hi;

}

Сообщение об ошибке исчезло, но значения все - равно нет.

Спустя 1 минута, 33 секунды (19.03.2011 - 19:11) Trianon написал(а):
она и так глобальная, даже если б не объявляли.
Это не повод, впрочем, жить ей между запросами.

Спустя 4 часа, 5 минут, 53 секунды (19.03.2011 - 23:17) BlackWater написал(а):
Так что мне сделать? Я не могу понять.. Объясните, или намекните, в каком направлении копать?

Спустя 13 минут, 52 секунды (19.03.2011 - 23:31) fallow написал(а):
Что тут копать то? Вот это
$hi=Search($_POST[login], $_POST[pass]); //функция для поиска в файле нужной строки

в второе условие суй и все.
Может в первом условий у тебя else вообще не срабатывает, тогда откуда же значение $hi во втором условии?
Даже если просто обьявить переменную hi и присвоить что нибудь вне условий, она выведится.
Ты когда её gloabal обьявил даже сообщение об ошибке пропало, а пропало потомучто она обьявлена но значения нету.Понятно что else в первом условии не срабатывает. И её не обязятельно обьявлять global, если ты не хочешь получать доступ к переменной которая находится внутри функций из вне.

Спустя 3 минуты (19.03.2011 - 23:34) BlackWater написал(а):
я же объяснил, что так не пойдет.
function Search($l, $p)
{
$file_array = file( "log_info.txt" );
for ($i=0; $i< sizeof($file_array); $i++)
{
if (($l==substr($file_array[$i],0,strlen($l))) && ($p==substr($file_array[$i],strlen($l)+1,strlen($p))) )
{
//echo "All string"; echo ($file_array[$i]);
$str=trim($file_array[$i]);
}

}

if (isset($str))
{
//echo "cool";
if (substr($str, -4)=="user")
{ $name=substr($str,strlen($l)+1+strlen($p)+1, -5);
//echo ("Search "); echo ($name); echo ("\n");
User($name);


//User(substr($str,strlen($l)+1+strlen($p)+1, -5));
}
else
if
(substr($str, -5)=="admin")
{
$name=substr($str,strlen($l)+1+strlen($p)+1, -6);
Adm($name); //ForAdmin();
}
}

else {echo "Oops, a user is not found";}
return $name;
}

вот эта функция. получится, что когда
User($name);
выполнится, то снова будет рисоваться форма для юзера и выполняться повторно функция User или же если был админ, то ф-я adm()
А если в первом условии else не выполняется, то нет и $_POST[login], $_POST[pass], возникает только форма для ввода этих данных.
Быстрый ответ:

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