-1

SQL経由でPHPのDBに接続しました。

ページの特定の部分をロードするために、データベースに「betaaccount」のフィールドを追加しました。値が 1 の場合はページ オブジェクトをロードする必要があり、そうでない場合は、else ステートメントが通常のページ オブジェクトをロードします。

$result = mysqli_query($con,"SELECT * FROM tz_members WHERE alias = '$_SESSION[user]' &&     betaccount = '1'");

if ($_SESSION['user'] == $result)  {
    include 'support_beta_content.php';
    include 'footer.php';
} else {
    include 'support_content.php';
    include 'footer.php';
}

私はまだこれに慣れていません.PDOを使用していません.これはローカルで実験しているだけなので、これを機能させる方法を理解しようとしています. ありがとう。

4

4 に答える 4

0

エイリアスにデータベース内の一意の値が含まれている場合は、現在のユーザーのフィールド betaaccount のみを取得して、それが 1 つであるかどうかを確認できます。

$result = mysqli_query($con,"SELECT betaccount FROM tz_members WHERE alias = '{$_SESSION['user']}'");

$finfo = mysql_fetch_field($result)
 if($finfo->betacount == 1){
    include 'support_beta_content.php';
    include 'footer.php';
  }
else
  {
  include 'support_content.php';
  include 'footer.php';
  }

mysql_fetch_field については、こちらを参照してください

于 2013-07-04T14:28:03.917 に答える
0
$result = mysqli_query($con,"SELECT * FROM tz_members WHERE alias = '$_SESSION[user]' AND betaccount = '1'");

$user = mysqli_fetch_array($result,MYSQLI_ASSOC);
if ($_SESSION['user'] == $user['alias'])  {
    include 'support_beta_content.php';
    include 'footer.php';
} else {
    include 'support_content.php';
    include 'footer.php';
}

ただし、この場合は、結果に mysqli_num_rows の行があるかどうかを確認するだけでよい

于 2013-07-04T14:23:53.137 に答える
0

あなたのコードには、PHP/MySQL を学んでいることを示唆するものがたくさんあります。プロセスに役立ついくつかのチュートリアルを見つけて、それに従うことをお勧めします。

まず、@mishik が書いているように、SQL クエリはおそらく無効です。

次に、フィールド betaacount が数値データ型の場合は、引用符 ( AND betaccount = 1) を外す必要があります。

次に、@Kelu Thatsall が (コメントと同様に) 書いているように、$result 変数はクエリの出力を保持しません。これは結果へのハンドルです。論理的には、1 行返された場合、ユーザーはベータ ユーザーであり、それ以外の場合はベータ ユーザーではないと判断できます。この場合、コードは次のようになります。

$result = mysqli_query($con,"SELECT 1 FROM tz_members WHERE alias = '$_SESSION[user]' and     betaccount = '1'");

if (1 == $result->num_rows)  {
    include 'support_beta_content.php';
    include 'footer.php';
} else {
    include 'support_content.php';
    include 'footer.php';
}

これにより、データベースと PHP スクリプトの間でわずかに異なるデータが転送され、わずかに効率が向上します。

最後に、SQL インジェクションについて知っていることを教えてください -$_SESSION['user']適切にエスケープされていますね。

于 2013-07-04T14:31:22.067 に答える
0

このような SQL クエリの正しい構文は次のとおりです。

SELECT *
FROM   tz_members
WHERE  alias = '$_SESSION[user]' 
       AND betaccount = '1'

||andの代わりに、それに応じてand&&を使用する必要があります。ORAND

于 2013-07-04T14:18:54.010 に答える