Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Массив в SESSION
 
 автор: Lisnerpa   (23.09.2005 в 18:35)   письмо автору
 
 

Попробовал использовать вместо глобальных переменных $_SESSION
С обычными переменными все хорошо - как присвоение, так и использование.
Но когда попробовал использовать массив, получил странную ситуацию:
1. новое значение заносится в массив. Например:
$i=4
$_SESSION['z_txt[$i]']="Привет тебе, приют священный"
Значение $_SESSION['z_txt[4]'] эхом выдается верное.
2. но при этом стирается значение переменной $_SESSION['z_txt[3]'. Она становится пустой строкой. Соответственно, пятое заполнение массива стирает четвертую запись и т.п.

Пришлось использовать глобальную переменную для этого массива (соответственно отмечая его внутри функций), и с ним все работает нормально.
Но хотелось бы прибиться к одному стилю. Либо использовать сессию в качестве глобальн. переменных, либо опять вернуться к глобальным переменным. Смесь в данном случае только запутает дело.

   
 
 автор: tim_mironov   (23.09.2005 в 18:56)   письмо автору
 
   для: Lisnerpa   (23.09.2005 в 18:35)
 

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

   
 
 автор: Lisnerpa   (23.09.2005 в 20:06)   письмо автору
 
   для: tim_mironov   (23.09.2005 в 18:56)
 

Вот код функции.

function Zadanie_Input()
// Считать значения из файла задания в переменные сессии
{
global $z_t;

//открываем файл Задания для чтения
$zf = fopen ($_SESSION['Fil_Zad'],"r");

if(!$zf) //=== Eсли файл отсутствует
{
echo("Ошибка открытия файла Задания.");
return ""; //возвращ.значение ""
}
else
{
$_SESSION['z_ns'] = 0; //число строк задания

while(!feof($zf))
{
$l=fgets($zf); //считать строку

//=== Анализировать строки и заносить в переменные
if (substr($l,0,4) == "Тур:") // Тур
{
$_SESSION['z_num']=substr($l,4);
}
elseif (substr($l,0,6) == "Автор:") // Автор
{
$_SESSION['z_awt']=substr($l,6);
}
elseif (substr($l,0,9) == "Название:") // Название
{
$_SESSION['z_naim']=substr($l,9);
}
elseif (substr($l,0,5) == "Дата:") // Дата
{
$_SESSION['z_data']=substr($l,5);
}
else // Строка задания
{
$_SESSION['z_ns'] = $_SESSION['z_ns'] + 1;
$z_t[$_SESSION['z_ns']]=$l;

$i=$_SESSION['z_ns'];
$_SESSION['z_txt[$i]'] =$l;
echo '-1'.$_SESSION['z_txt[$i-1]']."<br>";
echo $i.$_SESSION['z_txt[$i]']."<br>";
}
}

fclose($zf); //закрыть файл

return $_SESSION['z_num']; //возвращ.№ задания
}
}


от него на форме получается:

-1
1Земля отцов красивей год от году.
-1
2Гну спину в дождь, в ночи и поутру.
-1
3Меня давно не видно небосводу,
-1
4Я, так его не видя, и умру.
-1

Как видите, предыдущие записи в массиве стираются.
Если вывести значения массива z_t[] - все будет в целости и сохранности.

   
 
 автор: cheops   (23.09.2005 в 22:59)   письмо автору
 
   для: Lisnerpa   (23.09.2005 в 18:35)
 

Откуда берётся z_txt и что это за массив, каковы его значения? Может удобнее исползовать двумерный массив
<?php
 $_SESSION
['z_txt'][4];
?>

   
 
 автор: tim_mironov   (23.09.2005 в 23:47)   письмо автору
 
   для: cheops   (23.09.2005 в 22:59)
 

Еще одно замечание в том, что здесь как в C# нумерация массива начинается с 0, а не с 1. В догрузку сообщаю, что не плохо было бы приложить весь текст, чтобы мы видели что исчезло.

   
 
 автор: tim_mironov   (23.09.2005 в 23:49)   письмо автору
 
   для: cheops   (23.09.2005 в 22:59)
 

Еще одно замечание в том, что здесь как в C# нумерация массива начинается с 0, а не с 1. В догрузку сообщаю, что не плохо было бы приложить весь текст, чтобы мы видели что исчезло.
З.Ы. Прикладываю файл с учебником.

   
 
 автор: tim_mironov   (23.09.2005 в 23:51)   письмо автору
 
   для: cheops   (23.09.2005 в 22:59)
 

Еще одно замечание в том, что здесь как в C# нумерация массива начинается с 0, а не с 1. В догрузку сообщаю, что не плохо было бы приложить весь текст, чтобы мы видели что исчезло.
З.Ы. Прикладываю файл с учебником.

   
 
 автор: tim_mironov   (23.09.2005 в 23:52)   письмо автору
 
   для: cheops   (23.09.2005 в 22:59)
 

Еще одно замечание в том, что здесь как в C# нумерация массива начинается с 0, а не с 1. В догрузку сообщаю, что не плохо было бы приложить весь текст, чтобы мы видели что исчезло.

   
 
 автор: Lenux   (24.09.2005 в 06:51)   письмо автору
 
   для: Lisnerpa   (23.09.2005 в 18:35)
 

Есть ещё один вариант в своём коде, выложи во многих местах print_r($_SESSION); Затем посмотри, что куда и зачем, где проподает, что бы разбираться с тем учатком кода.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования