如何在执行某些操作之前暂停PHP执行

时间:2012-09-25 07:57:13

标签: php javascript ajax

我有一个PHP文件正在执行,它将条目插入到数据库中,当满足条件时(例如,$ rows> 500)我想暂停执行,并出现两个按钮。

一个值为“Continue”的脚继续执行脚本停止执行,另一个带“取消”以通过脚本删除直到现在插入的条目。

问题在于我无法想出停止执行的方法,显示两个按钮,然后根据我的选择采取行动。

我需要一些Javascript和AJAX吗?

提前致谢!任何帮助表示赞赏!

5 个答案:

答案 0 :(得分:5)

你尝试过使用exit();在脚本中?这退出了代码,因此停止了它。 对于继续,您可以存储您在会话中的位置。

$i = 0;
while () {

     if ($rows > 500) {
             echo '<div id="continueAction" class="someButton">Continue</div>';
             echo '<div class="someButton">Cancel</div>';
             $_SESSION['pos'] = $i;
             exit();
     }
     // Store some value in DB here
     $i++;
}

然后使用ajax请求,你可以在你离开的地点重新开始,使用会话中存储的“pos”..

编辑: 对于ajax,您需要一个PHP脚本和一种从按钮调用脚本的方法。我会使用jquery。既然你已经在你的网站上有了这个,你可以使用:

 $('#continueAction').click(function(){
      $.get('ajax/test.php', function(data) {
         $('.result').html(data);
      });
 });

这样做是调用脚本test.php并将任何数据带回一个名为data的javascript变量..然后它将这些数据放在.result元素中。
根据您的应用程序类型,您可能需要稍微处理一下,以便在需要的地方获取数据。但这应该让你走向正确的方向。

希望这有帮助!

答案 1 :(得分:1)

像m90 sais一样,你不能只使用php。

使用可以回滚的结构之类的事务。如果满足条件,则进行ajax调用。将somthing发送到输出,接收响应,请求用户交互。进行新的呼叫继续并提交transacition或rollback。

修改

使用jQuery调用ajax的简单示例:

function runthescript(continue,rollback){
    $.ajax({
       type: "POST",
       url: "yourphpscript.php",
       data: {
         "isContinueing": (continue===true), 
         "isRollback": (rollback===true)
       },
       success: function(msg){
         if(msg === "calling for user interraction"){// replace this by Enum or something more performant this is just for illustration
              var answer = confirm("Want to continue?");
              if(answer){
                  runthescript(true, false);
              } else {
                  runthescript(false, true);
              }
         } else if(msg === "completed"){// replace this by Enum or something more performant this is just for illustration
              alert('completed');
         } else if(msg === "rolled back"){// replace this by Enum or something more performant this is just for illustration
              alert('rolled back');
         }
       }
     });
}
runthescript();

PHP示例

<?php 
function checkStates(){
    if($rows>500){
         echo "calling for user interraction"; // replace this by Enum or something more performant this is just for illustration
         //exit(); //you can use exit if absolutely necessary, avoid if not needed.
    }
    if($finished_condition_is_met){
         echo "completed";// replace this by Enum or something more performant this is just for illustration
         //exit(); //you can use exit if absolutely necessary, avoid if not needed.
    }
}

if($_POST['isContinueing'] === true){
    //run some continuing php


    checkStates();

} else if($_POST['isRollback'] !== true){

    //run some rolling back code   
    echo "rolled back";// replace this by Enum or something more performant this is just for illustration
    //exit(); //you can use exit if absolutely necessary, avoid if not needed.

} else {

    //run some starting php

    checkStates();

}

答案 2 :(得分:1)

你必须以某种方式保存应用程序的状态,以便你可以恢复它,如果你要向客户端发送一些信息,比如包含两个按钮的表单,php脚本将会结束,或者如果不这样做,它仍然需要另一个提交表格值的请求(“继续”或“取消”)。

这样做的一种方法是websockets和node.js.或两个PHP脚本之间的良好IPC。但你最好的选择仍然是AJAX。

只需让脚本返回状态代码,“未完成”,并在发生这种情况时让javascript显示两个按钮,保存在session variableecho "not done"或{{1}中的位置然后是echo "{'status':'continue?'}";

在javascript中,只需询问用户该做些什么。

答案 3 :(得分:0)

我能想到的最简单的解决方案是将PHP脚本分成两部分,然后“继续”按钮调用继续计算的第二个脚本。

如果您测试请求参数,您甚至可以在一个脚本中执行此操作。

答案 4 :(得分:0)

好的,让我来看看这个。

if($rows>500)
{
    echo '<div id="cancel">Cancel</div>';
    echo '<div id="continue">Continue</div>';
    exit();
}

然后在索引页面中包含jquery并使用:

$(document).ready(function() {
    $("#cancel").click(function() {

        var data_to_send = what you want to send

        $.ajax({
            type: "POST",  // might be too long to use GET
            url: "cancel.php", // script you want to carry out this action
            data: data_to_send,
            success: function(data) {
                $('#results').html('<p>Previously inserted rows have been deleted</p>');
                // data is just what cancel.php echos out
            }
        });
        return false;
    });

    $("#continue").click(function() {

        var data_to_send = what you want to send

        $.ajax({
                type: "POST",
                url: "continue.php",
                data: data_to_send,
                success: function(data) {
                    $('#results').html('<p>Continuing!</p>');
                }
        });
        return false;
    });
});

结果div可以是一个空的或隐藏的div,用于输出ajax请求发生的事情,或者您可以选择将数据附加到现有的div。

我唯一要做的就是将div替换为实际按钮,但它的工作原理相同,我只是喜欢造型div ...