2012-10-30 3 views
1

에있는 MySQL 결과 인덱스 2의 행 0으로 이동할 수 없습니다. "staff_level"이있는 사용자에게 "staff panel"을 제한 할 수 있도록하려고합니다. "3"에서 다른 사람들이 account_page.php로 리다이렉트하게되지만, 현재 1 시간 전만 자른 오류가 발생하고 있습니다.경고 : mysql_result() [function.mysql-result] :

<?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; 

} 
?> 

답변

0

이 시도 :

직원 패널 코드입니다

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

그러나 당신이 당신의 쿼리가 적어도 1 행을 반환 확인해야 할 수있다.

0

우선 mysql_query를 피하십시오. 이것은 쓸모 없게되고 PDO를 사용하는 습관을 만듭니다.

검색어에서 tablename을 따옴표로 묶었습니다. 따옴표를 제거하고 시도하십시오.

코드를 변경하십시오. 그리고 아래의 코드로 대체하십시오.

<?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"); 

} 
?> 
+0

정답이지만 오류를 올바르게 처리하는 방법을 가르쳐주세요. 그가 당신이 설명하는 수정을한다면, 그는 여전히 부서진 프로그램을 가지고 있습니다. –

+0

동의. 나는 내 대답을 편집 할 것이다. –

+0

이 시도했지만 불행히도 차이가 없습니다. –

0

왜 당신은 다시 쿼리에서 오류를 확인하기 위해

$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());을 선택합니다 수 있습니다, 귀하의 요청에 table name 주위 ' 있습니다.

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를 사용하십시오. 수동에서

:

Use of the mysql extension is discouraged. Instead, the MySQLi or PDO_MySQL extension should be used.

재 포맷 당신의 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"); 
} 
+0

오류가 행을 제외하고 변경되지 않는다는 것을 모두 완료했습니다. var_dump ($ SQL); under $ MyQ = mysql_query ($ SQL); $ MyR = mysql_result ($ MyQ, 0, 'member_level') 또는 die (mysql_error()); 그게 효과가 있니? –

+0

글쎄, 그것은 당신에게 SQL 문을 보여줄 것입니다, 그렇다면 그것이 작동하는지 아닌지를 알 수 있습니다! – Bjoern

+0

위의 Abishkek에 말했듯이, 공정한 대답과 +1의 가치가 있습니다.하지만 대신 오류를 올바르게 처리하는 방법을 가르쳐주지 않으시겠습니까? 그가 당신이 설명하는 수정을한다면, 그는 여전히 부서진 프로그램을 가지고 있습니다. –

관련 문제