web-dev-qa-db-ja.com

POSTサーバーへのデータへのNSURLRequestの使用に関する問題

NSURLRequestを作成して、iPhoneアプリケーションのデータをサーバーにポストし、PHPスクリプトを実行します。MyPHPスクリプトは次のようになります。この。

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];

    $link = mysql_connect("localhost", "fffasfdas","Nfdsafafs") or die ("Unable to connect to database.");
    mysql_select_db("muradsbi_mydatabase") or die ("Unable to select database.");

    $sqlstatement= "INSERT INTO dbname (name,email) VALUES ('$name','$email')";
    $newquery = mysql_query($sqlstatement, $link);
    echo 'thanks for your register';
?>

そして、私のNSURLRequstは以下のように作成されます。

NSString *myRequestString = @"&name=Hello%20World&email=Ohai2u";
NSData *myRequestData = [NSData dataWithBytes: [myRequestString UTF8String] length: [myRequestString length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: @"http://www.google.com/"]];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: myRequestData];
NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];

ただし、このサイトはこのアプリケーションからデータを取得してデータベースに保存することはできませんが、アプリケーションがサーバーから応答データを取得できるため、正常に接続されたことがわかります。私の変数名が間違った方法で宣言されているのか、他の問題があるのか​​わかりません。どうすれば修正できますか?

32
1234

myRequestStringの先頭の&を削除する必要があります。問題は、正しいcontent-typeヘッダーが送信されていない可能性が高いです。に通話を追加してみてください

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];

また、エラーに対してnilを渡さないでください。これにより、クライアントが何を考えているかを確認できます。

無関係ですが、あなたのPHPコードは SQLインジェクション攻撃 に開放されています。

53
superfell

注意すべきこと ...

NSData *data = [NSData dataWithBytes: [myRequestString UTF8String]
                              length: [myRequestString length]];

...は非常に悪く、漠然としたエラーを引き起こす可能性があります。 UTF8では、エンコードされた文字列のバイト数が文字列の文字数と同じであるという保証はありません。

したがって、代わりに、単に次を使用する必要があります。

NSData *data = [myRequestString dataUsingEncoding: NSUTF8StringEncoding];
7
Stefan Arentz

これを試して

NSString *name = [[NSString alloc]initWith String: @"Hello World"];     
NSString *email = [[NSString alloc]initWith String: @"Ohai2u"];     
NSString *urlString = [NSString stringWithFormat:@"http://somedomain.com/sendMail.php?name=%@&email=%@", 
                           [name stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
                           [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

    NSURL *url = [[NSURL alloc] initWithString:urlString];

    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

    NSData *urlData;
    NSURLResponse *response;
    urlData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:nil];
    [url release];

release文字列を忘れないでください

PHPスクリプトにヘッダーを設定する

0
Spire