2013-08-04 68 views
0

我使用PHP構建登錄表單,表單驗證的一部分檢查用戶是否是「活動的」,這是mysql表中用戶的整數將等於0或1(1是激活的)。在我目前的設置中,如果用戶沒有活動帳戶,則無法登錄。我第一次嘗試實現這個是:PHP用戶帳戶激活檢查不起作用

//This code won't work because the query is an object, not an integer. 
elseif(mysqli_query($connection, "SELECT COUNT('ID') FROM users WHERE username='$usernamelogin' AND 'active'='1'") < 1) { 
    echo('Account not activated. '); 
} 

但是,這是行不通的,因爲結果是一個對象,而不是一個int。所以,我搜索瞭如何解決這個問題,並給出了以下解決方案。

//if 1, account is active, if 0, account is inactive 
$result = mysqli_query($connection, "SELECT COUNT('ID') FROM users WHERE username='$usernamelogin' AND 'active'='1'"); 
$row = mysqli_fetch_assoc($result); 
$booly = ($row != 1) ? 1 : 0; 
echo $booly; 

然而,這段代碼只給出了1的答案,即使當我期望它給出0時。我哪裏出錯了?我可以使用其他什麼方法來實現此功能?

UPDATE:

我確實是不正確的使用單引號,而不是反引號,所以我想實現下面所有的變的(我認爲第一個是正確的,但嘗試了所有的人,當它沒沒有工作)。他們都沒有改變我的結果。

"SELECT COUNT(`ID`) AS count FROM users WHERE username='$usernamelogin' AND 'active'='1'" 
"SELECT COUNT(`ID`) FROM users WHERE username='$usernamelogin' AND active='1'") 

"SELECT COUNT(`ID`) AS count FROM users WHERE 'username'='$usernamelogin' AND 'active'='1'" 
"SELECT COUNT(`ID`) FROM users WHERE 'username'='$usernamelogin' AND 'active'='1'") 

"SELECT COUNT(`ID`) AS `count` FROM `users` WHERE `username`='$usernamelogin' AND `active`='1'" 
"SELECT COUNT(`ID`) FROM `users` WHERE `username`='$usernamelogin' AND `active`='1'") 

我嘗試了這些以及,沒有效果:

mysqli_query($connection, "SELECT COUNT(`ID`) FROM users WHERE username=$usernamelogin AND `active`='1'"); 

mysqli_query($connection, "SELECT COUNT(`ID`) FROM users WHERE username=$usernamelogin AND active='1'"); 

SOLUTION:

實現成代碼的溶液:

$result = mysqli_query($connection, "SELECT COUNT(`ID`) AS count FROM users WHERE username='$usernamelogin' AND `active`='1'"); 
$row = mysqli_fetch_assoc($result); 
if($row['count'] == true) { 
    echo('account not active'); } 

回答

0

試試這個:

$result = mysqli_query($connection, "SELECT COUNT(`ID`) AS count FROM users WHERE username='$usernamelogin' AND `active`='1'"); 
$row = mysqli_fetch_assoc($result); 
var_dump($row['count'] < 1); 

編輯: 改爲單引號反引號。

+0

回答那布爾(真)無論條件是真還是假。 @亨利克 – EveyPortman

+0

這沒有任何意義。什麼'var_dump($ row ['count']);'做什麼? –

+0

哦,現在我看到了問題,您使用單引號來轉義活動字段,您應該使用反引號''''或者根本不引用引號。 –

0

你在ID字段周圍有單引號 - 所以它是一個字符串。 嘗試刪除它們,或使用`周圍場的識別標記是這樣的:

SELECT COUNT(`ID`) FROM users 

您還可以圍繞插入SQL變量單引號所以最終的解決將是:

"SELECT COUNT(`ID`) FROM users WHERE username=$usernamelogin AND `active`='1'" 
+0

我相信你是正確的,需要修復。然而,它並沒有解決我的問題,我仍然只得到1和布爾(真)。 @nikica – EveyPortman

+0

結合我收到的兩個答案已經返回bool(false)! – EveyPortman