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).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料