我最终会遇到这个问题,因为我过去使用的代码非常相似,而且效果很好。
以下代码导致服务器上出现空$_POST
个变量。我用以下方法验证了这一点:
file_put_contents('log_file_name', "log: ".$word, FILE_APPEND);
log_file_name
的唯一内容是“log:”
然后我用一个简单的HTML表单验证了PHP。它按预期执行。
Objective-C:
NSString *word = @"this_word_gets_lost";
NSString *myRequestString = [NSString stringWithFormat:@"word=%@",
word];
[self postAsynchronousPHPRequest:myRequestString toPage:@"http://www.mysite.com/pagefolder/mypage.php" delegate:nil];
}
-(void) postAsynchronousPHPRequest:(NSString*)request toPage:(NSString*)URL delegate:(id)delegate{
NSData *requestData = [ NSData dataWithBytes: [ request UTF8String ] length: [ request length ] ];
NSMutableURLRequest *URLrequest = [ [ NSMutableURLRequest alloc ] initWithURL: [ NSURL URLWithString: URL ] ];
[ URLrequest setHTTPMethod: @"POST" ];
[ URLrequest setHTTPBody: requestData ];
[ NSURLConnection connectionWithRequest:URLrequest delegate:delegate];
[URLrequest release];
}
PHP:
$word = $_POST['word'];
file_put_contents('log_file_name', "log: ".$word, FILE_APPEND);
我在Objective-C中做错了什么导致$_POST
变量在服务器上为空?
答案 0 :(得分:2)
如果您的代码是直接复制粘贴,则在@
之后缺少NSString *word
符号。如果那不是问题,可能是NSData *requestData = [ NSData dataWithBytes: [ request UTF8String ] length: [ request length ] ];
。相反,尝试:
NSData *requestData = [request dataUsingEncoding:NSUTF8StringEncoding];
编辑:我不是HTTP方面的专家,但我认为重定向通常会杀死POST数据,因为数据直接发送到服务器(请参阅here) - IE将显然有时会自动重新提交POST,但它不是HTTP规范的一部分。
答案 1 :(得分:2)
好的,现在我真的很笨。我发现了问题。
在我的网站上,实际网址为:http://www.mysite.com/PageFolder/mypage.php
其中包含重定向步骤,以便http://www.mysite.com/pagefolder/mypage.php
内的所有文档请求都重定向到PageFolder
。
当我将Objective-C代码中的URL更改为不使用重定向页面时,我的帖子变量工作正常。
我将撤消我对此回复的接受,并对可以解释为什么重定向可能会杀死帖子数据的任何人表示赞赏。