ユーザー登録とログインに 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の両方に慣れていないので、ここに行きながら学んでいますが、ちょっと壁にぶつかっています.