如何从iOS应用程序中捕获的php Web服务获取json布尔响应

时间:2014-11-14 00:33:35

标签: php ios mysql json

我正在尝试制作一个iOS应用程序,如果用户存在于数据库中,则检查(使用)电子邮件地址,是的然后它会在mysql表中添加用户详细信息以及推送通知的设备令牌,整个部分工作正常。我的问题是我想从我的php webservice文件中得到回复,如果用户不在我的数据库中,我只是不知道如何实现一个简单的json响应(在PHP中)以及如何在iOS中捕获它APP。我对编程很新,所以请详细说明最有帮助。 我的PHP代码如下

<?php

  $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = 'root';
    $db = 'iOS';
    $dbtable = 'iosuser';
    $userT='user';



    // Connect Database
    $conn = mysql_connect($dbhost,$dbuser,$dbpass) or die (mysql_error());
    mysql_select_db($db, $conn) or die(mysql_error());


if (isset ($_GET["deviceID"]) && isset ($_GET["email"])){
    $deviceID = $_GET["deviceID"];
    $email = $_GET["email"];

} else {
  $deviceID ="fsfsfsdfsdfsdf";

}
//First confirm if user is already registered via website

$result = mysql_query("SELECT * FROM user WHERE email='$email'",$conn);
$num_rows = mysql_num_rows($result);
// mysql_query($result,$conn) or die(mysql_error();

if ($num_rows > 0)
    {

//  $sql = "INSERT INTO $dbtable (id, deviceID) VALUES (NULL,'$deviceID');";
    $sql = "INSERT INTO $dbtable (id, deviceID) SELECT user.id, '$deviceID' FROM user where email='$email';";
    $res = mysql_query($sql,$conn) or die(mysql_error());
    }else {
    die("User Not Found");

}





// Insert value into DB
//$sql = "INSERT INTO $dbtable (id, deviceID) VALUES (NULL,'$deviceID');";
//$res = mysql_query($sql,$conn) or die(mysql_error());

mysql_close($conn);

if($res) {          
$response = array('status' => '1');                 
} else {
die("Query failed");
}

echo json_encode($res);
exit();
?>

在我的iOS应用程序中,这是我用来将值传递给我的数据库的部分

 NSString *strURL = [NSString stringWithFormat:@"http://172.16.1.15/ios3.php?deviceID=%@&email=%@", _dtoken.text,_email.text];
   // NSLog(_email.text);

    NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];
    NSString *strResult = [[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding];

这个想法是,如果我的webservice php文件说返回一个布尔值假(如果用户不在数据库中)那么我的iOS应用程序应该捕获它并相应地采取行动(这可能是)。 提前感谢任何花时间提供帮助的人 Hamood

1 个答案:

答案 0 :(得分:0)

有几点想法:

  1. 您正在将status设置为'1',这是一个字符串值,然后在您解析代码时。通常,您会返回一个字符串值。

    我建议您要么返回数值或布尔值。如果返回一个布尔值,你会这样做:

    $result = array('status' => true);
    

    然后,当您使用NSJSONSerialization解析JSON时,您将获得布尔值NSNumber

    或者,您可以将其作为数值返回:

    $result = array('status' => 1);
    

    当你在Objective-C中解析它时,它将是一个整数值NSNumber

    底线,使用字符串返回码是非典型的。您要么返回数值,要么返回truefalse(不带引号)。

  2. 如果您要使用单个数字代码字段,常见的约定是返回0表示成功,然后返回任意多个非零值以表示失败(思考是你只有一种方式成功,但你可能因为多种原因而失败)。就个人而言,我尝试通过两个字段消除任何歧义,一个是布尔success字段,另一个是数字errorCode字段,如果successfalse ,应用程序可以查看errorCode然后确定失败的原因,然后采取相应措施。我甚至可能包含一个errorMessage字段,它描述了英语中的错误(例如,如果MySQL错误,则报告实际的MySQL错误消息)。

    隐含的是,通常不鼓励调用die的技巧。您的应用更难以解析和诊断问题的根源。返回指示错误性质的有效JSON。

  3. 与您的直接问题无关的一些事情:

    1. 我不鼓励您使用mysql_函数。现在已弃用,因此您通常使用mysqli_函数或PDO::函数。

    2. 您永远不应该接受请求中提供的输入,然后将它们提供给您的MySQL查询。例如,如果将参数传递给SQL,并且如果您使用的是mysqli_,那么在SQL中使用它之前,您需要调用mysqli_real_escape_string来转义它。或者您在SQL中使用?占位符,然后手动绑定值。但是,永远不要只接受请求参数并从中构建SQL语句。这可能导致无辜的错误或灾难性的SQL注入攻击。

    3. 您不应使用dataWithContentsOfURL。请改用NSURLConnection方法sendAsynchronousRequest。你可以谷歌&#34; sendAsynchronousRequest示例&#34;而你可能会获得大量的点击率。但不要做同步请求。