我正在尝试构建一个客观的C app,它使用ASIHTTPRequest将数据发布到远程数据库。目前,我正在使用MAMP服务器,我正在努力让它工作。 php文件在网上运行时有效,但是我无法让iphone应用程序将数据发布到php文件。 HEre是我的代码:
dbconnect.h
#import <Foundation/Foundation.h>
@interface dbconnect : NSObject {
}
-(void) postToDB:(NSString*) msg;
@end
dbconnect.m
#import "dbconnect.h"
#import "ASIFormDataRequest.h"
@implementation dbconnect
-(void) postToDB:(NSString*) msg{
NSString *myphp = @"/Applications/MAMP/htdocs/databases/test.php";
NSURL *url = [NSURL URLWithString:myphp];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:msg forKey:@"message"];
}
@end
主要
#import <UIKit/UIKit.h>
#import "dbconnect.h"
int main(int argc, char *argv[]) {
dbconnect* dbc;
dbc = [[dbconnect alloc]init];
[dbc postToDB:@"TESTING"];
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
PHP
<?php
//connect to database
function connect() {
$dbh = mysql_connect ("localhost", "root", "root") or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db("testers", $dbh);
return $dbh;
}
//store posted data
if(isset($_POST['message'])){
$message = $_POST['message'];
$dbh = connect();
$query = "INSERT INTO messages (message) VALUES ('$message')";
$result = mysql_query( $query ) or die ("didn't query");
}
?>
现在我知道更改main方法是不好的做法,但我只是想构建一个快速而脏的iphone / php虚拟连接以使其正常工作,主方法是最简单的选择。当然在真实应用程序中,我将使用视图来触发此类操作......
我的代码编译并且没有错误,iOSSimulator加载..但没有任何内容发布到我的数据库...
修改
很抱歉我添加了该功能,但我复制了旧版本。即使使用异步请求它仍然不起作用,下面是postToDB函数的当前版本:
@implementation dbconnect
-(void) postToDB:(NSString*) msg{
NSString *myphp = @"/Applications/MAMP/htdocs/databases/test.php";
NSURL *url = [NSURL URLWithString:myphp];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:msg forKey:@"message"];
[request startAsynchronous];
}
@end
答案 0 :(得分:1)
除此之外,您的请求永远不会被执行。确保在请求对象上调用startSynchronous
或startAsynchronous
。请考虑阅读ASIHTTPRequest的"How To use it"指南。