2017-08-11 18 views
-1

管理者とユーザーのヘッダーの場所を分けたい。私はdbというカラムを持っています。私は管理者用に1、ユーザ用に2を使用し、管理者は2人、管理者は2人、ユーザは2人です。管理者またはユーザーの役割に基づいてユーザーをリダイレクトしたい

username Adminでログインすると管理レイアウトにリダイレクトされ、ユーザーとログインしている場合はユーザーページにリダイレクトされます。私はコードを付けました。

<?php 

    session_start(); 
include'config.php'; 


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


     $sql = "SELECT * FROM sign_in where user_name='$un' and pasword='$pw'"; 



      //SELECT `id`, `user_name`, `pasword` FROM `sign_in` WHERE 1 


     $result = $conn->query($sql); 

     if ($result->num_rows > 0){ 

      header('Location:index2.php'); 

     }else{ 
     echo "Invalid username or password"; 
     } 

?> 

ユーザーが間違ったユーザー名パスワードを入力すると、表示されるポップアップが無効です。ユーザー名パスワード。データベースsign_inテーブルのスクリーンショットを追加しました。

+1

あなたは正確に何を抱きましたか?どのようにリダイレクトを行うのですか? 'if'文のやり方は?あなたは何を試しましたか、何が動いていませんか?また、あなたのコードはSQLインジェクションに対して広く開かれていることに注意してください。あなたはここで見てみたいかもしれません:https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – David

+0

@David先生実際には、私は開発に新しいので、私はしたいです私のコードを編集して、私に探しているコードを送ることができる人を探してください... –

+2

その場合、あなたはこのコミュニティが何をしているのか誤解しています。ここから始めてください:https://stackoverflow.com/help解決しようとしている特定の問題がある場合は、それを手助けすることができます。しかし、もしあなたが言うように、あなたはあなたのためにあなたの仕事をする人を探しているだけなら、それはここで起こることではありません。 – David

答えて

1

OK、あなたは多くのことを間違っているので、私はあなたの答えが残忍かもしれませんが、回答欄に書きます。

まず、ユーザーデータをクエリに渡します。これは危険な可能性があります。実行することでシステムに悪影響を及ぼすことのない安全でないデータを与える可能性があるからです。

第2に、ユーザーのパスワードを適切に保護していません。 PHPにはpassword_hash()という関数があります。あなたがやっているように単純なパスワードではなく、password_hash($ _ POST ['password']、PASSWORD_DEFAULT) `をデータベースに挿入すると本当に使いやすいです。

最終日に、PHP/MySQL用のPDOドライバを使用することをお勧めします。 config.phpファイルをhereから設定する方法のアイデアを得ることができます(ページの1/2の方向にPDO命令までスクロールダウン)。

あなたがそれをやったら:

$stmt->prepare("SELECT * FROM sign_in WHERE user_name = :user_name") 
$stmt->bindParam(':user_name', $_POST['user_name'); 
$stmt->execute(); 
$result = $stmt->fetch(PDO::FETCH_ASSOC); 

あなたは今、テーブル内のあなたの星座からのすべてのデータを持っています。あなたのsign_inテーブルはおそらく単なるusersテーブルのように見えるので、他の世界との一貫性のためにそれを呼び出すことができます。

最初に、投稿したパスワードとデータベースのハッシュを比較し、一致する場合にのみ処理を進めます。

if(!password_verify($_POST['password'], $result['password']) { 
    // if the result is false, they need to be redirected. 
    header('Location: http://yoursite'); 
    exit; 
} 

今、私たちは彼らが署名確認したことを、あなたは自分の結果から、(あなたが持っていると仮定したI "m)の「ROLE_ID」を見て、各ロールのための特定のヘッダーを表示することができます。

if($role_id == 1) { ?> 
<b>You can just enter plain old HTML here - this is what you would put in for your admin header</b> 
<?php } else { ?> 
<b>This is the header that your user would see if they AREN'T an admin</b> 
<?php } ?> 

申し訳ありませんがあなたの答えは残念ですが、私はSQLインジェクションを防止するための準備文(password_hashとpassword_verify関数の使用方法)をできるだけ簡単に保つようにしました。 (ハッシュ形式で)、最後にユーザーロールに応じて異なるヘッダーを表示します。

残念ながら、あなたの現在のコードにコピー/貼り付けはできませんが、私が提供したリンク(PDO)を読むことをお勧めします。私はあなたに長い時間をかけてはいけません、私は約束します!

関連する問題