2016-09-21 47 views
0

我一直在看我的代碼幾天,但似乎無法找到問題。我是PHP新手,所以我並不十分熟悉它。無法執行登錄功能。沒有錯誤

以下是我的代碼。沒有錯誤。沒有註冊的會話變量值。

DB-config.php文件

<?php 
$host = 'localhost'; 
$user = 'root'; 
$pass = ''; 
$db = 'mcsh'; 

$conn = mysqli_connect($host, $user, $pass, $db); 

if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 
?> 

的login.php

<form id="user-login" action="index.php" method="POST"> 
    <h1>Administrator Login</h1> 
    <input type="text" name="username" placeholder="Username" required/> 
    <input type="password" name="password" placeholder="Password" required/> 
    <button type="submit">Login</button> 
    <a href="/">Forgot your password?</a> 
</form> 

<?php 
if (!empty($_POST)) { 
    if (!empty($_SESSION['username'])) { 
     header("Location: index.php"); 
    } 

    $username = $_POST['username']; 
    $password = $_POST['password']; 

    include("../config/db-config.php"); 

    $sql = "SELECT `userid`, `password` FROM users WHERE userid = '" . $username . "' AND userlevel = '99'"; 
    $result = mysqli_query($conn, $sql); 

    if ($row = mysqli_fetch_assoc($result)) { 
     if (password_verify($password, $row['password'])) { 
      $_SESSION['username'] = $row['userid']; 
      header("Location: index.php"); 
      exit; 
     } 
     else { 
     ?> 
      <p class="msg" id="error">Invalid username or password. Please try again.</p> 
     <?php 
     } 
    } 
    else { 
    ?> 
     <p class="msg" id="error">Invalid username or password. Please try again.</p> 
    <?php 
    } 
} 
?> 

的index.php

<?php 
session_start(); 
include("../config/config.php"); 
if (empty($_SESSION['username'])) { 
    header("Location: login.php"); 
} 
else { 
//the rest of the index page... 
?> 
+1

**警告**:使用'mysqli'時,您應該使用[參數化查詢](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和['bind_param' ](http://php.net/manual/en/mysqli-stmt.bind-param.php)將用戶數據添加到您的查詢。 **不要**使用字符串插值或連接來完成此操作,因爲您創建了嚴重的[SQL注入漏洞](http://bobby-tables.com/)。 **絕不**將'$ _POST'或'$ _GET'數據直接放入查詢中,如果有人試圖利用您的錯誤,這會非常有害。 – tadman

+0

**警告**:編寫您自己的訪問控制層並不容易,並且有很多機會使其嚴重錯誤。這有很多危險的[SQL注入漏洞](http://bobby-tables.com/),因爲你沒有[妥善轉義值](http://bobby-tables.com/php)。此代碼允許*任何人*從您的網站獲得*任何*。 **不要**寫你自己的認證系統。任何[開發框架](http://codegeekz.com/best-php-frameworks-for-developers/)像[Laravel](http://laravel.com/)都帶有一個[認證系統](https:/ /laravel.com/docs/5.2/authentication)內置。 – tadman

+0

感謝您的警告。我知道這個登錄功能是非常不安全的。我唯一的問題是它沒有做任何事情。不給我錯誤或這樣的。 – devgirl

回答

0

你在login.php中SUBM形式它的index.php。在index.php中,如果用戶名尚未在會話中,您將被重定向回login.php。您在PHP代碼的開頭檢查if (!empty($_POST)) {

$_POST爲空,因爲您已經重定向到該頁面,沒有發佈給它,所以PHP代碼將不會執行。

刪除action="index.php",該表單將提交給自己(login.php)。另外,請將HTML代碼移動到以下的PHP代碼中,這樣如果登錄成功,您將不會在重定向標頭之前輸出。