array_shift导致我丢失存储在$ _SESSION中的数组中的元素

时间:2012-06-18 15:31:29

标签: php arrays session smarty pear

更新 - 我没有发现问题。我假设删除他们的评论的人是正确的,并且Asset.php或array_shift()被调用了两次。我找到的是另一个处理表单对象的文件中的最佳位置,并允许我按照我的意图操作数组而不删除额外的元素。如果有人想浏览它,请留下这个。


我有一个由Controller.php运行的网站,根据通过交换机运行的GET值显示不同的页面。相关案例是:

case 'pgImportAsset': {
  require_once FORMS_DIR.'/Asset.php';

  $form = new ImportAssetForm(&$smarty, &$req);

  if(!empty($_SESSION['list'])){
    $form->processTo(&$smarty, array('pg'=>   'pgImportAsset'));
  } else {
    $form->processTo(&$smarty, array('pg'=> 'pgListClip'));
  }
  break;
}

$ _SESSION ['list']变量是一个数组,用于存储来自上传这些文件的java applet的文件名字符串。数组完全初始化为

Array
(
  [0] => 0.jpg
  [1] => 1.jpg
  [2] => 2.jpg
  [3] => 3.jpg
  [4] => 4.jpg
)

等等。这就是它变得奇怪的地方。数组递减的一行是Asset.php

$this->filename=array_shift($_SESSION['list']);

数组将进入该页面的实例,我将在该行之前和之后有一个print_r语句。即使数组中包含 所有5个 元素,也会显示两个打印语句。

Array
(
  [0] => 1.jpg
  [1] => 2.jpg
  [2] => 3.jpg
  [3] => 4.jpg
)
Array
(
  [0] => 2.jpg
  [1] => 3.jpg
  [2] => 4.jpg
)

它更奇怪了。在Asset.php中的那一行之后不久,我有这条线(我使用的是聪明的)。

$smarty->assign('filename',$this->filename);

这显示为第一个元素,在这种情况下将是0.jpg。值$ this-> filename然后被发送到数据库,而没有任何代码行改变它。最终存储在数据库中的是1.jpg。

我完全迷失了。请帮忙。

有关它的更多信息,Asset.php使用一个名为ImportAssetForm的对象,它扩展了PEAR中的QuickForm库以及其他几个库,包括DB和其他一些库。

这不是我原来的代码,我只是负责改变它。 PEAR库可能有点过时了,但是我没有PEAR的知识可以进入并完全改造网站。

2 个答案:

答案 0 :(得分:0)

我在使用会话多年时遇到类似的问题;)

试试这个人在这里说的话:PHP Session data not being saved

  

我不知道这在内部意味着什么,我只是向自己解释一下   会话变量变化不够快:)

答案 1 :(得分:0)

我遇到的问题是由于我的代码中的错误检查而重新加载脚本。由于我不想破坏它,我将数组的处理移动到另一个没有执行两次的位置。