0

3 つの異なるレベルのアクセスがある Web サイトを作成しています

  • 0 = 通常
  • 1 = スタッフ
  • 2 = 管理者

ログインフォームで、パスワード (SHA1) がデータベース (暗号化されている) のものと一致するかどうかを確認できましたが、ユーザー ID は確認しませんでした。

ユーザーまたはスタッフ/管理者が登録されると、それらの詳細は、詳細 (名前、生年月日など) を持つ別のテーブルに保存されます。

質問

  1. これをコードにどのように実装しますか?

    $result = mysql_query( $qs ) or die( mysql_error() );
    while( $row = mysql_fetch_array( $result ) ){
        $stored_password = $row['Password'];
        if( $stored_password == sha1( $pw ) ){
            $_SESSION['Status'] = $row['Status'];
        if( $_SESSION['Status'] == 0 ){
            echo "<h1>User Menu Loading...</h1>";
            echo"<META HTTP-EQUIV='Refresh' Content='1;URL=http://***/'>";
        }else{
            echo "<h1>Incorrect Password.</h1>";
            echo"<META HTTP-EQUIV='Refresh' Content='1;URL=http://**/login.php'>";
        }
    }
    
  2. これら 3 種類のユーザーすべてがログイン ページからログインし、2 つの異なるテーブルからデータを取得できる方法はありますか?

私は多くの方法を試しましたが、空白の画面が表示され続けるか、それが表示されます

間違ったパスワード

パスワードが正しいにもかかわらず。

変数

$un = $_POST['User_ID'];
$sf = $_POST['Staff_ID'];
$pw = $_POST['Password'];
$st = $_POST['Status'];

そうでない場合は、別のログイン領域を作成する必要があると思います。

ありがとうございます (私は現在 mysql を mysqli に変更しています)

編集

$qsの最新の試行を追加

$qs="SELECT Cadets.Cadet_ID, Cadets.Password, Cadets.Status, 
        Staff.Staff_ID, Staff.Password, Staff.Status, 
 FROM   Cadets, Staff
 WHERE  Cadets.Cadet_ID ='$un' AND Staff.Staff_ID = '$sf'";
4

2 に答える 2

2

Q.1)ユーザー ID を確認するには: まずデータベースでユーザー ID を確認し、次にパスワードを確認します。

$db=new mysqli("host", "sqlusername","sqlpassword","database");
$stmt = $db->prepare("select * from your_table_name where user_ID = ?");
$stmt->bind_param("s",$un);
$stmt->execute();
$result=$stmt->get_result();

Q.2)はい。そうする方法があります。しかし、質問は少し不完全で、いくつかのコードを追加してください。

于 2016-02-07T14:26:59.953 に答える
0

質問を編集して詳細情報を含めると、回答が更新されます。

A) mysql ライブラリは安全ではなく非推奨であるため、使用しないでください (まもなく削除されます): PHP で mysql_* 関数を使用しないのはなぜですか? mysqli または PDO ライブラリを使用する必要があります。

B) sha1 は安全ではありません。password_hash ()crypt( ) などを使用する必要がありますが、教育目的には sha1 が適していると思います。

C) 質問 1: ID を確認する必要はありません。
を使用while ($row = mysql_fetch_array($result)) {しますが、一意のユーザー名/組み合わせを探しているため、結果は 1 つしかないか、まったくないはずです。

if ($record = mysql_fetch_array($result)) {

パスワードが正しいかどうかのみを確認しているように見えますが、実際にはユーザー名とパスワードの一意の組み合わせを確認する必要があります (2 人のユーザーが同じパスワードを持っている場合はどうなりますか?sha1()は役に立ちません。

したがって、次のようなものが必要です。

$qs = "SELECT * FROM users WHERE username = '$username' AND password = '" . sha1($pw) ."'"

または、実際のスタッフ ID をユーザー名として使用する場合:

$qs = "SELECT * FROM users WHERE username = '$id' AND password = '" . sha1($pw) ."'"

echo "<h1>User Menu Loading...</h1>";D)直後にリダイレクトがあるため、このメッセージは表示されません

E) 質問 2: もう少し明確にする必要があります。2 つまたは 3 つのテーブルがありますか (ユーザーには 3 つのタイプがあると述べているため)。

于 2016-02-08T17:43:34.023 に答える