Я создаю простое приложение. У меня есть один PHP-скрипт, который принимает 5 параметров: «имя», «фамилия», «электронная почта», «пароль» и «ключ».
Это мой код php файла.
<?php
define("SERVER", 'localhost');
define("USER", 'root');
define("PASSWORD", '');
define("DB", 'test');
mysql_connect(SERVER,USER,PASSWORD,DB);
$con = mysql_select_db(DB);
if($_SERVER['REQUEST_METHOD'] == "POST"){
$firstname = isset($_POST['firstname']) ? mysql_real_escape_string($_POST['firstname']) : "";
$lastname = isset($_POST['lastname']) ? mysql_real_escape_string($_POST['lastname']) : "";
$email = isset($_POST['email']) ? mysql_real_escape_string($_POST['email']) : "";
$password = isset($_POST['password']) ? mysql_real_escape_string($_POST['password']) : "";
$key = isset($_POST['key']) ? mysql_real_escape_string($_POST['key']): "";if(!empty($firstname) && !empty($lastname) && !empty($email) && !empty($password) && !empty($key) ){
if ($key == "12345") {
$sql = "INSERT INTO `users` (`firstname`,`lastname`, `email`, `password`) VALUES ('$firstname', '$lastname', '$email', '$password');";
$qur = mysql_query($sql);
$json = array("status" => 1, "msg" => "Done User added!");
}
else{
$json = array("status" => 0, "msg" =>"key not match");
}}
else{
$json = array("status" => 0, "msg" => "Error adding user!");
}}else{
$json = array("status" => 0, "msg" => "Request method not accepted");
}
@mysql_close($conn);
/* Output header */
header('Content-type: application/json');
echo json_encode($json);
?>
Это скриншот Advanced Rest Client.
Все идет хорошо. Но когда я пытаюсь отправить запрос из приложения ios с помощью AFNetworking, я всегда получаю неправильный ответ.
Это мой код Objective-C.
NSMutableDictionary *parameters = [[NSMutableDictionary alloc]init];
[parameters setValue:@"ramu" forKey:@"firstname"];
[parameters setValue:@"kaka" forKey:@"lastname"];
[parameters setValue:@"[email protected]" forKey:@"email"];
[parameters setValue:@"11111" forKey:@"password"];
[parameters setValue:@"12345" forKey:@"key"];AFHTTPSessionManager *managertwo = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
managertwo.requestSerializer = [AFJSONRequestSerializer serializer];
[managertwo.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[managertwo POST:[NSString stringWithFormat:@"http://localhost:80/Testing/jsonpost.php"] parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"success! %@",responseObject);
NSLog(@"%@",parameters);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error: %@", error);
}];
}
И я получаю ответ, как это
2016-02-16 12:31:36.783 TestingLocal[1626:110064] success! {
msg = "Error adding user!";
status = 0;
}
2016-02-16 12:31:36.783 TestingLocal[1626:110064] {
email = "[email protected]";
firstname = ramu;
key = 12345;
lastname = kaka;
password = 11111;
}
Я не понимаю, почему это происходит. Я искал везде, в чем проблема, но я ничего не получаю. Пожалуйста помоги.
В коде сервера, получающем данные в $ _POST, попробуйте использовать следующее:
$postdata = file_get_contents("php://input");
//replace $_POST with $postdata
На самом деле php: // input позволяет читать необработанные данные POST.
Это менее ресурсоемкая альтернатива $ HTTP_RAW_POST_DATA и не требует каких-либо специальных директив php.ini.
php: // ввод недоступен с enctype = «multipart / form-data».
обращаться http://infopotato.com/blog/index/post
Других решений пока нет …