douluhaikao93943
2012-12-06 01:00
浏览 62
已采纳

使用JSON解析器时错误的错误代码

I'm having trouble finding the error in my .php script.

I use an android app sending post requests in order to register a user including a unique device id and email.

When sending the data my api checks if the email or device id already exist so you can't register twice.

When registering the first time, everything works. When i try to register again with the same email it works aswell (getting the correct error). But if I use a different email (but the same device id) I get a wrong error code.

Here is the PHP-Code:

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);}
    }
}

Check Functions:

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;
    }
}

Store Function:

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;
    }
}

I'm sending

I should get this error:

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

But i am getting this one:

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

Somehow when calling the CheckDevice Function it seems to return false although when I manually use SELECT devid from users WHERE devid = '$devid' in phpMyAdmin I get a true.

Then he fails to store because the device id must be unique and gives me the error (thats the only plausible explanation).

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • douliang2167 2012-12-06 01:15
    已采纳

    You should do some echo $devid in your CheckDevice method to see if your android device is really sending same id.

    Maybe you got error somewhere (maybe you are not sending anything when you try to register as second user from same device id).

    I think that this is yours problem (your android app).

    点赞 打赏 评论
  • douyueqing1530 2012-12-06 01:29

    I found my error!

    The device id is 15 chars long, the table length was 13.

    Thank you for your help, I feel like an idiot now :)

    点赞 打赏 评论

相关推荐 更多相似问题