如何在将用户重定向到另一个页面后运行php功能?

时间:2015-10-26 16:56:58

标签: php foreach phalcon

我正在构建一个用户填充的表单,然后将其保存到数据库中。然后我检索符合条件的用户,并将每个用户存储到另一个表中,并向他们发送电子邮件。

   $userModel = new User();
   $currentUser = $userModel->findUserById($user->id);
   $requestModel = new Requests();
   $success = $requestModel->saveRequest($currentUser->usr_id, $tagId, $title, $task, $fixed, $price, $hour, $quality, $multiple, $datetime, $postal, $cityId, $travel);
                if($success){
                    $request = $requestModel->getUserLatestRequest($currentUser->usr_id);
                    if($request){
                        $user = new User();
                        $alluserids= $user->getAllSkillCityUserIds($cityId, $tagId);
                        $targetId = (array_column($alluserids, 'usr_id'));
                        //error_log("<pre>targetId".print_r($targetId,true)."</pre>"); 
                        foreach($targetId as $target) {
                            if($target == $currentUser->usr_id){
                                continue;
                            }
                            $lead = new RequestsLead();
                            $lead->addRequest($request->req_id, $request->req_userid, $target);

                            $contractor = $userModel->findUserbyId($target);
                            $nemail = new NotificationsEmail();
                            $nemail->sendGotRequest($contractor->usr_email, $contractor->usr_firstname);
                        }
                    }
                    $this->flash->success('<div data-toggle="notify" data-onload data-message="Thanks for using our service!." data-options="{"status":"success"}" class="hidden-xs"></div>');
                    $this->response->redirect($this->url->get(""));
                }else{
                    $this->flash->error('<div data-toggle="notify" data-onload data-message="Sorry! Please try again." data-options="{"status":"danger"}" class="hidden-xs"></div>');
                    $this->response->redirect($this->url->get("request"));
                }   

当有很多用户出现问题时,在将用户重定向回带有flash消息的页面之前,此功能需要完成运行。我该如何修改这个,所以我先将用户重定向到带有flash消息的页面,然后运行php foreach函数存储到db并发送电子邮件?

我尝试切换功能的顺序但是一旦用户被flash消息重定向,php功能就停止了进行。

2 个答案:

答案 0 :(得分:3)

PHP是server side scripting language。它本质上(但不完全)是无国籍的。

这意味着当加载PHP页面时,它会在服务器上执行它所需的PHP代码,然后将响应发送到浏览器。 在没有新服务器调用的情况下将页面发送到客户端后,无法重新执行PHP代码。

在您的情况下,您将客户端重新启动到新的PHP页面。这很棒,但是新的PHP页面是一个在服务器上运行的新脚本,它没有上一页所做内容的概念。

为了在页面加载后执行PHP代码,您需要使用AJAX向PHP服务器发送请求,以便在后台执行此请求,而无需再次重定向用户,或者在显示&#39; flash&#39;后再次重定向用户。消息。

请注意,使用AJAX,您还可以使用原始页面 - 无需任何重定向 - 来执行此请求并显示Flash消息(同时!)。

有关在网页之间共享数据的详细信息:

有关AJAX请求和PHP的更多信息:

答案 1 :(得分:2)

您提到的内容需要某种方式让脚本继续运行,而不是将响应发送回用户。 PHP不能以这种方式工作 - 您可以开始将内容写入输出缓冲区,但浏览器仍将等待,直到返回整个响应。

相反,您应该考虑一些临时存储所需信息的过程,并异步处理这些信息。例如将它们存储到数据库并运行cron脚本或deamon来执行此操作。