我一直试图让以下代码工作几个小时。我的想法是它检查我的数据库(b00543346)和表“members”以查看用户是否存在(因此,如果他们的memberID在那里。然后检查用户是否设置为活动。
目前无论我输入什么用户名/密码并按登录,都显示“数组([0] =>未找到用户名。你注册了吗?)”
<?php
function user_exists($username) {
$username = sanitize($username);
return (mysql_result(mysql_query ("SELECT COUNT (`membersID`) FROM `members` WHERE `username` = '$username'"), 0) == 1) ? true : false; //check if user id exists
}
function user_active($username) {
$username = sanitize($username);
return (mysql_result(mysql_query ("SELECT COUNT (`membersID`) FROM `members` WHERE `username` = '$username' AND `active` = 1"), 0) == 1) ? true : false; //check if user has activated account
}
?>
<?php
include 'core/init.php';
if (empty($_POST) === false) {
$username = $_POST['username'];
$password = $_POST['password'];
if (empty($username) === true || empty($password) === true) {
$errors[] = 'You Must Enter a Username AND Password';
} else if (user_exists($username) === false) {
$errors[] = 'Username Not Found. Have You Registered?';
} else if (user_active($username) === false) {
$errors[] = 'You Haven\'t Activated Your Account, Please Do So!';
}
print_r($errors);
}
?>
答案 0 :(得分:3)
编辑: PHP中的mysql函数不喜欢函数名和第一个左括号之间的空格。因此 计数(membersID
) 将有效,而 计数(membersID
) 将给你一个错误!
我很好奇你的sanitize()函数在做什么。如果它完全修改了用户名,那么你的初始测试数据似乎可能是手动输入到表中而不是通过sanitize()函数运行,然后当代码清理并可能修改数据时,它在SQL中不匹配。
您也可以为您的函数添加一些调试,以便更好地了解正在发生的事情。当前的功能正在模糊正在发生的一些事情。尝试:
function user_exists($username) {
print "DEBUG: username=[$username]\n";
$query = "SELECT COUNT (`membersID`) FROM `members` WHERE `username` = '$username'";
print "DEBUG: query=$query\n";
$result = mysql_query($query);
if (!$result) {
die('Could not execute query:' . mysql_error());
}
print "DEBUG Result Set Array\n";
print_r(mysql_fetch_assoc($result));
print "DEBUG just the result now\n";
print mysql_result($result, 0);
return mysql_result($result, 0) == 1;
}
答案 1 :(得分:0)
我不再喜欢PHP的标准SQL函数了,所以我无法判断。但你试过吗
SELECT COUNT (*) FROM `members` WHERE `username` = '$username'