2012-01-26 13 views
1

は、これが私の最初の質問であると私はいくつかの助けを得ることを期待:iPhone - PHP POSTリクエスト

私はPHPスクリプトにPOSTアクションを作るためにいくつかの方法(および別のHTTP伝送フレームワークで試してみました)を使用しました良い結果が得られないlocalhost。他に何を探すべきか分からない。私は、少なくとも6または7時間のためにこれで立ち往生し、最終的にこれになってきた:TFPostURL、TFName、TFMessage、名前とメッセージが私によって定義された定数である

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]; 


    } 

Objective Cのコード。

私は、送信が成功した場合だけチェックするためにデータベースを使用しています:

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ファイルをパブリックドメインにアップロードし、それが私自身のコンピュータにあるかどうか確認しています。


編集

私は素晴らしい結果を得る、GETする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 SimulatorのSafariブラウザでPHPスクリプトを開いて、データベースのエントリがポップアップしているかどうかを確認してください。そうであれば、問題はphpではなくアプリコードであることがわかります。 – Tim

+0

SO、Fernandoへようこそ! – rdlowrey

+0

ありがとうございました!私は私の問題を解決しました...本当に、私はそれがこのように来るのを見たことはありません。編集を確認してください! –

答えて

-1

私はあなたが任意のPHPのホストにiPhoneからVARSを送信するには、このメソッドを使用することをお勧め:

-(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

両方のメソッド変数をカバーするので、$ _GETと$ _POSTの代わりに$ _REQUESTを使うことができます – 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メソッドを扱おうとしましたが、別のデリゲートとそれを処理するメソッドを作成せずに非同期要求を行うことができることを強く好んでいます。また、データとファイルのPOSTだけでなく、私がまだ使用していないその他の技をサポートしています。

+0

こんにちはTim、私はすでに誰も問題なしでそれらを使用していますが、良い結果でASIHTTPライブラリを試しました。これは何かが間違っていることを示しています。 –

+0

あなたのPHPコードが正常に動作していますか?上のコードを試してもかまいませんが、あなたのウェブページに単純な文字列をつけて、シミュレータが応答を受け取っていることを確認できますか? **何が効いていないのですか?**リクエストは一体何ですか?値は送信されていますか? – Tim

+0

中古のネットワークデバッガなどのものがうまくいって、私のPHPファイルに変更を加え始めました。あなたが思ったように、それが問題でした。単純にHTTP POSTをGETに変更し、それを通過しました。愚かな権利ですか? –