2015-05-31 4 views
0

я использую CentOS 6.6, PHP 5.3.4часть сессии varibles возвращается к старому значению

У меня есть PHP скрипт в IFRAME (назовем его a.php) .. когда она называется a.php? p_type = 1 & item_num = 1234, он сохраняет массив в сеанс. иногда он объединяет два массива в сеансе и сохраняет его снова в сеансе , но слияние не работает .. вот упрощенный код. (я скрою мелкие детали для краткости)

header('P3P: CP="CAO PSA OUR"'); 
session_start(); 

$p_type_val = $_GET["p_type"]; 
$sess_var = "a".$p_type_val; 
$some_array = $_SESSION[$sess_var]; 
if(isset($_GET["item_num"]) 
{ 
    $some_array[] = $_GET["item_num"]; 
    $_SESSION[$sess_var] = $some_array; 
} 

if($p_type_val == 1) // when p_type is 1, merge two arrays in the session. 
{ 
    $sess_var2 = "a"."2"; 

    $some_array2 = $_SESSION[$sess_var2]; 

    $_SESSION[$sess_var2] = array_merge($some_array,$some_array2); 
} 

else if($p_type_val == 2) 
{ 
    $some_array2 = $_SESSION["p2"]; 
    print_r($some_array2); 
} 

.........

первым, я назвал a.php? P_type = 1 & item_num = 1234, то я называюсь .php? p_type = 2 lator, , тогда вновь добавленный номер элемента 1234 в «a2» будет потерян. значения в массиве «a2» возвращаются к старым значениям. , но значения в «a1» не представляют проблемы.

Я проверил файл сеанса в каталоге/var/lib/php/session и нашел, что все результаты соответствуют ожидаемым. после того, как я назвал a.php? P_type = 1, значения в файле будут такими, как я ожидал. , но сразу после a.php? P_type = 2 значения возвращаются к старым.

Забавно, когда я вызываю a.php? P_type = 2 дважды с разными item_nums, массив «a2» работает правильно.

Я не знаю, почему некоторые значения в сеансе возвращаются к старым значениям. , где я должен начать отладку для этого ..

любое предложение было бы оценено ..

+0

В какой момент вы определите '$ _SESSION [$ ses_var] пожалуйста, показать, что сценарий тоже, и в этой строке $ some_array [] = $ _GET [ "item_num «]; измените 'some_array []' for '$ some_array()', потому что '[]' для вызова определенной позиции в индексе, '()' с другой стороны, сортирует его автоматически, что, кажется, является тем, что вы пытаетесь сделать это (в той части кода, по крайней мере). – user57129

+0

это упрощенный код для объяснения, потому что настоящий код очень длинный. и код выше, $ _SESSION [$ sess_var] определяется в условии if. таким образом, долгое время не было проблем. и [] в массиве означает новый индекс, следующий за последним. Я думал, что это тоже не проблема. это старый код без проблем. но теперь я должен объединить два массива в сеансе. вот где проблема возникает –

ответ

0

я думаю, ваша проблема в том, что вы не читаете инструкцию об этом, не хамство не собирался, но ясно говорят, чем когда вы объедините два массива, которые могут произойти, объясните также «whys» этого, из-за этого я предлагаю вам полностью прочитать материал, ни один kittin, есть некоторые дублирующие примеры, описанные в разделе примеров руководства тоже, и объясните, как чтобы избежать/использовать эту «проблему».

it textualy говорит: «Если входные массивы имеют одинаковые строковые ключи, то более позднее значение для этого ключа перезапишет предыдущий. Если, однако, массивы содержат числовые клавиши, более позднее значение не будет перезаписывать первоначальное значение, но будет добавлено ».

Возможно, вы используете одни и те же строковые значения в переменных $ _SESSION или оба имеют один и тот же индекс для индексирования данных, я вам сказал, что необходимо создать создание $ _SESSION, иначе i пока не увидите композиции этих массивов, которые вы объединяете, и из-за этого я не могу предложить один из способов решения проблемы, ориентированной на ваши нужды.

, который, по сути, вы не говорите, вы объединяете две переменные $ _SESSION, но не говорите, зачем это нужно, и принимая это в перспективе, остальные люди даже не могут знать, правильно ли это подходит для что ты хочешь.

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

http://php.net/manual/en/function.array-merge.php

Иметь хороший день

Смежные вопросы