Проблема с использованием NSURLRequest для отправки данных на сервер - PullRequest
32 голосов
/ 01 декабря 2008

Я создаю NSURLRequest для публикации своих данных в приложении iPhone на сервере для выполнения сценария PHP. Мой PHP-скрипт выглядит следующим образом.

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

Тем не менее, этот сайт не может получить данные из этого приложения и сохранить их в базе данных, но я знаю, что он был подключен успешно, потому что мое приложение может получить данные ответа с сервера. Я не знаю, неправильно ли объявлено имя моей переменной или другие проблемы. Как я могу это исправить?

Ответы [ 3 ]

53 голосов
/ 01 декабря 2008

Вы должны удалить начальный & в myRequestString, и проблема, вероятно, заключается в том, что правильный заголовок content-type не отправляется. Попробуйте добавить звонок на

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

Вы также не должны передавать nil из-за ошибки, чтобы видеть, что думает клиент.

Не связано, но ваш PHP-код открыт для Атаки SQL-инъекций .

7 голосов
/ 02 мая 2012

Следует отметить, что ...

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

... очень плохо и может привести к неопределенным ошибкам. В UTF8 нет нулевой гарантии того, что количество байтов в вашей закодированной строке совпадает с количеством символов в вашей строке.

Так что вместо этого вы должны просто использовать:

NSData *data = [myRequestString dataUsingEncoding: NSUTF8StringEncoding];
0 голосов
/ 26 августа 2011

попробуйте

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

просто не забудьте выпустить струны

установить заголовки в скрипте PHP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...