2016-05-04 11 views
1

マイページが正しくリダイレ​​クトされません。それだけですべてのレコードがデータベースがこのようなログインデータ保持1.PHP MySQLレコードに基づくログイン時にユーザをリダイレクト

であっても、「staffmenu.php」に私を取る:今すぐ

| staff_ID | username | Password | Page1 | Page2 | Page3 | 
---------------------------------------------------------- 
| 1  | admin | abc123 | 1 | 1 | 1 | 
| 2  | emp01 | pass45 | 0 | 0 | 1 | 
| 3  | emp02 | pword7 | 1 | 0 | 0 | 

、私が何をしたいだけのユーザーをリダイレクトされています持っている「1」(この場合はユーザー名での「管理者」)3つのすべてのページへのアクセスのために、残りは「staffmenu.php

と呼ばれる別のページに行くべき「adminmenu.php」へ

<?php 
 
include("includes/con_db.php"); 
 

 

 

 
// Define $username and $password 
 
$username=$_POST['username']; 
 
$password=$_POST['password']; 
 

 

 

 
$sql="SELECT username, password, page1, page2, page3 FROM users WHERE username='$username' and password='$password'"; 
 
$result=mysqli_query($conn, $sql); 
 
\t \t $row[3] = $f; 
 
\t \t $row[4] = $s; 
 
\t \t $row[5] = $r; 
 

 

 

 
// Mysql_num_row is counting table row 
 
$count = mysqli_num_rows($result); 
 

 
// If result no matched $username and $password, invalid log in 
 
if ($count=='0') 
 
    { 
 
    header("Location:index.php?status=login"); 
 
    } 
 
else 
 
    { 
 
    $_SESSION["username"] = $username; 
 
\t 
 
    if ($f =='1' && $s =='1' && $r =='1') 
 
    { 
 
    $_SESSION["AdminLoggedIn"] = true; 
 
    header("Location:adminmenu.php"); 
 
    } 
 
    else 
 
    { 
 
     $_SESSION["StaffLoggedIn"] = true; 
 
     header("location:staffmenu.php"); 
 
    } 
 
    } 
 

 
mysql_close($con); 
 
?>

+2

'$ F'、' $のS'と '$のr'は(私たちはあなたのコードの参照何のために)定義されており、$行は何ですされていませんか? – olibiaz

+0

ユーザ名 '''を入力するとどうなるのでしょうか?ユーザからの削除 ' – Mikey

+0

**警告**:mysqliを使用する場合は、パラメータ化されたクエリと[' bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php )を使用してユーザーデータをクエリに追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成したため、文字列の補間または連結を使用してこれを実行しないでください。 ** '$ _POST'や' $ _GET'データを直接クエリに入れないでください。誰かがあなたのミスを悪用しようとすると、非常に危険です。 – tadman

答えて

0

あなたのコードにはいくつか問題があるようです。

1 /あなたはクエリを実行しますが、結果は得られません。ですから、私たちはコードの見たものについて

$user = mysqli_fetch_assoc($result); 

2 /を持っている必要があり、この3行は役に立たない:$row以来

$row[3] = $f; 
$row[4] = $s; 
$row[5] = $r; 

使用されていない、と$f$s$rは存在しません。しかし、おそらくいくつかの隠しコードがある...

3 /あなたは、あなたが保存していない、また、その

$sql= "SELECT username, password, page1, page2, page3 FROM users WHERE username='$username' and password='$password'"; 

$result=mysqli_query($conn, $sql); 

// Mysql_num_row is counting table row 
$count = mysqli_num_rows($result); 

// If result no matched $username and $password, invalid log in 
if ($count=='0') 
{ 
    header("Location:index.php?status=login"); 
} 
else 
{ 
    $user = mysqli_fetch_assoc($result); 
    $f = $user['page1']; 
    $s = $user['page2']; 
    $r = $user['page3']; 

    $_SESSION["username"] = $username; 

    if ($f =='1' && $s =='1' && $r =='1') 
    { 
     $_SESSION["AdminLoggedIn"] = true; 
     header("Location:adminmenu.php"); 
    } 
    else 
    { 
     $_SESSION["StaffLoggedIn"] = true; 
     header("location:staffmenu.php"); 
    } 
} 

mysql_close($con); 

のようなものを持っている必要があり、あなたのチェックのための変数

$f = $user['page1']; 
$s = $user['page2']; 
$r = $user['page3']; 

を割り当てる必要がありますパスワードを暗号化せずにSQLインジェクションのクエリをチェックし、準備されたクエリを使用します。

いくつかのリソースがありますが、インターネット上でmysqlインジェクションについての多くのドキュメントと、それをどのように保護するかについての情報があります。

http://bobby-tables.com/php.html

http://php.net/manual/en/mysqli.prepare.php

+0

ドキュメントにリンクするのは常に良いことですが、フランスのリンクを間違って挿入すると思います。 – tadman

+0

ありがとうございました!私は自分の答えを更新しました。 – olibiaz

関連する問題