1

更新- 我没有发现问题。我假设删除评论的人是对的,并且 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 小程序的文件名字符串。数组被完美地初始化为类似

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)。

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

这显示为第一个元素,在本例中为 0.jpg。然后将值 $this->filename 发送到数据库,而无需任何代码行对其进行更改。最终存储在数据库中的是 1.jpg。

我完全迷茫和困惑。请帮忙。

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

这最初不是我的代码,我只是负责更改它。PEAR 库可能有点过时了,但我不具备 PEAR 的知识,无法进入并彻底改造该站点。

4

2 回答 2

0

多年来,我在使用 session 时遇到了类似的问题;)

试试这个人在这里说什么:PHP Session data not being saved

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

于 2012-06-18T17:00:17.630 回答
0

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

于 2012-07-16T16:44:53.590 回答