简体   繁体   English

PHP用户帐户激活检查不起作用

[英]PHP user account activation check not working

I'm using PHP to build a login form, and one part of the form validation is checking whether or not the user is "active," which is an integer in the mysql table users that will be equal to 0 or 1(1 being an activated). 我正在使用PHP构建登录表单,表单验证的一部分是检查用户是否“活动”,这是mysql表用户中的一个整数,等于0或1(1为已激活)。 In my current setup, the user can't login if they don't have an active account. 在我当前的设置中,如果用户没有有效帐户,则无法登录。 My first attempt to implement this was: 我实现此目标的第一个尝试是:

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

But that was not working, because the result is an object, not an int. 但这不起作用,因为结果是对象,而不是int。 So, I searched for how to solve this problem, and was given the following solution. 因此,我搜索了如何解决此问题,并获得了以下解决方案。

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

This code, however, only gives an answer of 1, even when I would expect it to give a 0. Where have I gone wrong? 但是,即使我希望它给出的值为0,此代码也只能给出1的答案。我哪里出错了? What other methods could I use to implement this feature? 我还可以使用哪些其他方法来实现此功能?

UPDATE: 更新:

I was indeed incorrectly using single quotes instead of backticks, so I tried implementing all of the following variations (I believe the first one to be correct, but tried all the others when it didn't work). 我确实不正确地使用了单引号而不是反引号,所以我尝试实现以下所有变体(我相信第一个变体是正确的,但是当所有其他变体都无效时,我尝试了所有其他变体)。 None of them have changed my results. 他们都没有改变我的结果。

"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'")

I tried these as well, to no avail: 我也尝试了这些,但无济于事:

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: 解:

The solution implemented into the code: 将解决方案实施到代码中:

$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'); }

Try this: 尝试这个:

$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);

Edit: Changed single quotes to back quotes. 编辑:将单引号更改为反引号。

You have single quotes around ID field - so it's a string. 您在ID字段周围使用单引号-因此它是一个字符串。 Try removing them or using ` marks around field identifier like this: 尝试删除它们或在字段标识符周围使用`标记,如下所示:

SELECT COUNT(`ID`) FROM users

You also have single quotes around the variable inserted into SQL so final fix would be: 您还可以在插入SQL的变量周围加上单引号,因此最终解决方法是:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM