2013-04-23 54 views
0

我有一個簡單的數據庫表「帳戶」,有3個條目:'user','pass'和'ID'。該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 [ '身份證']的。我試圖echo $ id ['ID']本身,它也不起作用。

在我的index1.php頁面上,我設法使用相同的代碼位來檢索信息,除了$ result不使用WHERE和AND子句作爲select語句。

+0

當你計算返回的行時,你會得到什麼? mysqli_num_rows($ result) – dgig 2013-04-23 20:30:38

+5

在你做任何事之前,請先閱讀[SQL注入漏洞](http://bobby-tables.com/)並使用'mysqli'的[SQL佔位符特性](http:/ /bobby-tables.com/php)。你在這裏做的事情表明了不良的習慣,並會讓你陷入嚴重的困境。你**不能**將'$ _POST'數據放入查詢中而不會轉義。 – tadman 2013-04-23 20:30:44

+0

我知道我的代碼可能存在空白,我會閱讀提供的鏈接,但是現在我試圖在深入探討保護問題之前先了解這個概念。 我很感激幫助。 – 2013-04-23 20:52:37

回答

1

你實際上取前兩行(每次調用mysqli_fetch_array()讓你的結果之一線),這可能不是你想。只是取一個時間和重用的結果:

// ... 

//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

非常感謝。我不知道你無法兩次獲取數據。這也回答了我在使用此代碼時遇到的其他問題。 – 2013-04-23 20:49:28

1

看起來您正在讀取兩次數據:一次在if語句中,一次在else中。考慮使用這樣的:

//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 
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']; 
    }