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` 请求的方法:
### 改进的代码:
```php
if ($_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` 请求设置正确,并检查服务器日志以获取更多调试信息。