我一直在用这个烫发我的头发。
的index.php:
$(document).ready(function(){
$(".index_login_subm").click(function(){
uid = $("input:username").val();
pwd = $("input:password").val();
$.post("backend/login.php",{
uid:uid,
pwd:pwd
},function(data){
alert("Returned data: " + data);
});
return false;
});
});
的login.php:
include("../../settings.php");
echo $uid;
echo $_POST['uid'];
没有任何回声会返回任何内容。
的settings.php:
foreach ($_POST as $key => $value) {
$$key = mysql_real_escape_string($value);
}
foreach ($_GET as $key => $value) {
$$key = mysql_real_escape_string($value);
}
如果我注释settings.php-include out(当然echo $ uid不起作用),代码也能正常工作,所以它必须是mysql_real_escape_string所做的事情。任何人都知道我做错了什么?
index.php还包括settings.php,如果这有任何区别。
编辑:以下帖子让我想澄清;路径都是正确的。 settings.php(和一些其他脚本)都放在根文件夹之外,以使Web用户无法访问它们。当脚本访问它们时,它们运行良好。答案 0 :(得分:6)
如上所述in the PHP manual,mysql_real_escape_string需要与mysql_connect建立的真实数据库连接(在第二个参数中)。如果不存在,则尝试通过简单地调用mysql_connect()来创建一个。如果这也不起作用,则返回false。
因此,您必须首先创建数据库连接。但是在你开始这样做之前:注意只需要接受每个POST和GET变量并将其吐入全局命名空间,这是非常糟糕的主意。
答案 1 :(得分:3)
首先,我会避免变量变量,它们在这种情况下真的没有必要,如果你不确定哪些键实际到达那个脚本,它们就会成为一个移动的目标,并且它们是不好的做法,因为他们创造的安全问题。相反,我会将settings.php中的转义值放入数组中。然后你可以在包含settings.php后简单地var_dump()数组,看看有什么可用。
function extract_requests(){
$res = array();
foreach ($_REQUEST as $key => $value) {
if($key){
$res[$key] = $value;
}
}
return $res;
}
其次,使用正确的url字符串手动调用login.php,这正是您希望javascript调用的内容,以便您可以确保任何行为问题都不是来自login.php脚本本身。 / p>
http://localhost/somewhere/login.php?uid=50
include("../../settings.php");
$input = extract_requests();
var_dump($input);
echo $input['uid'];
echo $_POST['uid'];
最后,我会检查您在post()中发送的数据。我不是javascript大师,但是
uid:uid,
pwd:pwd
看起来会给我带来问题,所以确保以您期望的方式发送数据会很好。
$(document).ready(function(){
$(".index_login_subm").click(function(){
uid = $("input:username").val();
pwd = $("input:password").val();
var inputData = {uid:uid, pwd:pwd};
alert(uid+" "+pwd);
// If you have a console.log() available, just use it on inputData here instead.
$.post("backend/login.php",inputData
,function(data){
alert("Returned data: " + data);
});
return false;
});
});
编辑:基于mysql_real_escape_string-only-a-connection-has-been-initiated的事情,我已经从上面的代码中删除了逃脱,因为真的,你最好先逃避这些东西你把它放入sql。
此外,请记住,使用javascript登录 WILL 回来咬你,功能基本和必要的登录,你不希望javascript错误打破任何能力让观众登录。这里会这样做。
答案 2 :(得分:1)
是否有有效的mysql链接?
string mysql_real_escape_string ( string $unescaped_string
[, resource $link_identifier ] )
如果未指定
link identifier
,则假定mysql_connect()
打开的最后一个链接。如果没有找到这样的链接,它将尝试创建一个,就好像mysql_connect()
被调用而没有参数。如果未找到或建立连接,则会生成E_WARNING
级错误。
可能是您的错误报告设置忽略了E_WARNING
级错误。
答案 3 :(得分:0)
index.php显然位于网站的根目录中,但您调用的脚本位于“后端”目录中。
尝试使用include_once
代替include
并使用绝对路径,而不是相对路径。
示例:
<?php
include_once($_SERVER['DOCUMENT_ROOT']."/settings.php"); //absolute path to file
echo $uid;
echo $_POST['uid'];
?>
如果您移动文件,使用绝对路径将使您的生活更轻松。