2013-11-21 115 views
0

我已经在php中创建了登录页面的代码。但我需要知道代码是否正确。它没有正常工作。即使我输入了正确的用户名和密码,它也会显示'您不是有效的用户,请重试'。我怎样才能解决这个问题??代码如下:登录页面数据库连接

<?php 
$uname=$_POST['uname']; 
$pwd=$_POST['pwd']; 

if ($uname) { 
    $dhost="localhost"; 
    $dusername="locas"; 
    $dpassword="[email protected]"; 
    $db="locas"; 

    mysql_connect($dhost,$dusername,$dpassword) or die("cannot connect"); 
    mysql_select_db("$db")or die("cannot select db"); 

    echo "$uname<br>"; 
    $result=mysql_query("select user.fname,password.pwd from user,password where user.uid=password.uid and user.fname==$uname");   
    $row=mysql_fetch_array($result); 

    if ($row["fname"]==$uname && $row["pwd"]==$pwd) { 
     echo"you are a valid user."; 
    } else { 
     echo" You are not a valid user.Please try agian."; 
    } 
}; 
?> 
+0

回显查询并执行一次,并检查它是否正常工作。 – Jenz

+0

选择user.fname,密码。pwd来自用户,密码 user.uid = password.uid和user.fname == $ uname?当您直接在MYSQL面板上运行它时,该查询是否有效? – Hozikimaru

+0

@ user2981403:我不认为在mysql查询中需要'==' –

回答

3

有两个问题在查询......

  1. $uname是字符串。你必须引用它。
  2. 您正在使用==。你在混合PHPmysql。改为使用=

更新您的查询......

$result=mysql_query("select user.fname,password.pwd from user,password where 
    user.uid=password.uid and user.fname='$uname'"); 

,你还需要使用mysqli_ *或PDO;不建议使用mysql_ *函数 。最重要的是,你有SQL注入漏洞,所以 请不要在生产中使用这个代码!

+3

@ user3015967:您还需要使用mysqli_ *或PDO; mysql_ *函数已被弃用。最重要的是,你有SQL注入漏洞,所以请不要在生产中使用此代码! –

0

如果您的查询是正确的,我不确定是否可以正常运行,您应该尝试以下;

$row=mysql_num_rows($result); 


if ($row>0) 
{ 
echo"you are a valid user."; 
} 

else 
{ 
echo" You are not a valid user.Please try agian."; 
} 

};

0

你应该通过一个共同的指数连接两个表。类似这样的:

SELECT `user`.`fname`,`password`.`pwd` FROM `user`, 
INNER JOIN `password` USING (`uid`) 
WHERE user.fname='$uname' AND password.pwd = '$pwd' 

一定要用mysql_real_escape_string消毒用户名和密码!密码也应该是私人散列(md5或sha-1)。

查询后,你只需检查你是否得到一个空的结果。

0

尝试更新的:

$uname = isset($_POST['uname']) ? $_POST['uname'] : ''; 
$pwd = isset($_POST['pwd']) ? $_POST['pwd'] : ''; 

和查询:

"SELECT user.fname, password.pwd FROM user,password WHERE user.uid = password.uid and user.fname ='".$uname."'" 
0

你可以尝试使用user.fname='".mysql_real_escape_string($uname)."'代替user.fname==$uname

$dhost="localhost"; 
    $dusername="locas"; 
    $dpassword="[email protected]"; 
    $db="locas";   

     $link = mysql_connect($dhost, $dusername, $dpassword); 
     if (!$link) { 
      die('Not connected : ' . mysql_error()); 
     } 

     // make foo the current db 
     $db_selected = mysql_select_db($db, $link); 
     if (!$db_selected) { 
      die ('Can\'t use foo : ' . mysql_error()); 
     } 

     $result=mysql_query("select user.fname,password.pwd from user,password where user.uid=password.uid and user.fname='".mysql_real_escape_string($uname)."' ORDER BY uid ASC LIMIT 1 "); 

注:mysql_*扩展已废弃PHP 5.5.0,并将在f中被删除uture。相反,应该使用MySQLi或PDO_MySQL扩展。