.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";
phpMyAdminCheckDevice
でfalse
手動で使用するSELECT devid from users WHERE devid = '$devid'
と、true
.
次に、デバイスIDが一意である必要があり、エラーが発生するため、保存に失敗します(これが唯一のもっともらしい説明です)。