0

我一直试图让下面的代码工作几个小时。这个想法是它检查我的数据库(b00543346)和表“成员”以查看用户是否存在(因此他们的 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);
}
?>
4

2 回答 2

3

编辑: PHP 中的 mysql 函数不喜欢函数名和第一个左括号之间的空格。所以count( membersID)会起作用,而count( 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;

}

于 2013-03-27T13:36:36.933 回答
0

我不太喜欢 PHP 的标准 SQL 函数,所以我无法判断。但是你试过了吗

SELECT COUNT (*) FROM `members` WHERE `username` = '$username'
于 2013-03-27T13:19:56.750 回答