有关跳转的问题

#1 虞飞

假定我有一段程序,需要用for循环循环执行一批数据库的update操作,我希望每一个update操作完成后,就会跳出一个提示框提示是否正确完成,然后再继续下一个update操作。如果我把$this->success或者$this->error写在for循环里,就会出错,空白一片,如果不写又看不到提示。这个该怎么办呢。

该贴已经同步到 虞飞的微博

2011-07-12 02:22:06

#2 chinalwb

你这是相当于每次循环中都要转向一个页面来提示成功与否吧?

我接触SP时间不久哈,说下我的个人见解

首先,这样可行吗?
假如你有20条数据,那岂不是弹20次提示框?用户体验未必很好。

第二呢,update这个循环是在sp的一个model的函数中做的吧?
在这样的情景下,弹出框必须转到另外一个页面才能弹出吧。(我之前写的有直接在页面中用ajax弹出的,,具体也记不清了)

我认为如果有20个update的话,可以的话,先update,记录下每次的结果,执行完成20次update后,一次性弹出结果比如:"19条成功,1条失败,失败的是:xxx"

2011-07-12 09:23:58

#3 jake

首先需要明白一点:PHP程序是WEB程序,和你说的那种桌面程序的表现方式很不同。PHP程序是每次访问页面都会执行一次,但很少会持续运行。

for循环是在PHP运行过程“中”的操作,而“跳转”是在PHP运行过程“外”的操作。所以你无法在运行“中”的时候,执行一些运行“外”的操作。或者说,“$this->success”等跳转程序,是会马上“中止”程序的运行,作用类似PHP的exit();,所以不能在for里面用。

要实现你的表现方式,有两种方法:“分次执行”,或者“持续执行+输出缓冲”。

这里说个简单些的,PHP输出缓冲+set_time_limit。

首先在for前面加上

ob_start();
set_time_limit(0);
每次执行一次循环后,可以用缓冲函数ob_函数来显示当前信息。

echo "完成一次update";
ob_flush();
上面的方法,要注意,一定要“服务器支持这些功能”,才能实现——毕竟WEB程序常规不会这样执行的。

2011-07-12 09:26:58

#4 phpha

由于 $this->success(); 或 $this->error(); 参数里面有spUrl(); ,就是提示后要跳转……
因此,你放在循环里面不合适……当第一次提示信息后,就跳转了……下面的就不执行了……
如果真要实现这个效果,建议别用这个函数……可以直接输出js代码:
echo '';
____________________________________
不过话又说回来了,就像2楼说的,你这种没什么必要……用户体验灰常差……
所以,可以采用楼上的,就定义变量,跟踪记录,最后总结 类似“19条成功,1条失败”。OK?

2011-07-12 09:29:01

#5 phpha

回复 3 jake


    额,JAKE占了我的3楼……
回复前还是2楼,回复后成4楼了……
难道我打字速度太慢……?:lol

2011-07-12 09:30:26

#6 anythink

建议统计数组个数 用url 跳转来完成
比如 page=1 则执行  $data[$page] ,如果成功则给已给 page=2的链接. 如果不成功 你懂的...   

$data[0] = 'updata ....'
$data[1] = 'updata...'

2011-07-12 09:40:07

#7 虞飞

感谢大家的热烈回应,这里讨论问题的环境就是好,还有jake这样的大高手坐镇。其实我的目的只是想获取信息,万一有error,用户可以看到。要不我还是试试2楼的方案看

2011-07-12 21:06:23