嗯,这里出了点问题。我输入我的数据库中存在的用户名和密码。在这种情况下它应该echo
这个字符串
需要激活
但它回应了这个
你需要注册
的init.php
<?php
//error_reporting(0);
session_start();
require 'dbconnect.php';//this works okay so i wouldn't post this file code
require 'users.php';
$errors = array();
?>
users.php
<?php
function user_exists($username){
$username = mysql_real_escape_string($username);
$query = mysql_query("SELECT COUNT('user_id') FROM `users` WHERE 'username' = '$username'");
if (!$query) {
die('Could not query:' . mysql_error());
}
return (mysql_result($query, 0) == 1) ? true : false;
}
function user_active($username){
$username = mysql_real_escape_string($username);
$querytoo = mysql_query("SELECT COUNT('user_id') FROM `users` WHERE 'username' = '$username' AND 'active' = 1");
if (!$querytoo) {
die('Could not query:' . mysql_error());
}
return (mysql_result($querytoo , 0) == 1) ? true : false;
}
?>
的login.php
<?php
include 'init.php';
if(empty($_POST) === false){
$username = $_POST['username'];
$password = $_POST['password'];
if(empty($username) === true || empty($password) === true){
$errors[]='You need to enter a username and password';
}
elseif(user_exists($username) === false){
$errors[]='You need to reg';
}
elseif(user_active($username) === false){
$errors[]='need to activate';
}
else {
//
}
print_r($errors);
}
?>
html的一部分
<form action="login.php" method = "post">
<ul id="login">
<li>
username:<br>
<input type="text" name="username" size="30" value=""/></li>
<li>password:<br>
<input type="password" name="password" size="30" value=""/></li>
<li><input type = "submit" value ="Log in"></li>
<li>
<a href="register.php"> Register</a>
</li>
</ul>
P.S。 查询文本工作正常,我在mysql中检查它。我在PHP代码中输入``而不是''这里
SELECT COUNT('user_id')FROM
users
WHERE'username'='$ username' AND'active'= 1
出现
'无法查询:'
事
我尝试了elseif
和else if
件事情,所以我认为不存在问题
答案 0 :(得分:6)
你的SQL错了。您正在将静态字符串与值进行比较,而不是列名称:
SELECT COUNT('user_id') FROM users WHERE 'username' = '$username' AND 'active' = 1
应该是
SELECT COUNT(user_id) FROM users WHERE username = '$username' AND active = 1
请注意,我从列名中删除了'。使用反引号也是有效的:
SELECT COUNT(`user_id`) FROM users WHERE `username` = '$username' AND `active` = 1
答案 1 :(得分:1)
在查询中的表/字段名称周围使用'
将它们转换为字符串,并且它们将不再被视为字段/表名称。这就是为什么会出现反引号,以逃避恰好是关键字的字段/表名称。你必须逃离字段/表名的唯一时间是它们是保留字。
这意味着......
SELECT COUNT('user_id')
^- ^-
FROM `users`
WHERE 'username' = '$username' AND 'active' = 1");
^-- ^-- ^- ^-
完全错了。您正在计算固定字符串,您将提供的用户名与值为username
的字符串进行比较,并将active
同上。
答案 2 :(得分:1)
您检查用户是否存在的查询可能是您的问题之一:
$query = mysql_query("SELECT COUNT('user_id') FROM `users` WHERE 'username' = '$username'");
在该查询中,您在列名上使用单引号。这导致比较两个字符串,除非您有一个名为username
的用户名,否则它将始终返回0
。使用`char。
$query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'");
或不要使用任何东西
$query = mysql_query("SELECT COUNT(user_id) FROM `users` WHERE username = '$username'");
答案 3 :(得分:1)
您是否记得在会话中注册用户名,以及之后获取用户名?
$username = $_SESSION['username'];