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