2014-10-02 70 views
0

首先。我是PHP/SQL和StackOverflow的新手,所以如果我的帖子很奇怪,我很抱歉。我很难弄清楚我的代码有什么问题。我注册了几个用户(每个用户的密码都是c),但我只登录失败。如果这是错误的,是我的吗?用户认证PHP/SQL

谢谢。

<?php 

session_start(); 

    //Connecting and choosing DB 
    $connection = mysql_connect("link", "user", "pw");   
    mysql_select_db("user", $connection); 

    $username = mysql_real_escape_string($_POST['brukernavn']); 
    $password = mysql_real_escape_string($_POST['passord']); 


    // Check the users input against the DB. 
    $sql = "SELECT * FROM brukere WHERE brukernavn = '$username' AND passord = '$password'"; 
    $result = mysql_query($sql) or die ("Unable to verify user because " . mysql_error()); 

    $row = mysql_fetch_assoc($result); 

    if($row['total'] == 1) 

    { 
     $_SESSION['loggedIn'] = "true"; 
     header("Location: insertlink"); 
    } 
    else 
    { 
     $_SESSION['loggedIn'] = "false"; 
     echo "<p>Login failed, username or password incorrect.</p>"; 
    } 

?> 
+0

我知道你说你是PHP/MySQL的新手,所以我建议开始时不要使用mysql_ *函数。看看mysqli或PDO(后者是我个人的偏好)。我们还需要查看您的注册码。你是否在保存密码时加密密码? – muttley91 2014-10-02 23:04:48

+4

1.'mysql_ *'已弃用,请使用'mysqli_'或'PDO'。 2.你在你的数据库中存储明文密码,这是非常糟糕的。 – lxg 2014-10-02 23:04:53

+0

@lxg - 我希望我可以给大约100个upvotes ... – 2014-10-02 23:12:19

回答

3

有由mysql_fetch_assoc()返回的数组中没有total字段。

如果你想知道结果的数量,使用count功能:

if(count($rows) === 1) 
… 

顺便说一句,前面已经提到:

  1. mysql_*已过时,使用mysqli_*PDO
  2. 您正在数据库中存储明文密码,这非常糟糕。请阅读哈希和盐渍存储的密码。
+1

[php密码加密文档](http://php.net/manual/en/faq.passwords.php) – 2014-10-02 23:14:36

+0

@lxg非常感谢您,先生!我要去看看mysqli_和PDO。 – 2014-10-02 23:17:35

+0

不错的链接@ gloomy.penguin。不知道PHP有关于此的专门文章。 – lxg 2014-10-02 23:17:43