0
if(isset($_SESSION['admin'])) {
echo "<li><b>Admin</b></li>";
}

<?php
session_name('MYSESSION');
session_set_cookie_params(0, '/~cgreenheld/');
session_start();

$conn = blah blah
$query2 = 'Select Type from User WHERE Username = "'.$_SESSION['user'].'" AND Type =\'Admin\'';
$result2 = $conn->query($query2);
if($result2->num_rows==1) {
$_SESSION['admin'] = $result2;
}
?>

こんにちは、私はこのセッション変数を設定しようとしていますが、設定されていないようです。誰かが助けてくれるかどうか疑問に思っています。session ['admin']が設定されている場合は、管理ボタンをエコーする必要があります。しかし、なぜかよくわかりませんか?(私はセッションを開始し、すべてのページにすべてがあります。それまたは「phpタグがありません」のいずれにも問題はありません。mysqlクエリをチェックしましたが、テーブルから何かが返されます。何かアイデアはありますか?

4

2 に答える 2

4

セッションsession_start();変数に関係する前に、ページの上部にいる必要があります。

ドキュメントから:

session_start()が呼び出されたとき、またはセッションが自動開始されたとき、PHPはopenおよびreadセッション保存ハンドラーを呼び出します。

コメントから編集:

<?php
    session_name('MYSESSION');
    session_set_cookie_params(0, '/~cgreenheld/');
    session_start();
    // Moved to start after answer was accepted for better readability
    // You had the <?php after this if statement? Was that by mistake?
    if(isset($_SESSION['admin'])) 
    {
        echo "<li><b>Admin</b></li>";
    }

    // If you have already started the session in a file above, why do it again here?

    $conn = blah blah;
    $query2 = 'Select Type from User WHERE Username = "'.$_SESSION['user'].'" AND Type =\'Admin\'';
    // Could you echo out the above statement for me, just to 
    // make sure there aren't any problems with your sessions at this point?
    $result2 = $conn->query($query2);
    if($result2->num_rows==1) 
    {
        $_SESSION['admin'] = $result2;
        // It seems you are trying to assign the database connection object to it here.
        // perhaps try simply doing this:
        $_SESSION['admin'] = true;
    }
?>

さらなるコメントから2を編集します:

あなたは実際にこのようにデータをフェッチする必要があります-このチュートリアルから抜粋すると、さらに役立つかもしれません:

$query  = "SELECT name, subject, message FROM contact";
$result = mysql_query($query);

while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
    echo "Name :{$row['name']} <br>" .
     "Subject : {$row['subject']} <br>" .
     "Message : {$row['message']} <br><br>";
} 

mysql_*しかし、そうは言っても、それについて話している間は、古い関数から離れて、はるかに優れたPDOに移行したほうがよいでしょう。

于 2012-08-23T08:32:43.730 に答える
1

session_start();ページの上部に移動します。ロードされていないセッションを取得しようとしています。

編集:$_SESSION['admin']何かが含まれている場合は、エコーしてみてください。また、if($result2->num_rows==1)コードを追加echo('its working');またはdie('its working');内部でデバッグして、$ result2に正確に1行が含まれているかどうかを確認してください。現在、$ result2には複数の行が含まれているか、行がまったく含まれていないようです。

于 2012-08-23T08:32:55.083 に答える