1

.php スクリプトでエラーを見つけることができません。

一意のデバイス ID と電子メールを含むユーザーを登録するために、投稿要求を送信する Android アプリを使用します。

データを送信するときに、API はメールまたはデバイス ID が既に存在するかどうかを確認するため、2 回登録することはできません。

初めて登録すると、すべてが機能します。同じメールで再度登録しようとすると、同様に機能します(正しいエラーが発生します)。しかし、別の電子メール (ただしデバイス ID は同じ) を使用すると、間違ったエラー コードが表示されます。

PHPコードは次のとおりです。

else if ($tag == 'register') {
    // Request type is Register new user
    $name = $_POST['name'];
    $email = $_POST['email'];
    $password = $_POST['password'];
    $devid = $_POST['devid'];

    // check if user already exists
    if ($db->CheckUser($email)) {
        // user already exists
        $response["error"] = 2;
        $response["error_msg"] = "User already exists";
        echo json_encode($response);}


    else if ($db->CheckDevice($devid)) {
            // Device already exists
            $response["error"] = 3;
            $response["error_msg"] = "Device already exists";
            echo json_encode($response);}
    else {
        // store user
        $user = $db->storeUser($name, $email, $password, $devid);
        if ($user) {
            // user stored successfully
            $response["success"] = 1;
            $response["uid"] = $user["unique_id"];
            $response["user"]["name"] = $user["name"];
            $response["user"]["email"] = $user["email"];
            $response["user"]["devid"] = $user["devid"];
            $response["user"]["created_at"] = $user["created_at"];
            $response["user"]["updated_at"] = $user["updated_at"];
            echo json_encode($response);} 
        else {
           // user failed to store
           $response["error"] = 1;
           $response["error_msg"] = "Error occured in Registration";
           echo json_encode($response);}
    }
}

チェック機能:

public function CheckUser($email) {
    $result = mysql_query("SELECT email from users WHERE email = '$email'");
    $no_of_rows = mysql_num_rows($result);
    if ($no_of_rows > 0) {
        // user existed 
        return true;} 
    else {
        // user not existed
        return false;}
}


public function CheckDevice($devid) {
    $result = mysql_query("SELECT devid from users WHERE devid = '$devid'");
    $no_of_rows = mysql_num_rows($result);
    if ($no_of_rows > 0) {
        // user existed 
        return true;
    } else {
        // user not existed
        return false;
    }
}

ストア機能:

public function storeUser($name, $email, $password, $devid) {
    $uuid = uniqid('', true);
    $hash = $this->hashSSHA($password);
    $encrypted_password = $hash["encrypted"]; // encrypted password
    $salt = $hash["salt"]; // salt
    $result = mysql_query("INSERT INTO users(unique_id, name, email, encrypted_password, salt, devid, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$salt', '$devid', NOW())");
    // check for successful store
    if ($result) {
        // get user details 
        $uid = mysql_insert_id(); // last inserted id
        $result = mysql_query("SELECT * FROM users WHERE uid = $uid");
        // return user details
        return mysql_fetch_array($result);
    } else {
        return false;
    }
}

送っています

このエラーが発生するはずです:

$response["error"] = 3;
        $response["error_msg"] = "Device already exists";

しかし、私はこれを取得しています:

$response["error"] = 1;
           $response["error_msg"] = "Error occured in Registration";

phpMyAdminCheckDevicefalse手動で使用するSELECT devid from users WHERE devid = '$devid'と、true.

次に、デバイスIDが一意である必要があり、エラーが発生するため、保存に失敗します(これが唯一のもっともらしい説明です)。

4

2 に答える 2

0

エラーが見つかりました!

デバイスIDの長さは15文字で、テーブルの長さは13文字でした。

あなたの助けをありがとう、私は今馬鹿のように感じます:)

于 2012-12-06T01:29:56.280 に答える
0

echo $devidAndroid デバイスが実際に同じ ID を送信しているかどうかを確認するには、CheckDevice メソッドでいくつかの操作を行う必要があります。

どこかでエラーが発生した可能性があります (同じデバイス ID から 2 番目のユーザーとして登録しようとしたときに、何も送信していない可能性があります)。

これはあなたの問題だと思います(Androidアプリ)。

于 2012-12-06T01:15:36.370 に答える