2016-11-29 15 views
1

私は管理ページを作って、何らかの理由で役割2のユーザーのみが私に期待した情報を与えないようにしています。期待されるユーザー情報が得られません

<?php 
    session_start(); 
    require_once('includes/mysql_config.php'); 

    $id = isset($_SESSION['id']) ? $_SESSION['id'] : header('location: login.php'); 
    $user = mysqli_query($con, "SELECT * FROM users WHERE id =".$_SESSION['id']) || false; 

    if($user['role'] == '2'){ 
     echo "Hello $user['name']"; 
    } 
    else { 
     header('location: index.php'); 
    } 
?> 

私はvardump($user)が私に私はそれが私の右のIDを与えている$_SESSION['id']をエコー出力1.

を与える(セッションIDは、ユーザーIDと同じである)その行うと。

+0

現在のコードでは、 'var_dump($ user)'は 'mysqli_result'オブジェクトのダンプ、' false'を返しますが '1'は返しません。 –

+0

結果を取得していない –

答えて

5

これまで行ってきたことは、クエリを実行して結果セットを$userに保存したことです。 結果セットから結果をフェッチする必要があります。

$user = mysqli_fetch_array($user); 

これで、期待どおりに動作するはずです。


更新:あなたはまた、次のように処理する必要があります

  • のサニタイズを:あなたは、列名の値と`ため'を使用していることを確認してください。また、明らかなものをエスケープするためにmysqli_real_escape_string()を使用してください。
  • 検証:これは次に重要なことです。結果セットに返される行があるかどうかを確認してください。 mysqli_num_rows($user) > 0を使用するか、場合によってはmysqli_num_rows($user) == 1を使用してください。
  • 変数:この例では、結果セットと行に同じ$userを使用しています。 $userRes(結果セットの場合)と$userData(フェッチされたデータの場合)の2つの別々の変数を持つ方が常に良いです。

ご希望の質問にお答えください。

+0

ありがとうございました。 – marijn

+1

期限が過ぎたときには致します。 – marijn

0

選択クエリが成功すると、mysqli_query()はmysqli_resultオブジェクトを返します。あなたは結果を得るためにそれを繰り返す必要があります。たとえば:

$user = mysqli_query($con, "SELECT * FROM users WHERE id =".$_SESSION['id']) || false; 
if(user){ 
    // Cycle through results 
    while ($row = user ->fetch_object()){ 
     $users[] = $row; 
    } 
    $user->close(); 

} 
0

あなたはマニュアルをチェックし、mysqli_query()の戻り値を見ると、あなたが見つける...結果を取得していない:失敗した場合にFALSE

戻り値。成功したSELECT、SHOW、DESCRIBEまたは EXPLAINクエリmysqli_query()はmysqli_resultオブジェクトを返します。

//$user = mysqli_query($con, "SELECT * FROM users WHERE id =".$_SESSION['id']) || false; // I'm unfamiliar with this || false stuff. 
$result = mysqli_query($con, "SELECT * FROM users WHERE id =".$_SESSION['id']); 
$user = mysqli_fetch_array($result); 

それは(SQLインジェクションを防ぐために)あなたの入力をサニタイズするのも良いアイデアだと: 他の成功したクエリの場合mysqli_query()だから先に行くと、それをフェッチ

TRUEを返します mysqli_num_rows()で結果があるかどうかを確認します。

関連する問題