当有人通过我的第 3 方购物车下订单时,购物车会将有关销售的 JSON 编码数据字符串发布到我网站上的接收页面。我的接收页面需要解码 POST,提取所售产品的产品 ID,并更新 MySQL 数据库中的状态。
这是我的页面上接收 POST 的 php 代码:
$notification = $_POST;
if($notification == 'success'){
$order = json_decode($notification['order']);
$items = $order['items'];
foreach ( $items as $item ){
$sql = "UPDATE posters SET stock_status='Sold' WHERE cartloom_ref = {$item['pid']}";
mysqli_query($conn, $sql);
}
}else{
header('HTTP/1.1 400 Bad Request');
}
这是实际帖子内容的精简版本:
order = {
"items": [
{
"pid": "000004567",
"item_id": "0001234545",
"qty": "1",
"title": "Widget2",
}
],
"subscribed": 1
}
所以我想将已售商品的产品 ID(“pid”)(4567)与我的数据库中的“cartloom_ref”字段(4567)进行匹配,并将数据库中的记录从“待售”更改为“已售出。
我已将 POST 发送给第三方 (webhook.site),效果很好。我已手动将 POST 发送到我的接收网址,效果很好。所以我很困惑为什么它不起作用。这是一个基本的 Windows 共享服务器。 如果有人可以提供帮助,将不胜感激。 谢谢。
您尝试从
if
语句中的给定数组中读取字符串,$_POST
superglobal 始终会为您提供一个数组,因此,如果您尝试直接从 'success'
superglobal 读取类似 $_POST
的字符串要条件化 if
语句,你永远不会得到 true
响应,所以你可以考虑这个:
$order = json_decode($_POST['order']);
if($order){
$items = $order->items;
foreach($items as $item){
//I'll fix your query too because it's open to sql injection, you can use prepared statements:
$statement = $conn->prepare("UPDATE posters SET stock_status='Sold' WHERE cartloom_ref = ?");
$statement->bind_param("s", $item['pid']);
$statement->execute();
}
} else {
header('HTTP/1.1 400 Bad Request');
}