可能重复:
AJAX only access
所以我根据谁赢得了比赛,运行了这些javascript函数。
function winA()
{
var x = "<?php echo $id;?>"
$.ajax({ url: 'win.php' ,
data: { id: x }
});
}
function winB()
{
var val = "<?php echo $i;?>"
$.ajax({ url: 'win.php' ,
data: { id: val }
});
}
文件win.php更新了赢得胜利的MySQL。让我烦恼的是,如果有人只是去
http://mysite.com/win.php?id=1
并刷新它很多次我明显会在MySQL服务器上得到一些不正确的结果。
我想知道如何制作它以便只有在适当时才能通过此ajax调用访问URL。或者将win.php文件设置为仅在加载php文件后“授权”到期时实际执行。
先谢谢你,Aaron。
答案 0 :(得分:1)
您可以使用会话,从我的评论中扩展:
主要游戏页
<?php
session_start();
//Do game....
//Decide Winner
$_SESSION['winner']='A'; //or B depending on who won
?>
然后是一个带有空白参数的AJAX请求,只是因为won.php被触及
function win(){
$.ajax({
url: "win.php",
cache: false
}).done(function(html){
//Dont do anything or you could get a response from the won.php request an update something
});
}
<强> Win.php 强>
<?php
session_start();
if(isset($_SESSION['winner'])){
$winner=$_SESSION['winner'];
//Do update ect
//Unset Winner session var, by unsetting the user would need to play the game again to get it set
unset($_SESSION['winner']);
}else{
header('Location: ./index.php');
}
?>
答案 1 :(得分:0)
在页面上使用PHP,假设将您带到http://mysite.com/win.php?id=1
,只需使用值为
<input type="hidden" name="verify">
在开头的http://mysite.com/win.php?id=1
页面上添加类似
if (isset($_POST['verify'])) {
// perform what you want
} else {
header("Location: wherever/you/want");
}
除非已设置隐藏的$_POST['verify']
,否则页面将无法运行。
也许如果您在数据库中使用唯一名称进行竞赛,您也可以在运行函数之前检查它是否存在以插入新数据。
要运行查询检查,我们假设每个比赛名称都有唯一的ID或名称。我们将比赛A'id 1'称为比赛并假设它是您桌上的主键。运行查询以检查该ID,如下所示:
function checkContest() {
$connection = // your connection info;
$query = "SELECT *
FROM table
WHERE id = '1'";
$result = $connection -> query($query);
if ($result -> num_rows > 0) {
// end function
} else {
// call the function that contains the INSERT query
}
然后在你的ajax中,你调用新函数checkContest()(或它所在的处理程序文件)而不是win.php中的函数(因为新函数只在成功时调用win.php函数)
答案 2 :(得分:0)
假设您希望win.php文件仅针对winA()运行一次,而仅针对winB()运行一次,则可以向您从每个函数传递的AJAX调用中传递的数据对象添加一个额外的属性,识别它来自哪个函数(例如:func:“A”)。
然后在win.php中,您需要跟踪winA或winB是否已获胜。这可能是一个会话变量,或者您可以在数据库中创建一个小表,其中包含2个字段 - “竞争”和“赢”,以及2行(一个用于winA,一个用于winB)。 win.php第一次被任何一个函数调用,你更新“won”列以及你先检查该列的任何后续调用,如果它不是null,那么你知道竞赛已经赢了并跳过win.php处理的其余部分
一般来说,当我想添加某种类似的限制时,我更倾向于使用服务器端,因为它更容易控制,而其他人则难以操作。