Php Angular-$http.delete返回成功,但不返回';t工作

Php Angular-$http.delete返回成功,但不返回';t工作,php,html,ajax,angularjs,database,Php,Html,Ajax,Angularjs,Database,我有一个Angular+PHP应用程序,在删除客户时遇到问题 我没有收到任何错误,实际上,应用程序返回success,但它不会从我的数据库中删除客户 这是我的角度控制器 app.controller('consultar_cliente_controller', function($scope, $http){ $scope.listaDeCliente = []; var init = function(){ $scope.buscar();

我有一个Angular+PHP应用程序,在删除客户时遇到问题

我没有收到任何错误,实际上,应用程序返回success,但它不会从我的数据库中删除客户

这是我的角度控制器

    app.controller('consultar_cliente_controller', function($scope, $http){
    $scope.listaDeCliente = [];

    var init = function(){
        $scope.buscar();
    };

    $scope.buscar = function(){
        $http.get('consultar_cliente.php')
             .success(function(data){
                $scope.listaDeCliente = data;
             })
             .error(function(){
                console.error('Erro ao executar o GET do cliente');
             });
    };

    $scope.deletar = function(id){
        $http.delete('remover_cliente.php/' + id)
             .success(function(){
                console.log('Cliente removido com sucesso!');
                $scope.buscar();
             })
             .error(function(){
                console.error('Erro ao remover cliente');
             })
    };

    init();
});
这是我的PHP

<?php
  $dbh = new PDO('pgsql:host=localhost;dbname=livraria_glp', 'postgres');
  /*
  * Recuperando todos os detalhes da requisição HTTP do Angular
  */ 
  $postdata = file_get_contents("php://input");
  $request  = json_decode($postdata);
  @$id      = $request->id;

  echo $id;

  $dbh->exec("DELETE FROM PRODUTO WHERE ID = '$id'") or die( $dbh->errorInfo() );

?>
它返回:

从PRODUTO中删除,其中ID=“”


为什么PHP无法接收id?

请尝试替换此id

$scope.deletar = function(id){
    var postData = {'id' : id};
    $http.delete('remover_cliente.php', postData)
         .success(function(){
            console.log('Cliente removido com sucesso!');
            $scope.buscar();
         })
         .error(function(){
            console.error('Erro ao remover cliente');
         })
};

Angular不会发送
DELETE
的请求正文,因此您必须从URL读取
id
。您不妨将其作为查询参数传递

$http.delete('remover_cliente.php', {
    params: {id: id}
})
然后通过
$\u GET['id']
读取它

<?php
if (!isset($_GET['id'])) {
    exit;
}

$id = $_GET['id'];
$dbh = new PDO('pgsql:host=localhost;dbname=livraria_glp', 'postgres');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $dbh->prepare('DELETE FROM PRODUTO WHERE ID = ?');
$stmt->execute([$id]);

echo $id;

然而,我不知道这是否得到支持,它肯定不是很有意义。如果有效,您可以继续使用
file\u get\u contents('php://input)
json_decode()

您好SQL注入向量,再见
PRODUTO
表dataPhil,这只是一个正在研究的项目。请尝试调试
$postdata
。一个合适的调试器会很好,但至少可以尝试
$postdata=file\u get\u contents('php://input'); var_dump($postdata);退出我已经试过了,但没有成功:(,我的php仍然无法接收id的值别担心,伙计!不幸的是,仍然无法工作=(.PHP中的语句仍然从PRODUTO中删除,其中ID=''@KelvinKyaw OP没有使用任何路径信息数据,因此您的初始答案应该已经足够了。@Phil是的。但是,我无法想象为什么无法从服务器端获取此值。Kelvin尝试了更新后的postData解决方案,但仍然不起作用=(耶!!你的第二个解决方案工作得很好!!除了{data:{id:id}}之外,没有改变我的原始代码。谢谢!!!@guuilp请注意第一部分中的无SQL注入的PHP代码OK Phil。我对SQL注入的了解很差,但我会研究并修复我的代码。如果你推荐任何材料,我将非常感谢(再次):D
$http.delete('remover_cliente.php', {
    params: {id: id}
})
<?php
if (!isset($_GET['id'])) {
    exit;
}

$id = $_GET['id'];
$dbh = new PDO('pgsql:host=localhost;dbname=livraria_glp', 'postgres');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $dbh->prepare('DELETE FROM PRODUTO WHERE ID = ?');
$stmt->execute([$id]);

echo $id;
$http.delete('remover_cliente.php', {
    data: {id: id}
})