2013-04-23 2 views
0

나는 'user', 'pass', 'ID'의 3 개의 엔트리를 가지는 간단한 데이터베이스 테이블 "accounts"를 가지고있다. ID는 정수입니다.mysqli_fetch_array()는 아무것도 가져 오지 않는다

테이블에서 ID를 검색하여 $ _SESSION [ 'id']에 저장하려고하는데 행운이 없습니다.

여기에 코드입니다 :

session_start(); 

// Checks to see if the input account is valid 
$result = mysqli_query($con,"SELECT * FROM accounts 
WHERE user='$_POST[user]' 
AND pass='$_POST[pass]'"); 

//Check to see if account exists 
if(!mysqli_fetch_array($result)) 
    { 
    $_SESSION['loggedin'] = false; 
    } 
else 
    { 
    $_SESSION['loggedin'] = true; 
    $_SESSION['user'] = $_POST['user']; 
    $id = mysqli_fetch_array($result); 
    $_SESSION['id'] = $id['ID']; 
    echo $_SESSION['id']; 
    } 

//header('Location: index1.php/'); 

?> 

아무것도 에코 $ _SESSION [ 'ID']에서 나오는되지 않습니다. 나는 $ id [ 'ID'] 자체를 반향 시키려고 시도했지만 어느 것도 작동하지 않습니다.

내 index1.php 페이지에서 $ 결과가 WHERE 절과 SELECT 절에 대한 AND 절을 사용하지 않는다는 점을 제외하고는 동일한 코드 비트로 정보를 검색 할 수 있습니다.

+0

반환되는 행을 계산할 때 어떤 결과가 발생합니까? mysqli_num_rows ($ result) – dgig

+5

다른 작업을하기 전에 [SQL injection bugs] (http://bobby-tables.com/)에서 mysqli의 [SQL 자리 표시 자 기능] (http : /bobby-tables.com/php). 여기서하고있는 일은 무모한 나쁜 습관을 보여 주며 심각한 문제를 일으킬 수 있습니다. $ _POST 데이터를 이스케이프하지 않고 쿼리에 넣을 수는 없습니다 **. – tadman

+0

코딩에있어 가능한 차이가 있음을 알고 있으며 제공된 링크를 읽 겠지만 지금 당장은 보호 문제에 너무 깊이 들어가기 전에 개념을 보완하려고합니다. 도움을 주셔서 감사합니다. –

답변

1

(mysqli_fetch_array()를 호출 할 때마다 당신에게 결과의 한 줄을 얻는다) :

//Check to see if account exists 
if($id!=mysqli_fetch_array($result)) 
    { 
    $_SESSION['loggedin'] = false; 
    } 
else 
    { 
    $_SESSION['loggedin'] = true; 
    $_SESSION['user'] = $_POST['user']; 
    $_SESSION['id'] = $id['ID']; 
    echo $_SESSION['id']; 
    } 

또는이 필요. 그냥 한 번 가져오고 그 결과를 다시 : 코멘트에서 언급 한 바와 같이

// ... 

//Check to see if account exists 
$row = mysqli_fetch_array($result); 
if(!$row) 
    { 
    $_SESSION['loggedin'] = false; 
    } 
else 
    { 
    $_SESSION['loggedin'] = true; 
    $_SESSION['user'] = $_POST['user']; 
    $_SESSION['id'] = $row['ID']; 
    echo $_SESSION['id']; 
    } 
// ... 

은, 코드를 SQL 주입에 활짝 열려 있습니다. 준비되지 않은 문구를 읽거나 수동으로 변수를 삭제하십시오 (권장하지 않음).

+0

매우 감사드립니다. 나는 당신이 데이터를 두 번 가져올 수 없다는 것을 몰랐다. 이것은 내가이 코드로 가지고있는 다른 질문들에 대한 해답이다. –

1

if 문에 한 번, else에 한 번 데이터를 두 번 가져 오는 것 같습니다. 이 사용을 고려 : 당신이 무슨 일이 아닐 것입니다

당신은 실제로 처음 두 행을 가져 오는 것
//Check to see if account exists 
if(!$result) 
    { 
    $_SESSION['loggedin'] = false; 
    } 
else 
    { 
    $_SESSION['loggedin'] = true; 
    $_SESSION['user'] = $_POST['user']; 
    $id = mysqli_fetch_array($result); 
    $_SESSION['id'] = $id['ID']; 
    echo $_SESSION['id']; 
    } 
관련 문제