2016-09-21 12 views
0

私は数日間コードを見てきましたが、問題を見つけることができませんでした。私はPHPで新しいので、私は本当にそれのすべてに精通していない。ログイン機能を実行できません。エラーはありません

以下は私のコードです。エラーはありません。セッション変数の値は登録されていません。 login.phpのsubmで

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

** ** ** mysqlを使用する場合、[パラメータ化されたクエリ](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

**警告**:独自のアクセスコントロールレイヤーを作成するのは簡単ではなく、間違った操作をする機会がたくさんあります。 [適切に値をエスケープしていない](http://bobby-tables.com/php)のため、これには多くの危険な[SQLインジェクションの脆弱性](http://bobby-tables.com/)があります。このコードでは、誰でもあなたのサイトから何かを得ることができます。 **あなた自身の認証システムを書いてはいけません**。 [Laravel](http://laravel.com/)のような[開発フレームワーク](http://codegeekz.com/best-php-frameworks-for-developers/)には、[認証システム](https: /laravel.com/docs/5.2/authentication)を内蔵しています。 – tadman

+0

警告ありがとうございます。私はこのログイン機能が非常に安全でないことを知っています。私の唯一の問題は何もしないということです。私にエラーなどを与えません。 – devgirl

答えて

0

フォームそのindex.phpに。 index.phpでは、ユーザ名がまだセッションにない場合は、login.phpにリダイレクトされます。 PHPコードの先頭にif (!empty($_POST)) {をチェックしてください。

$_POSTあなたはそのページにリダイレクトされているのでPOSTされていないので、PHPコードは実行されません。

action="index.php"を削除すると、そのフォームは自分自身に送信されます(login.php)。また、HTMLフォームコード以下に移動すると、ログインが成功した場合にリダイレクトヘッダの前に出力されないようになります。

関連する問題