У меня есть простой HTTP-запрос PATCH
от AngularJS
к PHP
и я получаю сообщение об ошибке. Notice: Undefined property: stdClass::$todoName
в моей консоли. Вот коды:
HTML
<div ng-controller="UpdateTodoController">
<div class="input-field col s12" ng-repeat="t in todo">
<input id="{{ t.id }}" type="text" class="validate" ng-model="todoName">
<label class="active" for="{{ t.id }}">{{ t.name }}</label>
<button class="btn waves-effect waves-light" ng-click="updateTodo(t.id)">Update
</button>
</div>
</div>
контроллер
function UpdateTodoController($http, $scope, $routeParams, $location) {
$scope.updateTodo = function(todoId) {
var req = {
method: 'PATCH',
url: 'app/endpoints/update-todo.php',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data: {
todoName: $scope.todoName,
todoId: todoId
}
}
$http(req)
.then(function successCallback(response) {
$location.url('/');
console.log(response);
}, function errorCallback(response) {
console.log(response);
});
}
}
Обновление-todo.php
$data = json_decode(file_get_contents('php://input'));
$todoId = $data->todoId;
$todoName = $data->todoName;
$statement = $db->prepare("UPDATE todo_list SET name=? WHERE id=?");
$statement->execute(array($todoName, $todoId));
$results=$statement->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($results);
Он обновляет конкретное поле с идентификатором, но дает значение NULL
. Я что-то упустил? Спасибо.
Вы отправляете form-urlencoded
данных form-urlencoded
но пытаетесь использовать json_decode
.
Удалите заголовок Content-Type
из углового запроса.
$http
default - отправить application/json
.
Простым тестом было бы вернуть дамп $data
и проверить в браузере dev tools