通过jquery javascript函数使用SESSION变量更新MySQL

时间:2009-03-13 02:14:17

标签: php jquery mysql

我目前有一个javascript文件'score.js',它使用jQuery.js,通过链接正确调用。 score.js中的代码是:

function originalUpdateScore(answer,correct){
if (answer == correct) 
{    
$.post('updateScore.php');  
}
window.location.reload(true);
}

此函数调用'updateScore.php':

<?php
include("dbstuff.inc");
$con = mysqli_connect($host, $user, $passwd, $dbname)
or die ("Query died: connection");  

$updateScore = "UPDATE `user` SET `tempScore`=`tempScore`+1
    WHERE (user.Username='$_SESSION[logname]')";

mysqli_query($con, $updateScore);

?>

但是数据库未正确更新。如果我更换行:

$updateScore = "UPDATE `user` SET `tempScore`=`tempScore`+1 
               WHERE (user.Username='$_SESSION[logname]')";

使用:

$updateScore = "UPDATE `user` SET `tempScore`=`tempScore`+1 
               WHERE (user.Username='123pf')";

其中123pf是SESSION变量在调用javascript的php文件中包含的值,它正确更新。为什么使用会话变量不起作用?我在查询中是否错误地调用了它?

提前致谢。

3 个答案:

答案 0 :(得分:5)

您是否在updateScore.php内的任何地方呼叫session_start

如果您尚未启动会话,我不相信会话变量可用。

答案 1 :(得分:1)

另外,你有完成对$ _SESSION ['logname']的控制吗?如果没有,有人可以轻松更改其日志名称以注入SQL并损坏/危害您的数据库。例如,如果他们能够将其日志名称设置为此,则可能会丢失用户表:

$_SESSION['logname']="'; DROP TABLE user;-- ";

通过这样的方式打开你自己就是骗子。在这种情况下,任何用户都可以随时访问updateScore.php来增加他们的统计数据,因为该脚本既不会检查他们的答案,也不会检查JS构建的令牌以确定分数是否正常。将这种逻辑保留在前端(javascript)而不在后端验证(PHP)是一个坏主意; javascript&amp; AJAX是非常有用的快捷方式,可以改善用户体验,但它们不能被视为唯一的有效性检查器。

答案 2 :(得分:0)

这可能只是一个转录错误,但您在问题中显示的代码使用$ _SESSION [logname],它应该是$ _SESSION ['logname']。