2016-10-26 2 views
1
<?php 
session_start(); 

include 'dbConnection.php'; 

$uid = $_POST['uid']; 
$pwd = $_POST['pwd']; 

$sql = "SELECT * FROM user WHERE uid='$uid' and pwd='$pwd'"; 
$result = $conn->query($sql); 


if(!$row = $result->fetch_assoc()) 
{ 
    echo '<script language="javascript">'; 
    echo 'alert("Username or Password Incorret!")'; 
    echo '</script>'; 
    header("Location:index.php"); 

} 
else{ 

$_SESSION['id']= $row['id'];  
echo '<script language="javascript">'; 
echo 'alert("Logged!")'; 
echo '</script>'; 

} 
?> 

こんにちは、コミュニティ 上記のコードは私が開発しようとしている単純なログインです。私はちょっとPHPがまだ学んで、スクリプトは正常に動作しますが(暗号化が欠けています)ログインの次のステップはにロールを追加します。を追加してください。 誰かが示唆を持っているなら、彼らはすべて歓迎です!PHPログインを追加する

は、まず、データベーステーブルの「役割」の列を追加します。あなたはコメントで言ったことを基に

+0

役割の追加は何を意味しますか? – Shiv

+0

adminの場合は(admin、student)はxxx.phpに移動し、ケース学生はyyy.phpに行く –

+0

ヘッダの前に出力がないので、これはエラーを吐き出すはずです – nogad

答えて

1

あなたのPHPスクリプトは、成功したログインブロックに次のものを追加するだけの問題かもしれません。

if($row['role'] == "Admin"){ 
    header('Location: admin.php'); 
}elseif($row['role'] == "Student"){ 
    header('Location: student.php'); 
} 

他の人が言ったように、あなたが本当にSQLクエリを脱出の世話を適切な認証システムを使用する必要があり、セキュリティ、パスワードハッシュなど

+0

あまりにも広範な質問に答える時間を費やしてはいけません。 –

+0

@JayBlanchard ok。ちゃんと覚えておきますよ。私はそれが初めてだった時を覚えています。誰もが過酷であると感じました:p – Shiv

+1

私は理解しますが、これは厳しいものではありません。 –

-1

適切にこれを取得するには、別のテーブルが必要になりますロール用のデータベースに、user -roleでユーザーテーブル内の余分な列に移動します。ここで、ユーザーが割り当てたはずのロールテーブルからIDを格納します。データをプルするときは、IDの2つのテーブルを結合し、名前などのロールに関する他の情報を取得します。

ロールテーブルには、 role_id、role_name などの情報が含まれています(もちろん、user_level(int)など)。これは高度なプロジェクト用です。

user-tableにuser_roleカラムを追加します。このカラムには、role-tableからid-numberを格納します。

役割の実際の名前を取得するには、あなたがこのような何かをするだろう、2つのテーブルを結合する必要があります: $sql = "SELECT * FROM user t1 LEFT JOIN role t2 ON t1.user_role = t2.role_id WHERE uid='$uid' and pwd='$pwd'";

あなたは、データベースから返される情報には、別の結果を持っていますそのように、役割を含む。

+0

あまりにも広い質問に答える時間を費やさないでください。 –

0

私はあなたのスクリプトといくつかの深刻な問題を参照してください。mysqliのを使用しないでください

  1. を - それは非推奨だと使用すべきではありません。 PDO isteadを使用してください。
  2. パスワードをハッシュする必要があります。 password_hash()について読む
  3. conca3でSQL文を作成しないでください。ユーザー入力から文字列を取ります。それはSQLインジェクションには大変です。プレースホルダを使用する必要があります。

    $stmt = $db->prepare("SELECT * FROM user WHERE uid=:uid AND password=:password"); 
    $stmt->execute(array(':password' => $password, ':uid' => $uid)); 
    $rows = $stmt->fetchAll(); 
    

あなたのコードのより詳細なレビューをしたい場合は、codereviewに投稿することができます。

ロールの実装では、単一の列NAMEを使用して追加表ROLEを作成できます。たとえば、(MySqlで):

CREATE TABLE role (
    name varchar(255) NOT NULL 
) 

ALTER TABLE role ADD PRIMARY KEY ('name'); 

INSERT INTO role (name) VALUES 
('ADMIN'), 
('STUDENT'); 

さらに、表の外部キーを使用してユーザー表に列を追加できます。

あなたはちょうど役割の名前を取得し、正しい場所にリダイレクトできます。

if($row['ROLE'] == "ADMIN"){ 
    header("Location: http://example.com/admin.php"); 
    die(); 
} else { 
    .... 
} 

このアプローチの利点は何ですか? 1つの表にすべての役割がリストされており、外部キーのためにデータの整合性が保持されます。 USER表のROLE列では、ROLE表にも格納されている役割のみを格納できます。まだ割り当てられている役割を削除しようとすると、ユーザーデータベースには割り当てられません。

この回答は、ユーザーが1つの役割しか持つことができないことを前提としています。あなたのユーザーに複数の役割を担わせたい場合は、多対多の関係をデータベースにマッピングする方法を学ばなければなりません。