2011-07-06 36 views
1

我想建立一個客觀的C應用程序使用ASIHTTPRequest發佈數據到遠程數據庫。目前,我正在使用MAMP服務器,並正在努力使其運行。 php文件在線運行時工作正常,但我無法讓iphone應用程序將數據發佈到php文件。這裏是我的代碼:ASIHTTPRequest問題 - 無法POST數據到數據庫

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"); 
} 
?> 

現在我知道這是不好的做法,改變的主要方法,但我只是想建立一個快速和骯髒的iphone/PHP虛擬連接得到它的工作和主要方法是最簡單的選項。當然,在真正的應用程序,我將使用視圖來觸發這種行爲......

我的代碼編譯和up..but沒有被貼到我的數據庫沒有錯誤,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

你有沒有考慮過與主要混亂是問題的原因?你正在嘗試做所有的數據,但你還沒有打電話給UIApplicationMain。你確定所有的數據連接都已設置好嗎?也許你應該創建一個帶有按鈕的視圖並對其進行「正確」測試 –

回答

1

所有東西推開,永遠不會執行你的要求。確保在請求對象上調用startSynchronousstartAsynchronous。請考慮閱讀"How To use it"指南ASIHTTPRequest。

+0

「其他所有事物都放在一邊」? - 我正在做其他事情嗎? – user559142

+1

我建議不要從'main()'測試,而是放置請求在應用程序委託的'applicationDidFinishLaunching'中,我也不確定你可以使用絕對路徑而不是本地主機來尋址MAMP。 – Justin