2024/8/1 13:32:45 ![]()
if ($_SERVER['REQUEST_METHOD'] == 'DELETE') { // 删除用户 parse_str(file_get_contents('php://input'), $_DELETE); $user_id = $_DELETE['user_id']; echo $user_id;}上面的代码我通过postman无法输出信息,是什么原因?2024/8/1 13:32:45 
通过 `parse_str(file_get_contents('php://input'), $_DELETE)` 解析 `DELETE` 请求体的方法并不总是可靠的。特别是在使用 `Postman` 发送 `DELETE` 请求时,可能会遇到问题。相较于这种方法,更推荐直接解析 JSON 输入。以下是更可靠的处理 `DELETE` 请求的方法:
### 改进的代码:
```phpif ($_SERVER['REQUEST_METHOD'] == 'DELETE') { // 从输入流中获取 JSON 数据 $data = json_decode(file_get_contents('php://input'), true); if (isset($data['user_id'])) { $user_id = $data['user_id']; $query = "DELETE FROM users WHERE user_id = :user_id"; $stmt = $db->prepare($query); $stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT); if ($stmt->execute()) { echo json_encode(array("message" => "User was deleted.")); } else { http_response_code(503); echo json_encode(array("message" => "Unable to delete user.")); } } else { http_response_code(400); echo json_encode(array("message" => "User ID is missing.")); }}```
### 解释:
1. **解析 JSON 输入**:使用 `json_decode(file_get_contents('php://input'), true)` 将输入流解析为关联数组。这样可以确保我们能够正确地访问数据。
2. **检查 `user_id` 是否存在**:在继续进行删除操作之前,检查提供的 `user_id` 参数是否存在。如果不存在,则返回 400 状态码和错误消息。
3. **执行删除操作**:如果 `user_id` 存在,则准备并执行 SQL 语句以删除对应用户,并相应地返回成功或失败的消息。
### Postman 请求示例:
在 `Postman` 中发送 `DELETE` 请求时,请确保请求体的格式为 `JSON`,例如:
```json{ "user_id": 123}```
并在 `Headers` 中设置 `Content-Type` 为 `application/json`。
### 总结:
通过以上改进,你应该能够可靠地解析 `DELETE` 请求体并执行删除操作。如果问题依然存在,请确保你的 `Postman` 请求设置正确,并检查服务器日志以获取更多调试信息。