登录检查用户存在并设置为活动

时间:2013-03-27 13:08:34

标签: php login

我一直试图让以下代码工作几个小时。我的想法是它检查我的数据库(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);
}
?>

2 个答案:

答案 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'