我有一个 PHP 文件正在执行,它将条目插入数据库,当满足条件时(例如,$rows>500)我想停止执行,并出现两个按钮。
一个值为“继续”以继续执行脚本,从它停止的地方开始,另一个值为“取消”以删除通过脚本插入到现在的条目。
问题是我想不出一种方法来停止执行,显示两个按钮,然后根据我的选择采取行动。
我需要一些 Javascript 和 AJAX 吗?
提前致谢!任何帮助表示赞赏!
我有一个 PHP 文件正在执行,它将条目插入数据库,当满足条件时(例如,$rows>500)我想停止执行,并出现两个按钮。
一个值为“继续”以继续执行脚本,从它停止的地方开始,另一个值为“取消”以删除通过脚本插入到现在的条目。
问题是我想不出一种方法来停止执行,显示两个按钮,然后根据我的选择采取行动。
我需要一些 Javascript 和 AJAX 吗?
提前致谢!任何帮助表示赞赏!
您是否尝试过使用 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 元素中。
根据您的应用程序类型,您将不得不稍微处理一下才能将数据放在需要的地方。但这应该让你进入正确的方向。
希望这有帮助!
像 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();
}
您必须以某种方式保存应用程序的状态,以便您可以恢复它,如果您要向客户端发送一些信息,例如包含两个按钮的表单,则 php 脚本将结束,或者如果它会不是,它仍然需要另一个请求来提交表单值(“继续”或“取消”)。
一种方法是 websockets 和 node.js。或者两个php脚本之间的好IPC。但是您最好的选择仍然是 AJAX。
只需让脚本返回一个状态代码,如“未完成”,并在发生这种情况时让 javascript 显示两个按钮,将您离开的位置保存在 a session variable
、echo "not done"
或echo "{'status':'continue?'}";
然后 adie();
而在 javascript 中,只需询问用户下一步该做什么。
我能想到的最简单的解决方案是将 PHP 脚本一分为二,然后“继续”按钮调用第二个脚本来进行计算。
如果您测试请求参数,您甚至可以在一个脚本中完成。
好的,让我试试这个。
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 ...