2014-01-29 40 views
0

我是新手到PHP和我刚刚建立简单的登录页面用PHP这里是我的代码:用PHP登录页面时遇到

<?php 
    $username=$_POST['uname']; 
    $password=$_POST['pass']; 
    $con=mysqli_connect("localhost","root","","myblog"); 
    $sql="SELECT username,password FROM users WHERE username='$username' AND password='$password'"; 
    if(mysqli_query($con,$sql)) { 
     echo "login successful"; 
    } else { 
     echo "login failed"; 
    } 
?> 

问题是我收到“登录成功”味精甚至与错误凭据(随机输入)。 请有人指导我。

+3

请,请,请,请,请**了解SQL注入**!逃脱你的投入。 – BenM

+0

答案在于你的查询结果,那就是你缺少 –

回答

0

试试这个

你必须检查结果是否产生或不...相反查询正确与否的..

<?php 
$username=$_POST['uname']; 
$password=$_POST['pass']; 
$con=mysqli_connect("localhost","root","","myblog"); 
$sql="SELECT username,password FROM users WHERE username='$username' AND password='$password'"; 

$result =mysqli_query($con,$sql); 
$count = mysqli_num_rows($result); 

if($count>0) 
{ 
echo "login successful"; 
} 
else 
{ 
echo "login failed"; 
} 
?> 
+0

谁投下了......?我可以知道我的错在哪里... – user1844933

+0

因为您没有提到需要转义'$ _POST'的值。 – BenM

+0

@@BenM看他的问题,我只回答他的问题,他可能不需要逃避。好吧,希望你知道准备好的声明是最好的一个逃脱,这里没有人提到,你说这个.. – user1844933

0

尝试做这样的。使用mysqli_num_rows()

$result = mysqli_query($con,$sql); 

    if(mysqli_num_rows($result) >0){ 
     echo "login successful"; 
    }else { 
     echo "login failed"; 
    } 
0

你没有检查,如果查询是succesfull,但如果结果有一些行..

$answer = mysqli_query($con,$sql) 
if( mysqli_num_rows($answer)>0 ) { ... there is such record... } 
0

试试这个

<?php 
    $username=$_POST['uname']; 
    $password=$_POST['pass']; 

    $username = mysql_real_escape_string(stripslashes($username)); 
    $password = mysql_real_escape_string(stripslashes($password)); 

    $con=mysqli_connect("localhost","root","","myblog"); 
    $sql="SELECT username,password FROM users WHERE username='$username' AND password='$password' LIMIT 1 "; 
    $result = mysqli_query($con,$sql); 
    if($row = mysqli_fetch_assoc($result)) 
    { 
     echo "login successful"; 
    } 
    else 
    { 
     echo "login failed"; 
    } 
?> 

你的病情是不妥当的,还每当您尝试获取确切的一个结果时,请使用LIMIT 1

您应该通过mysql_real_escape_stringstripslashes通过您的帖子变量来防止SQL注入