2010-03-20 80 views
0

我写了一个用于登录验证的代码..我用GET获得了输出。但我需要用POST输出,因为它更安全。如果我的代码中有任何错误,请告诉我。POSTmethod和PHP-登录验证

javascript代码:

var xml; 
function verifyusernamepasswd(pass) 
{ 
//pass is password that will be passed as parameter 
xml=new XMLHttpRequest(); 
var url="http://localhost/loginvalidate.php"; 
var para="q="+username+"&p="+pass;//username is global 
xml.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xml.setRequestHeader("Content-length", para.length); 
xml.setRequestHeader("Connection", "close"); 
xml.open("POST",url,true); 
xml.onreadystatechange=statechanged1; 
xml.send(para); 

} 

function statechanged1() 
{ 
if(xml.readyState==4) 
alert(xml.responseText); 

} 


php code: 

<?php 
$username=$_POST["q"]; 
$password=$_POST["p"]; 
$con=mysql_connect("localhost","root","blaze"); 
if(!$con) 
{ 
die('Could not connect: '.mysql.error()); 
} 
mysql_select_db("BLAZE",$con) or die("No such Db"); 
$result=mysql_query("SELECT Passwword FROM USERTABLE WHERE Userhandle='$username'"); 
if($result==null) 
echo "false"; 

else if($result!=null) 
{ 
$row=mysql_fetch_array($result); 
if((strcmp($row['Passwword'],$password)==0)) 
echo "true"; 
else 
echo "false"; 
} 

?> 

验证不返回任何东西,COS都没有显示我的警告......请告诉我,什么是错....

+0

请开始通过反应等'readyState's比4做一些调试 - 你可能会回来,解释什么是错的错误消息。这是通常的方式去做这样的事情,步骤调试的步骤。然后,可能需要查看像JQuery这样的JS框架,它使得AJAX调用更加容易:http://api.jquery.com/category/ajax/。然后,你有一个大的SQL注入,但我让你意识到已经在最后一个问题,所以我不重新发布链接在这里:) – 2010-03-20 21:53:11

+0

但你认为格式都是正确的吗?像我不得不添加任何额外的东西,让POST工作吗?是的,我记得关于SQL注入..但我不认为这是问题在这里...因为只有很少的必要的变化,我用GET方法得到输出... – Neethusha 2010-03-20 21:57:17

+0

好吧,看看通过你给的链接...但请张贴我与其他任何想到你的想法... – Neethusha 2010-03-20 21:59:23

回答

0

你试过访问直接查看PHP页面是否有任何错误?您可能还想尝试使用Firebug(适用于Firefox)或Chrome中的开发人员工具,以确保请求实际上正在发送,并检查结果。

Passwword拼写在数据库中的方式,还是它只是在你的PHP错字?

最后,虽然它现在不会导致你的问题,但它可能会降低你的代码:你的代码容易受到SQL injection的影响 - 恶意用户可能会传递一些不合适的论点,并将不好的事情传递给你的数据库。你需要在SQL查询中使用它之前逃脱$username,例如:

"SELECT ... WHERE userhandle = '" . mysql_real_escape_string($username) . "'"
+0

是passwword拼写在我的分贝: - 这是一个拼写错误...我的php代码是正确的。我在本地主机上运行它,它给出了正确的输出......并感谢您关于sql注入的说明..它会有所帮助... – Neethusha 2010-03-20 22:04:09

+0

另一件事是我试图回显$ username n的值,然后$密码php代码在开始。没有alert.so我认为参数r没有达到php代码.. – Neethusha 2010-03-20 22:06:27

+0

你确定浏览器正在发送请求吗?使用Firebug/chrome开发工具/等。尝试提醒readyState的值,即使它不是4等。 – Chris 2010-03-20 22:23:49