Это ситуация:
У меня есть простое приложение, сделанное в Angular JS, которое общается с сервером через API, созданный в кодеигниторе.
В приложении есть система входа в систему. Когда пользователь вводит адрес электронной почты и пароль, эти данные отправляются на сервер, если существует почта и пароль совпадают, он возвращает true.
Я сделал много попыток, но не понял, как я могу это сделать правильно.
Это код:
Форма:
<form role="form" method="post" novalidate ng-submit="submitForm()"> <div class="form-group"> <label for="exampleInputEmail1">Email address</label> <input type="email" class="form-control" name="email" ng-model="user.name" placeholder="Enter email"> </div> <div class="form-group"> <label for="exampleInputPassword1">Password</label> <input type="password" class="form-control" name="password" ng-model="user.password" placeholder="Password"> </div> <button type="submit" class="btn btn-default">Submit</button> </form>
Это угловой контроллер js:
$scope.authorized = false; $scope.user = {}; $scope.submitForm = function() { console.log("posting data...."); $http({ method : 'POST', url : 'http://127.0.0.1/api/main/login', headers: {'Content-Type': 'application/json'}, data : JSON.stringify({email:$scope.user.email, password:$scope.user.password}) }).success(function(data) { console.log(data); $scope.authorized = data; if ($scope.authorized) { $location.path("memberArea"); }; }); }
В методе codeigniter пробовали много вещей. Прямо сейчас есть только одно:
function login() { print json_encode($_POST); }
Но я не знаю, может ли получить данные в $ _POST, потому что он кажется пустым.
Итак, вопрос:
Как я могу получить данные в методе codeigniter? Лучше отправлять как JSON, а затем json_decode? Я также попробовал json_decode ($ _ POST, true); Но был нулевым. Но если данные не находятся в $ _POST, где? Я немного смущен.
Спасибо за помощь!
РЕДАКТИРОВАТЬ:
Спасибо, ребята, за ответ. Это было одно, что попробовали. Но как-то не работает. Теперь, например, метод выглядит следующим образом:
function login() { $email = $this->input->post('email'); var_dump($email); print json_encode($email); }
Но то, что возвращается, является логическим ложным.
Спасибо за ответ. решение выглядит следующим образом
$obj=json_decode(file_get_contents('php://input'));
вы можете проверить его
print_r(json_decode(file_get_contents('php://input')));
$_POST
будет пуст в CodeIgniter, потому что он намеренно освобождает его из соображений безопасности. Вам нужно использовать $this->input->post();
вместо.
Класс ввода CodeIgniter
Использование:
$postData = $this->input->post();
Он должен дать вам массив со всеми данными сообщения.
Я также советую вам включить фильтрацию XSS.
Ниже приведена документация для класса ввода Codeigniter: http://ellislab.com/codeigniter/user-guide/libraries/input.html
данные, отправленные с запросом, являются парами имя-значение, поэтому вы должны написать следующее:
data : {"myformdata":JSON.stringify({email:$scope.user.email, password:$scope.user.password})}
и в воспламенителе кода вы можете получить данные:
$this->input->post("myformdata"); //should return what // that JSON.stringify returned
Хотя это уже ответили, я довольно часто получаю эту небольшую утилиту, включенную во многие из моих приложений, которые должны принимать как application/x-www-form-urlencoded
и application/json
POST.
if (strcasecmp($_SERVER['REQUEST_METHOD'], 'post') === 0 && stripos($_SERVER['CONTENT_TYPE'], 'application/json') !== FALSE) { // POST is actually in json format, do an internal translation $_POST += json_decode(file_get_contents('php://input'), true); }
После этого момента вы можете просто использовать $_POST
как обычно, все данные JSON будут декодированы для вас.