0

私は今、数時間以下のコードを動作させようとしています。これは、データベース(b00543346)とテーブル "members"をチェックして、ユーザーが存在するかどうか(つまり、メンバーIDが存在するかどうか)を確認します。次に、ユーザーがアクティブに設定されているかどうかを確認します。

現在、入力してログインを押すユーザー名/パスワードに関係なく、「アレイ([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 に答える