我有一个PHP文件正在执行,它将条目插入到数据库中,当满足条件时(例如,$ rows> 500)我想暂停执行,并出现两个按钮。
一个值为“Continue”的脚继续执行脚本停止执行,另一个带“取消”以通过脚本删除直到现在插入的条目。
问题在于我无法想出停止执行的方法,显示两个按钮,然后根据我的选择采取行动。
我需要一些Javascript和AJAX吗?
提前致谢!任何帮助表示赞赏!
答案 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 variable
,echo "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 ...