2

ユーザーがログインしている場合、ユーザーの氏名を表示したい。そうでない場合は、「ログイン」というテキストを表示する必要があります。

これは私がこれまでに持っているものです:

session_start();

$session = $_SESSION['username'];

include "config.php";

$sql = mysql_query("SELECT * from user");    
while($d=mysql_fetch_array($sql))
{
    if($d['status']=='online' and $_SESSION['username'] == $d['username'])
    {
        $full_names = $d['full_name'];

        echo $full_names;
    }
    else
    {
        echo "Login";
    }
}

何か案は?

4

3 に答える 3

1

(@ThiefMaster が述べたように) SQL を使用する必要がありますWHEREが、質問に答えるだけです:

$full_names = false;
while($d=mysql_fetch_array($sql)) {
    if($d['status']=='online' and $_SESSION['username'] == $d['username']) {
        $full_names = $d['full_name'];

        echo $full_names;
    }
}

if(!$full_names) {
  echo "Login";
}
于 2012-09-06T02:20:35.630 に答える
1

ユーザーをセッションに保存する代わりに、ID を保存したい場合があります。WHEREこれは、クエリでステートメントを使用して結果を 1 行 (問題のユーザー) に制限することほど重要ではありません。ユーザー データベースのサイズが大きくなるにつれて、このクエリはますます非効率になるため、これは重要です。少し単純なロジックで、将来の問題を防ぎ、バランスのとれたより堅牢なアーキテクチャを持つことができます。

もう 1 つの重要な注意事項として、mysql_* 関数は廃止されているため、使用しないでください。PDO の使用を開始する必要があることはいくら強調してもしすぎることはありません。理解するのはそれほど難しいことではありません (mysql_*機能についてはそれほど難しくありません) mysql_*。コードが機能しなくなるか、既知のセキュリティ ホールでいっぱいの古い PHP バージョンで立ち往生することになります。

でキーを参照する前に、そのキーが$_SESSION存在することを確認する必要があります。

session_start();
$session_identifier = isset($_SESSION['username']) ? $_SESSION['username'] : false;
$user_name = false;
if ($session_identifier) {
    $pdo = new PDO("mysql:host=localhost;dbname=database", '-username-', '-password-');
    $sql = '
        SELECT 
            full_name 
        FROM 
            users 
        WHERE 
            username = ":username"
    ';
    $statement = $pdo->prepare($sql);
    if($statement->execute(array(':username'=>$session_identifier)))
        $user_name = $statement->fetchColumn();
}

...そして、これを行うことができます:

if ($user_name)
    print 'Welcome, '.$user_name;
else
    print '<a href="login.php">Login</a>';

ドキュメンテーション

于 2012-09-06T02:46:02.980 に答える
-1

クエリを次のように変更する必要があります。

"SELECT * from user WHERE status = 'online' AND username = '" . mysql_real_escape_string($_SESSION['username']) . "'"

その後、 where ループは必要ありません。

また、mysql ではなく mysqli を使用する必要があります。

于 2012-09-06T02:36:23.397 に答える