1

「スタッフパネル」を「member_level」が「3」のユーザーに制限して、他の人がaccount_page.phpにリダイレクトされるようにしようとしていますが、現在、1時間前に発生したエラーが発生しています。どこからともなく出てきて、何も変えていません。

これは、スタッフ パネルのコードです。

<?php
    ob_start();
mysql_connect('localhost', 'u1908470_cms', 'BeingX1309X')or die("Error: ".mysqlerror());
mysql_select_db('u1908470_cms'); 

$query1 = mysql_query("SELECT 'member_level' FROM `users` WHERE `username` = '" . mysql_real_escape_string ($_SESSION['user']['username'])."'");
$query2 = mysql_result($query1,0,'member_level') or die(mysql_error());

switch ($query2)
{
case 3: 
  {
  echo "<p>Now Logged into Staff Panel!</p>";

  }
  break;

case 2:
  {
  header("location: http://www.cookiedenied.com/account_page.php"); 
  }
  break;

case 1:
  {
  header("location: http://www.cookiedenied.com/account_page.php"); 
  }
  break;

}
?>
4

4 に答える 4

1

フィールド名とテーブル名を適切にエスケープする

それ以外の

    SELECT 'member_level', ....

...使ってください...

    SELECT `member_level`, ....

クエリを検証します。

コードを次のように書き換えます。

$SQL = "SELECT `member_level`
    FROM `users` 
    WHERE `username` = '" 
    . mysql_real_escape_string($_SESSION['user']['username'])
    . "'";

$MyQ = mysql_query($SQL);
$MyR = mysql_result($MyQ,0,'member_level') or die(mysql_error());

...そしてvar_dump($SQL);、あなたの声明が有効かどうかを確認します。別の MySQL ツール (Workbench、phpMyAdmin、SQLyog など) で実行しながら、結果が生成されるかどうかを確認します。変数$_SESSIONが適切に設定されていないか、同様のものである可能性があります。この方法で見つけることができます。

代わりに MySQLi または PDO を使用してください。

マニュアルから:

mysql 拡張機能の使用はお勧めできません。代わりに、MySQLi または PDO_MySQL 拡張機能を使用する必要があります。

-Block を再フォーマットしますswitch

あなたの質問とは関係ありませんが、あなたのswitch-Block は非常に複雑に見え、何かを簡単にアーカイブすることができません。これを試して:

switch ($query2) {
    case 3: 
        echo "<p>Now Logged into Staff Panel!</p>";
        break;
    default:
        header("location: http://www.cookiedenied.com/account_page.php"); 
}
于 2012-10-30T08:40:22.287 に答える
0

これを試して :

$R = mysql_fetch_assoc($query1);
$query2 = $R["member_level"]

ただし、クエリが少なくとも 1 行を返すことを確認する必要があるかもしれません。

于 2012-10-30T08:30:40.953 に答える
0

まず第一に、mysql_query を避けるようにしてください。これは時代遅れになりつつあり、PDO を使用する習慣ができています。

クエリでは、テーブル名を引用符で囲みました。引用符を削除して試してください。

コードを変更します。そして、以下のコードに置き換えます。

<?php
ob_start();
try {

      $pdo = new PDO('mysql:host=localhost;dbname=u1908470_cms', 'u1908470_cms','BeingX1309X');

} catch (PDOException $e) {

      print "Error!: " . $e->getMessage() . "<br/>";
      die();

}

$username = $_SESSION['user']['username'];
$statement = $pdo->prepare("select `member_level` from `users` where username = :username");
$statement->execute(array(':username' => $username));
$row = $statement->fetch();

$member_level = $row['member_level'];
switch ($member_level)
{
    case 3: {
        echo "<p>Now Logged into Staff Panel!</p>";
        break;
    }
    default:{

        header("location: http://www.cookiedenied.com/account_page.php"); 
        break;
    }
}

実際に switch ステートメントを削除して、if-else 条件を配置するだけです。

if($member_level == 3) {

  echo "<p>Now Logged into Staff Panel!</p>";

}else{

  header("location: http://www.cookiedenied.com/account_page.php"); 

}
?>
于 2012-10-30T08:30:50.467 に答える
0

'クエリに含まれている理由はtable name、バックティックである可能性があります

$query1 = mysql_query("SELECT `member_level` FROM `users` WHERE `username` = '" . mysql_real_escape_string ($_SESSION['user']['username'])."'") or die(mysql_error());

or die(mysql_error());クエリのエラーをチェックするために使用します。

于 2012-10-30T08:30:55.443 に答える