更新- 我没有发现问题。我假设删除评论的人是对的,并且 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 的知识,无法进入并彻底改造该站点。