Php Angular-$http.delete返回成功,但不返回';t工作
我有一个Angular+PHP应用程序,在删除客户时遇到问题 我没有收到任何错误,实际上,应用程序返回success,但它不会从我的数据库中删除客户 这是我的角度控制器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();
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}
})