Проблема с использованием 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, потому что мое приложение может получать данные ответа с сервера. Я не знаю, объявлено ли имя переменной неправильным образом или другие проблемы. Как я могу это исправить?
Ответы
Ответ 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 скрипт