更新 - 我没有发现问题。我假设删除他们的评论的人是正确的,并且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的知识可以进入并完全改造网站。
答案 0 :(得分:0)
我在使用会话多年时遇到类似的问题;)
试试这个人在这里说的话:PHP Session data not being saved
我不知道这在内部意味着什么,我只是向自己解释一下 会话变量变化不够快:)
答案 1 :(得分:0)
我遇到的问题是由于我的代码中的错误检查而重新加载脚本。由于我不想破坏它,我将数组的处理移动到另一个没有执行两次的位置。