0

ユーザー登録とログインに MySQL データベースを使用する Android プロジェクトがあります。登録部分は期待どおりに機能します。ログイン部分はそうではありません。どちらも同じ EXACT クエリを使用して、電子メール アドレスが既に存在するかどうかを確認します。登録では、ユーザーを保存する前に、ユーザーがその電子メール アドレスをまだ使用していないことを確認します。ログインは同じクエリを使用して、暗号化されたパスワード + ソルトのハッシュを取得し、POSTED パスワード ハッシュのハッシュと比較します。ログイン部分がクエリを作成すると、少なくとも 1 つの行が返されますが、すべての値が null のように見えます。クエリがある場所のコードは次のとおりです。

// Check if user already exists.
$sql = sprintf("SELECT * FROM users WHERE email = '%s'", mysql_real_escape_string($email));
$result = mysql_query($sql) or die(mysql_error());
$no_of_rows = mysql_num_rows($result);
if ($no_of_rows > 0) {
    // User exists.
    $stored_salt = $result["salt"];
    $stored_password = $result["encrypted_password"];
    $hash = crypt($password_hash, '$2a$10$'.$stored_salt);
    // Check for password equality.
    if ($stored_password == $hash) {
        // User authentication details are correct.
        $response["success"] = 1;
        $response["uid"] = $result["unique_id"];
        $response["user"]["name"] = $result["name"];
        $response["user"]["email"] = $result["email"];
        $response["user"]["created_at"] = $result["created_at"];
        $response["user"]["updated_at"] = $result["updated_at"];
        echo json_encode($response);
    } else {
        // User authentication failed.
        // echo JSON with error = 1.
        $response["error"]     = 2;
        $response["error_msg"] = "Incorrect password!";
        echo json_encode($response);
    }
} else {
    // User does not exist.
    $response["error"] = 1;
    $response["error_msg"] = "Email address not found.";
}

返された JSON オブジェクトには「パスワードが正しくありません!」と表示されているため、JSON オブジェクトにチェック対象のパスワードを含めるようにしましたが、そのパスワードは null です。私の仮定では、クエリは結果を返していませんが、no_of_rows > 0 テストに合格しているため、何かを返しています。そのため、返された JSON オブジェクトに結果の他の部分を含めましたが、それらも null です。また、自分のサイト (1and1 でホストされている) で phpmyadmin を介してクエリを確認したところ、クエリはそこで機能します。誰にも洞察がありますか?私はPHPとMySQLの両方に慣れていないので、ここに行きながら学んでいますが、ちょっと壁にぶつかっています.

4

1 に答える 1

2

行セットから実際の行を呼び出すmysql_fetch_assocか取得する必要があります。mysql_fetch_row

$sql = sprintf("SELECT * FROM users WHERE email = '%s'", mysql_real_escape_string($email));
$result = mysql_query($sql) or die(mysql_error());
$no_of_rows = mysql_num_rows($result);
if ($no_of_rows > 0) {
    // User exists.
    $row = mysql_fetch_assoc($result);
    $salt = $row['salt'];
于 2013-04-08T01:50:34.850 に答える