登录页面数据库连接

时间:2013-11-21 04:46:51

标签: php

我在php中创建了登录页面的代码。但我需要知道代码是否正确。它没有正常工作。即使我输入了正确的用户名和密码,也会说“你不是有效的用户。请再试一次”。我怎样才能解决这个问题?? 代码如下;

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

if ($uname) {
   $dhost="localhost";
   $dusername="locas";
   $dpassword="locas@learn";
   $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.";
   }
};
?>

6 个答案:

答案 0 :(得分:3)

您的查询中有两个问题......

  1. $uname是字符串。你必须引用它。
  2. 您正在使用==。您正在混合PHPmysql。请改用=
  3. 更新您的查询...

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

      

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

答案 1 :(得分: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.";
}

};

答案 2 :(得分:0)

select user.fname,password.pwd from user,password where 
user.uid=password.uid and user.fname==$uname

在上述查询中,请尝试使用=代替==

来源:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html

答案 3 :(得分: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)。

在查询之后,您只需检查是否得到空结果。

答案 4 :(得分: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."'"

答案 5 :(得分:0)

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

吗?
    $dhost="localhost";
    $dusername="locas";
    $dpassword="locas@learn";
    $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 "); 

注意:从PHP 5.5.0开始,不推荐使用mysql_*扩展名,并且将来会将其删除。相反,应该使用MySQLi或PDO_MySQL扩展。