2

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

一个值为“继续”以继续执行脚本,从它停止的地方开始,另一个值为“取消”以删除通过脚本插入到现在的条目。

问题是我想不出一种方法来停止执行,显示两个按钮,然后根据我的选择采取行动。

我需要一些 Javascript 和 AJAX 吗?

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

4

5 回答 5

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 元素中。
根据您的应用程序类型,您将不得不稍微处理一下才能将数据放在需要的地方。但这应该让你进入正确的方向。

希望这有帮助!

于 2012-09-25T08:04:28.400 回答
1

像 m90 sais 你不能只使用 php。

使用可以回滚的类似事务的结构。如果满足条件,请进行 ajax 调用。向输出发送一些东西,接收响应,请求用户交互。继续进行新的调用并提交事务或回滚。

编辑:

使用 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();

}
于 2012-09-25T08:04:53.470 回答
1

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

一种方法是 websockets 和 node.js。或者两个php脚本之间的好IPC。但是您最好的选择仍然是 AJAX。

只需让脚本返回一个状态代码,如“未完成”,并在发生这种情况时让 javascript 显示两个按钮,将您离开的位置保存在 a session variableecho "not done"echo "{'status':'continue?'}";然后 adie();

而在 javascript 中,只需询问用户下一步该做什么。

于 2012-09-25T08:07:49.843 回答
0

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

如果您测试请求参数,您甚至可以在一个脚本中完成。

于 2012-09-25T08:06:27.413 回答
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 ...

于 2012-09-25T08:18:57.123 回答