首页 > 解决方案 > 如何在 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";
        }
    }

标签: php

解决方案


您可以在单个更新语句中完成此操作:

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)中使用的客户端库。


推荐阅读