ASIHTTPRequest问题 - 无法将数据POST到数据库

时间:2011-07-06 13:16:39

标签: php iphone objective-c xcode asihttprequest

我正在尝试构建一个客观的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

1 个答案:

答案 0 :(得分:1)

除此之外,您的请求永远不会被执行。确保在请求对象上调用startSynchronousstartAsynchronous。请考虑阅读ASIHTTPRequest的"How To use it"指南。