首页 > 解决方案 > Angular中的http删除功能有问题,没有错误

问题描述

我正在尝试从我的数据库中删除一条记录。到目前为止,正确的 id 正在通过,正如我在查询字符串参数中看到的那样,我没有收到任何错误。但是,该行没有被删除,我开始认为这只是一些语法错误,但我不确定。

删除-like.php

<?php

$id=isset($_GET['id']) ? $_GET['id'] : die('ERROR: id not found.');

if($_POST) {

include 'connectPDO.php';

try {
    $query = "DELETE FROM likes WHERE id = ?";

    $stmt = $con->prepare($query);

    $stmt->bindParam(1, $id);

    $stmt->execute();

} catch (PDOException $exception) {
    die('ERROR: ' . $exception->getMessage());
}
}

这是我调用它的服务文件。
论坛服务.ts

  removeLike(id: string) {
    return this.http.delete(`${this.baseUrl}/remove-like.php?id=${id}`);
  }

然后这是我在组件中调用该函数的部分。
主题.component.ts

  clickDislike() {
    this.forumService.removeLike(this.dataService.getToken() + 'topic' + this.forumService.getLikeToken()).subscribe(result => {
  this.ngOnInit();
    })
  }

标签: phpmysqlsqlangulartypescript

解决方案


你永远不会进入你的条件块,因为if ($_POST)总是会false在你的情况下返回。实际上,您使用带有空主体的 http DELETE 请求调用此端点。

<?php

$id=isset($_GET['id']) ? $_GET['id'] : die('ERROR: id not found.');

include 'connectPDO.php';

try {
    $query = "DELETE FROM likes WHERE id = ?";

    $stmt = $con->prepare($query);

    $stmt->bindParam(1, $id);

    $stmt->execute();

} catch (PDOException $exception) {
    die('ERROR: ' . $exception->getMessage());
}

如果您想确保使用正确的 HTTP 动词调用您的端点,请参考这个问题,并添加:

if ($_SERVER['REQUEST_METHOD'] === 'DELETE') {
     // Your code
}

此外,我建议您添加一个安全机制(例如身份验证控制),因为删除行的公开可用端点是一个安全问题。


推荐阅读