0

我可以为我的 iPad 获取设备令牌,但问题是如何通过 php 代码将其发送到服务器中的数据库。

我已经测试了 php 代码并且它正在工作。

这是我发送设备令牌的功能:

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{

NSString *devToken = [[[[deviceToken description] 
                        stringByReplacingOccurrencesOfString:@"<"withString:@""] 
                       stringByReplacingOccurrencesOfString:@">" withString:@""] 
                      stringByReplacingOccurrencesOfString: @" " withString: @""];
NSLog(@"%@",devToken);
NSString *sli = [NSString stringWithFormat:@"http://localhost:8888/insertiphone.php?number=%@",devToken];
NSURL *url = [NSURL URLWithString:sli];

NSData *test = [NSData dataWithContentsOfURL:url];
if ([test length] == 0) {
    NSLog(@"no done");
}

}

它不工作..

这是php代码:

<?php
function inserttodatabase(){
$con = mysql_connect("localhost","root","root");
mysql_select_db("my_db", $con);
mysql_query("INSERT INTO iphoneid (idip)
VALUES ($_GET[number])");
echo "done";
}

inserttodatabase(); 
?>

更新了,我也尝试了这些代码但没有工作

 NSString *devToken = [[[[deviceToken description] 
                        stringByReplacingOccurrencesOfString:@"<"withString:@""] 
                       stringByReplacingOccurrencesOfString:@">" withString:@""] 
                      stringByReplacingOccurrencesOfString: @" " withString: @""];

NSString *sli = [NSString stringWithFormat:@"http://localhost:8888/insertiphone.php?      number=%@",devToken];
NSLog(@"%@",sli);
NSURL *url = [NSURL URLWithString:sli];

NSURLRequest *urlr = [NSURLRequest requestWithURL:url     cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];

NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:urlr     delegate:self];

if (connection){
    NSLog(@"connecting");
}else {
    NSLog(@"error");
}

它说正在连接,但不会将任何内容插入数据库

4

2 回答 2

0

检查 nil (dataWithContentsOfUrl可以在问题上返回 nil )

您将获得更好的错误信息和控制使用NSURLConnection (connection:didFailWithError:) 或ASIHttpRequest (requestFailed:) 发送请求。

iphone中的休息网络服务

http://allseeing-i.com/ASIHTTPRequest/How-to-use

另外,从 iPhone 客户端发出请求时,服务器代码是否执行?调试或跟踪服务器代码以更好地了解正在发生的事情。

您还可以设置诸如charles proxy之类的东西,以查看通过网络传输的内容和返回的内容。

这是一篇调试 charles 代理的连接问题的博文。 http://blog.mediarain.com/2009/08/iphone-http-connection-debugging/

最后,一次性尝试 [machinename].local:8888... 如果您遇到名称解析、本地主机解析问题等...问题。

于 2012-07-10T00:01:36.320 回答
0

首先,提供有关服务代码正在做什么以及如何测试它的更多信息。您编写的代码发出的是 HTTP GET 请求,而不是 put 或 post。在大多数情况下,将记录插入数据库的 Web 服务(如 URL 中的“insertiphone.php”所示)将使用 HTTP POST 而不是 GET 来实现。如果您使用 GET 发送它,就像您正在做的那样,它不会按预期执行。因此,提供有关您如何知道服务器正在工作以及您为测试它所做的工作的更多信息将有助于诊断您的问题。

假设您已经检查了服务并验证它期待 HTTP GET(如果服务上正在更新数据,则不是好的 RESTful 设计,但肯定有可能),那么我同意@bryanmac 提供的答案。查看他的链接以了解发出 HTTP 请求的更好方法、检查服务器端以查看请求是否通过、使用 CharlesProxy 进行调试等。

如果您的服务需要 GET 并且您可以使用 Web 浏览器对其进行测试,我将提供另一个调试技巧,在启用开发人员扩展的 Safari 中尝试它,并使用它来监视资源请求和响应。这将允许您查看成功请求的外观,可以将其与您发送的实际请求进行比较,您可以使用 CharlesProxy 看到。

于 2012-07-10T00:30:16.413 回答