php - 如何在 PHP 中循环 $_POST
问题描述
我目前正在创建一个简单的预订系统。用户下订单,他们的订单会被插入到pre_orders
带有哈希的cc
表中,并且使用相同的哈希更新表。
我在管理面板中添加了一个表格,管理员可以在发布日向所有买家发布所有预购的数字商品。我希望表单检查来自的哈希是否与pre_orders
中的哈希匹配cc
,如果匹配,则更新该记录并approved
设置为1
如果不匹配,则它将跳过并进入下一个进行检查。我看到我需要某种循环,但不知道从哪里开始。
if(isset($_POST['release'])){
$stmtt = $auth_user->runQuery("SELECT * FROM `pre_orders`");
$stmtt -> execute(array($_SESSION['user_session']));
$hashh = $stmtt -> fetch();
$hash = $hashh['hash'];
$stmttttt = $auth_user->runQuery("SELECT COUNT(*) FROM `cc` WHERE `hash` = :hash");
$stmttttt -> execute(array(':hash' => $hash));
$count = $stmttttt -> fetch();
$stmttt = $auth_user->runQuery("SELECT * FROM `cc` WHERE `hash` = :hash");
$stmttt -> execute(array(':hash' => $hash));
$check = $stmttt -> fetch();
$idd = $check['id'];
if($count == true){
$stmt = $auth_user->runQuery("UPDATE `cc` SET `approved` = 1 WHERE `id` = :id"); //remove `approved` at end of pre order period
$stmt -> execute(array(':id' => $idd));
$success = "Pre-orders released successfully.";
} else {
$error = "error";
}
}
解决方案
您可以在单个更新语句中完成此操作:
UPDATE cc AS c
INNER JOIN pre_orders AS p ON p.hash = c.hash
SET c.approved = 1
WHERE c.approved <> 1
Inner join 只会查找具有 pre-order 的行和具有匹配哈希的 cc 行。如果您想查看“受影响的行”以确定更新了多少新订单,WHERE 子句只是一个额外的点缀。希望您将 cc.approved 值默认为 0 而不是 NULL。
如果允许 cc.approved 为 NULL,则需要 WHERE 子句
WHERE c.approved IS NULL OR c.approved <> 1
您需要的具体技术取决于您在 PHP(mysqli 或 PDO)中使用的客户端库。
推荐阅读
- unity3d - VS Code 中的 Omnisharp 会产生很多关于 Unity 项目的警告。为什么?
- python - PermissionError:[Errno 13] 权限被拒绝:'voice.mp3'
- javascript - 浮点数 - 没有算术运算和精度错误
- node.js - 使用承诺重构代码以读取文件并将它们转换为 json
- c# - 是什么让这个查询在 EF Core 3.x 中无法翻译?
- shopify - 更改 Shopify 上博客的 URL
- c# - 如何简化相互依赖的绑定?
- java - Getter Setter 不会给出变量
- c - Mingw64 / Msys2 - gcc 无法在自己的包含目录中找到标头
- javascript - 为了能够使用 Phaser、PixiJS 和 EaselJS 等库,我是否只需要与源建立“连接”来下载库?