2016-01-14 76 views
0

所以我也跟着教程演示如何登錄,PHP PDO登錄用戶名和密碼未發現

但我改變了我的phpMyAdmin的用戶名和密碼,但每次當我嘗試登錄,它說:用戶名或密碼沒有發現這是代碼;

<!--Begin webshop WOOOH--> 

<?php 


session_start(); 

    //DB configuration Constants 
    include("class.php"); 
    //PDO Database Connection 
    try { 
     $databaseConnection = new PDO('mysql:host='._HOST_NAME_.';dbname='._DATABASE_NAME_, _USER_NAME_, _DB_PASSWORD); 
     $databaseConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } catch(PDOException $e) { 
     echo 'ERROR: ' . $e->getMessage(); 
    } 

    if(isset($_POST['submit'])){ 
     $errMsg = ''; 
     //username and password sent from Form 
     $username = trim($_POST['username']); 
     $password = trim($_POST['password']); 

     if($username == '') 
      $errMsg .= 'You must enter your Username<br>'; 

     if($password == '') 
      $errMsg .= 'You must enter your Password<br>'; 


     if($errMsg == ''){ 
      $records = $databaseConnection->prepare('SELECT id,username,password FROM tbl_users WHERE username = :username'); 
      $records->bindParam(':username', $username); 
      $records->execute(); 
      $results = $records->fetch(PDO::FETCH_ASSOC); 
      if(count($results) > 0 && password_verify($password, $results['password'])){ 
       $_SESSION['username'] = $results['username']; 
       header('location:dashboard.php'); 
       exit; 
      }else{ 
       $errMsg .= 'Username and Password are not found<br>'; 
      } 
     } 
    } 

?> 

<html> 
<head> 

    <link rel="stylesheet" type="text/css" href="css/style.css"> 
    <link rel="stylesheet" type="text/css" href="css/reset.css"> 

    <title>Webshop 2016</title> 

</head> 
<body> 

    <div id="wrapper"> 
     <div id="header"> 
      <ul> 
       <li><a href="#">Info</a></li> 
       <li><a href="#">Login</a></li> 
       <li><a href="#">Webshop</a></li> 
       <li><a href="#">Home</a></li> 
      </ul> 
     </div> 
     <!--Main content!--> 
     <div id="content"> 

<div align="center"> 
     <div style="width:300px; border: solid 1px #006D9C; " align="left"> 
      <?php 
       if(isset($errMsg)){ 
        echo '<div style="color:#FF0000;text-align:center;font-size:12px;">'.$errMsg.'</div>'; 
       } 
      ?> 
      <div style="background-color:#006D9C; color:#FFFFFF; padding:3px;"><b>Login</b></div> 
      <div style="margin:30px"> 
       <form action="" method="post"> 
        <label>Username :</label><input type="text" name="username" class="box"/><br /><br /> 
        <label>Password :</label><input type="password" name="password" class="box" /><br/><br /> 
        <input type="submit" name='submit' value="Submit" class='submit'/><br /> 
       </form> 
      </div> 
     </div> 
    </div> 

     </div> 
     <div id="footer"> 
      Footer 
     </div> 
    </div> 

</body> 
</html> 

這是class.php(連接文件)

<?php 
define('_HOST_NAME_', 'localhost'); 
define('_USER_NAME_', 'root'); 
define('_DB_PASSWORD', '####'); 
define('_DATABASE_NAME_', 'ws_webshop'); 

//PDO Database Connection 
try { 
$databaseConnection = new PDO('mysql:host='._HOST_NAME_.';dbname='._DATABASE_NAME_, _USER_NAME_, _DB_PASSWORD); 
$databaseConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $e) { 
echo 'ERROR: ' . $e->getMessage(); 
} 

?> 

有誰看到這個問題?

用戶和傳球演示/演示,但他說,世界上沒有用戶名或密碼的發現...

+0

請使用PHP的[內置函數(http://jayblanchard.net/proper_password_hashing_with_PHP.html)來處理密碼的安全性。如果您使用的PHP版本低於5.5,則可以使用'password_hash()'[兼容包](https://github.com/ircmaxell/password_compat)。您是否使用'password_hash()'將密碼放入數據庫中?如果不是,'password_verify()'不起作用。 –

+0

我把它們放在純文本中,生病嘗試改變它太亂碼 –

+0

你需要把'password_hash'的返回哈希值放到數據庫字段中。 –

回答

3

docs

返回true如果密碼和散列匹配,否則爲false 。

如果你沒有使用password_hash()使用password_verify()嘗試在這裏你檢查數據庫中插入密碼:

if(count($results) > 0 && password_verify($password, $results['password'])){ 

總是會失敗,因爲該功能需要一個簡單的密碼來比較的哈希值。密碼。對PHP的密碼功能,更深入閱讀this post.


另外你可能會發現自己想限制密碼和you really shouldn't do that


enter image description here

+0

是的,你的權利我的朋友 – devpro

+0

Im手動將密碼輸入到數據庫,因爲我還沒有註冊表單,我試着翻譯成哈希並放入,但是結果相同,沒有用戶名或密碼 –

+0

然後,您無法使用該函數@LucStey驗證密碼。確保你的哈希數據庫列也足夠大。我通常將列類型設置爲「文本」。 –