Подтвердить что ты не робот

Проблема с использованием NSURLRequest для данных POST на сервер

Я создаю 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];

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

NSData *data = [myRequestString dataUsingEncoding: NSUTF8StringEncoding];

Ответ 3

попробуйте это

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 скрипт