2012-01-26 129 views
1

这是我的第一个问题,我希望能得到一些帮助:iPhone - PHP POST请求

我用几种方法(并与不同的HTTP传输框架试过),使在后的行动PHP脚本localhost没有好的结果。我不知道还有什么要寻找。我一直坚持这个至少6或7小时,终于到这一点:

目标C代码:

if (name != nil && message != nil) { 
     NSMutableString *postString = [NSMutableString stringWithString:TFPostURL]; 

     [postString appendString:[NSString stringWithFormat:@"%@=%@",TFName,name]]; 

     [postString appendString:[NSString stringWithFormat:@"%@=%@",TFMessage,message]]; 

     [postString setString:[postString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:postString]]; 

     [request setHTTPMethod:@"POST"]; 

     postConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; 


    } 

TFPostURL,TFName,TFMessage,姓名和消息常量由我定义。

我使用的数据库只是为了检查传输已经成功完成:

PHP脚本

<?php 

$username = "root"; 
$database = "db"; 

mysql_connect(localhost, $username); 

@mysql_select_db($database) or die("Unable to find database"); 

$name = $_POST["name"]; 

$message = $_POST["message"]; 

$query = "INSERT INTO test VALUES ('', '$name', '$message')"; 

mysql_query($query) or die(mysql_error("error")); 

mysql_close(); 

?> 

任何想法,什么是错误的?

我一直在localhost试过,仍然需要在另一台mac上试试这个。 我正在上传我的php文件到公共领域,并检查它是否在我自己的计算机中。


编辑

我已经改变了PHP POST操作就搞定了,获得惊人的效果;现在它工作!

<?php 

$username = "root"; 
$database = "db"; 

mysql_connect(localhost, $username); 

@mysql_select_db($database) or die("Unable to find database"); 

$name = $_GET["name"]; 

$message = $_GET["message"]; 

$query = "INSERT INTO test VALUES ('', '$name', '$message')"; 

mysql_query($query) or die(mysql_error("error")); 

mysql_close(); 

?> 
+0

只要你知道,模拟器上的localhost应该可以工作 - 模拟器上的Safari能够访问我的mac的http服务器。尝试在iOS模拟器的Safari浏览器中打开您的php脚本,看看数据库条目是否弹出。如果是这样,那么你可以肯定它是导致问题的应用程序代码,而不是php。 – Tim

+0

欢迎来到SO,Fernando! – rdlowrey

+0

谢谢你们!我已经解决了我的问题......真的,我从来没有看到过这种方式。检查编辑! –

回答

-1

我建议你使用这种方法从iPhone发送到瓦尔任何PHP的主机:

-(void) httpRequestSender{ 
NSString *par1 = @"test1"; 
NSString *par2 = @"test2"; 
NSString *[email protected]"http://something/postToDb.php"; 
NSString *urlString =[NSString stringWithFormat:@"%@?par1=%@&par2=%@",requestedURL,par1,par2]; 
NSURL *url = [NSURL URLWithString:urlString]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
[request setHTTPMethod:@"GET"]; 

NSURLResponse *response = nil; 
NSError *error = nil; 
NSData *result = [NSURLConnection sendSynchronousRequest:request 
    returningResponse:&response error:&error]; 
NSString *resultString = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]; 
//resultString is the returned buffer from calling the page 
[request release]; 

} 
+0

感谢您的反馈!现在我会尝试一下,我知道我的PHP文件有什么问题。检查编辑! –

+0

您可以随时使用$ _REQUEST而不是$ _GET和$ _POST,因为它涵盖了两个方法变量 – Ashraf

+0

我会记住在接下来的几天内测试,我会随时通知您。 –

3

我建议使用ASIHTTP libraries。他们很棒。以下是一些示例代码:

ASIHTTPRequest* req = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"localhost"]] autorelease]; 
[req setCompletionBlock:^{ 
    NSLog(@"It works! Response was %@",[req responseString]); 
}]; 
[req startAsynchronous]; 

它使异步响应变得简单,并且可以使用像老板这样的闭包。

我已经尝试过一段时间处理内置的NSURLRequest方法,并且强烈希望能够在不创建单独的委托和处理方法的情况下进行异步请求的简单性。它还支持发布数据和文件,以及其他一些我甚至还没有使用的技巧。

+0

您好,我已经尝试过ASIHTTP库,但没有好的结果,尽管每个人都没有问题地使用它们。这表明有些奇怪的错误。 –

+0

你确定你的php代码正在工作吗?你可以尝试上面的代码,但让你的网页只需简单的字符串,并验证模拟器是否收到响应? **什么不工作?**请求完全?值正在发送? – Tim

+0

使用过的网络调试器和事情都很顺利,开始在我的php文件中进行更改,并且如您所想,这就是问题所在。简单地将HTTP POSTs更改为GET并通过它。愚蠢的权利? –