2017-07-10 5 views
-1

mySQLデータベースに接続された簡単なログインページを作成しました。 正しいログイン情報を入力しようとしても、「不正なユーザー名またはパスワード」というエラーが返されます。私のコード自体やデータベースに問題があるかどうかはわかりません。どんな助けでも大歓迎です!正しいログイン情報を入力してもログインページが「不正なログイン」を返す

私のデータベースは次のようになります。私は現在、テストのためにそのデータベース内の2つのエントリを持ってhttps://gyazo.com/da06e276d981a35a3e2f01f5ec17f27b

<?php 
include('login.php'); // Include Login Script 
if ((isset($_SESSION['username']) != '')) 
{ 
header('Location: home.php'); 
} 
?> 

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>PHP Login Form with Session</title> 
<link rel="stylesheet" href="style.css" type="text/css" /> 
</head> 

<body> 
<h1>PHP Login Form with Session</h1> 
<div class="loginBox"> 
<h3>Login Form</h3> 
<br><br> 
<form method="post" action=""> 
<label>Username:</label><br> 
<input type="text" name="username" placeholder="username" /><br><br> 
<label>Password:</label><br> 
<input type="password" name="password" placeholder="password" /> <br><br> 
<input type="submit" name="submit" value="Login" /> 
</form> 
<div class="error"><?php echo $error;?></div> 
</div> 
</body> 
</html> 

マイlogin.phpを以下のようにhttps://gyazo.com/04a52dde61e77e0cbc2f90b78b3f40a9

私のindex.phpコードがありますコードは次のとおりです。

<?php 
session_start(); 
include("connection.php"); //Establishing connection with our database 

$error = ""; //Variable for storing our errors. 
if(isset($_POST["submit"])) 
{ 
if(empty($_POST["username"]) || empty($_POST["password"])) 
{ 
$error = "Both fields are required."; 
}else 
{ 
// Define $username and $password 
$username=$_POST['username']; 
$password=$_POST['password']; 

//Check username and password from database 
$sql="SELECT uid FROM users WHERE username='$username' and password='$password'"; 
$result=mysqli_query($db,$sql); 
$row=mysqli_fetch_array($result,MYSQLI_ASSOC); 

//If username and password exist in our database then create a session. 
//Otherwise echo error. 

if(mysqli_num_rows($result) == 1) 
{ 
$_SESSION['username'] = $login_user; // Initializing Session 
header("location: home.php"); // Redirecting To Other Page 
}else 
{ 
$error = "Incorrect username or password."; 
} 

} 
} 

?> 
+0

**警告**:独自のアクセスコントロールレイヤーを作成するのは簡単ではなく、間違った操作をする機会がたくさんあります。 [Laravel](http://laravel.com/)のような最新の[開発フレームワーク](http://codegeekz.com/best-php-frameworks-for-developers/)がある場合は、独自の認証システムを作成しないでください。強力な[認証システム](https://laravel.com/docs/5.4/authentication)が組み込まれています。絶対に[推奨されるセキュリティのベストプラクティス](http://www.phptherightway.com/#security)に従ってください。パスワードはプレーンテキスト**として保存しないでください。 – tadman

+0

**警告**: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

注: 'mysqli'へのオブジェクト指向インタフェースは、コードの読み込みと監査を容易にし、' mysql_query'インタフェースと簡単に混同しません。手続き型スタイルに多額の投資をする前に、それを切り換える価値があります。例: '$ db = new mysqli(...)'と '$ db-> prepare(" ... ")' – tadman

答えて

0

1 - プレーンテキストでの保存はNOです。 2-私が見る限り、プレーンテキストのパスワードとそのmd5を比較しています。 同じ変数を複数回、異なる値で定義したことがあります。

+0

ありがとうございました。パスワードをmd5に変換するコードの部分を削除しました。私が何回も定義した変数について詳しく教えてください。 –

+0

どちらの方法でも、includeの代わりにrequire_onceを使ってみました。 – Klajdi

0

まあ、login.phpページの$ login_userにコードの値がどこに割り当てられているのかわかりません。 また、あなたがあなたのindex.phpページの一番上に持っているもので、これを置き換える

$_SESSION['username'] = $username; 

を試してみてください。

<?php 
include('login.php'); // Include Login Script 
if (isset($_SESSION['username'])){ 
header('Location: home.php'); 
} 
else{} 
?> 
+0

助けてくれてありがとう、私はあなたが推薦したすべての変更を加えたが、まだ正常にログインすることができなかった。あなたが提案できるものは他にありますか? –

関連する問題