有关跳转的问题
发布于:2022-01-17 09:50:54
#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