我正在尝试制作一个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
答案 0 :(得分:0)
有几点想法:
您正在将status
设置为'1'
,这是一个字符串值,然后在您解析代码时。通常,您会返回一个字符串值。
我建议您要么返回数值或布尔值。如果返回一个布尔值,你会这样做:
$result = array('status' => true);
然后,当您使用NSJSONSerialization
解析JSON时,您将获得布尔值NSNumber
。
或者,您可以将其作为数值返回:
$result = array('status' => 1);
当你在Objective-C中解析它时,它将是一个整数值NSNumber
。
底线,使用字符串返回码是非典型的。您要么返回数值,要么返回true
或false
(不带引号)。
如果您要使用单个数字代码字段,常见的约定是返回0
表示成功,然后返回任意多个非零值以表示失败(思考是你只有一种方式成功,但你可能因为多种原因而失败)。就个人而言,我尝试通过两个字段消除任何歧义,一个是布尔success
字段,另一个是数字errorCode
字段,如果success
是false
,应用程序可以查看errorCode
然后确定失败的原因,然后采取相应措施。我甚至可能包含一个errorMessage
字段,它描述了英语中的错误(例如,如果MySQL错误,则报告实际的MySQL错误消息)。
隐含的是,通常不鼓励调用die
的技巧。您的应用更难以解析和诊断问题的根源。返回指示错误性质的有效JSON。
与您的直接问题无关的一些事情:
我不鼓励您使用mysql_
函数。现在已弃用,因此您通常使用mysqli_
函数或PDO::
函数。
您永远不应该接受请求中提供的输入,然后将它们提供给您的MySQL查询。例如,如果将参数传递给SQL,并且如果您使用的是mysqli_
,那么在SQL中使用它之前,您需要调用mysqli_real_escape_string
来转义它。或者您在SQL中使用?
占位符,然后手动绑定值。但是,永远不要只接受请求参数并从中构建SQL语句。这可能导致无辜的错误或灾难性的SQL注入攻击。
您不应使用dataWithContentsOfURL
。请改用NSURLConnection
方法sendAsynchronousRequest
。你可以谷歌&#34; sendAsynchronousRequest示例&#34;而你可能会获得大量的点击率。但不要做同步请求。