Php 无法更改zend中的会话变量。。这种方法错了吗?

Php 无法更改zend中的会话变量。。这种方法错了吗?,php,ajax,zend-framework,Php,Ajax,Zend Framework,以下是我一直遵循的步骤: 首先,我初始化了会话的名称空间 $guest_events = new Zend_Session_Namespace('guest_events'); 然后将一个数组添加到会话中 $guest_events-> events = array(); 然后我向数组中添加了一些事件 这看起来像: Array ( [amount_0] => 1 [event_id_0] => 69 [event_title_0] => Sun

以下是我一直遵循的步骤:

首先,我初始化了会话的名称空间

$guest_events = new Zend_Session_Namespace('guest_events');
然后将一个数组添加到会话中

$guest_events-> events = array();
然后我向数组中添加了一些事件

这看起来像:

Array
(
    [amount_0] => 1
    [event_id_0] => 69
    [event_title_0] => Sunday Collection
    [amount_1] => 11
    [event_id_1] => 78
    [event_title_1] => Test event

)
现在,在我的另一个控制器中,当我尝试通过ajax实现编辑量功能时:

$event_id = $this-> getRequest()-> getParam('event_id');
        $edit_amount = $this-> getRequest()-> getParam('edit_amount');
        $event_title = $this-> getRequest() -> getParam('event_title');
$guest_events = new Zend_Session_Namespace('guest_events');
$event_array = $guest_events-> events;
for ($i = 0; $i < 5; $i ++)
        {
          if (array_key_exists('event_id_'.$i, $event_array))
          {     

                if ($event_array['event_id_'.$i]==$event_id && $event_array['event_title_'.$i]==$event_title)
                {   
                     // unset the amount and replace with new one 
                    unset($guest_events-> events-> amount_0);
                    $guest_events-> events-> amount_0 = $edit_amount;
                }
          }
        }
$event_id=$this->getRequest()->getParam('event_id');
$edit_amount=$this->getRequest()->getParam('edit_amount');
$event_title=$this->getRequest()->getParam('event_title');
$guest_events=新的Zend_会话_名称空间(“guest_events”);
$event\u array=$guest\u events->events;
对于($i=0;$i<5;$i++)
{
if(数组\键\存在('event\ u id.$i,$event\ u数组))
{     
如果($event_数组['event_id.'.$i]==$event_id&&$event_数组['event_title.'.$i]==$event_title)
{   
//取消设置金额并替换为新金额
未设置($guest\u events->events->amount\u 0);
$guest\u events->events->amount\u 0=$edit\u amount;
}
}
}

我尝试了所有方法,但会话变量保持不变。。有人能说出原因吗??:(

如果元素
events
Zend\u Session\u命名空间中的一个数组
对象,则应如下设置:

$guest_events-> events['amount_0'] = $edit_amount;
而不是像:

$guest_events-> events-> amount_0 = $edit_amount;
此外,由于您处于一个循环中,可以找到正确的数值,因此我认为它实际上应该是:

$guest_events-> events['amount_' . $i] = $edit_amount;

我发现了问题。它没有进入内部if循环。例如:

if ($event_array['event_id_'.$i]==$event_id && $event_array['event_title_'.$i]==$event_title)
                {   
                     // unset the amount and replace with new one 
                    unset($guest_events-> events-> amount_0);
                    $guest_events-> events-> amount_0 = $edit_amount;
                }

仍然无法理解为什么会发生这种情况://

您是否真的通过Ajax发送原始事件标题?只有当传输的ID和标题与会话中已有的内容匹配时,您才能输入该块。是的。请求由Ajax发出,在匹配事件ID和事件标题后,金额被替换。因此,必须存在一些小的不匹配在发送的值和会话中存储的值之间切换,因为它在数组中找不到标题和ID的匹配项。下一个调试步骤是每次查看一个比较,并查看正确的一个不匹配的原因。