0

在我们正在构建的用户系统中,客户能够销售我们提供的多种产品。这些产品的数量不是太多,但我们可能会(并计划经常添加新产品)。当用户登录到他们的管理门户时,他们可以从提供的所有可用产品列表中启用或禁用他们想要销售的产品。

name="products[]"我们使用复选框和复选框数组构建了表单以接受“启用”产品的值。这部分一切正常。当我们试图为输入的数据构建最佳的 INSERT / UPDATE 方法时,这个问题就出现了。如果稍后(由我们)向客户提供新产品并选择启用该产品,则会插入值。只需选中或取消选中相应的产品复选框,就会发生更新,从而启用或禁用该产品。

并且INSERTUPDATE if a product is currently disabled但我无法想出一个数组来比较正确地将产品更新为“禁用”,如果它当前在数据库中设置为启用。

 foreach($_REQUEST['products'] as $productID) {
    if ( array_key_exists($productID, $_SESSION['productsOffered']) && $_SESSION['productsOffered'][$productID]['status'] == 0) {
        echo 'this product would be turned active.';
        echo "<br>";
    }
    elseif ( array_key_exists($productID, $_SESSION['productsOffered']) && $_SESSION['MYADMIN']['products'][$productID]['status'] == 1) {
        echo 'this product would be turned inactive.';
        echo "<br>";
        <b>THIS IS THE LOGIC WHICH DOES NOT WORK</b>
    }
    elseif ( !array_key_exists($productID, $_SESSION['MYADMIN']['products']) ) {
        echo 'insert';
        echo "<br>";
    }
}

如前所述,这里的 IF 和最终 elseif 工作正常,但中间的英文语句:“如果用户取消选中最初设置为活动的产品,则禁用该特定产品 ID”是不正确的。

任何建议表示赞赏。

更新 1:初步想法

我相信一种可能有效的方法是构建一个包含所有当前产品的新数组,$_SESSION['productsOffered']并找出哪些当前产品(在更新时)当前设置为活动状态。然后我将能够将新数组与$_REQUEST['products']数组进行比较,并确定哪些产品被遗漏(或基本上未选中),然后可以更新适当的产品。

虽然我相信这种方法可能会奏效,但它似乎很草率。更新 2:这也必须在当前的 foreach 请求之外完成,因为很明显,已停用的产品不会存在于请求中。

更新 3

根据要求,数组中的一些示例数据如下(这是非常简单的数据并且接近“真实”):

$_SESSION['productsOffered'] = array(
    [1] => Array
        (
          [ID] => 1,
          [status] => 1,
          [name] => Product 1,
        )

    [2] => Array
        (
          [ID] => 2,
          [status] => 1,
          [name] => Product 2,
        )

);

$_REQUEST['products'] = array('1','2','3','4','5','6','7');
4

2 回答 2

1

$_REQUEST['products'] 将仅包含已被用户标记为已检查的产品。所以它不会包含未经检查的产品。这意味着在上面的代码中,控件永远不会转到您正在尝试执行的代码的第二部分。您可以在此处采用的一种方法是在用户提交表单时首先禁用所有产品。示例 SQL 将是:

$sql = "update product_table set disabled='true' where user_id = 'this_user_id'";

然后您可以遍历您的逻辑以标记用户选择的产品:

foreach($_REQUEST['products'] as $productID) {
    if ( array_key_exists($productID, $_SESSION['productsOffered']) && $_SESSION['productsOffered'][$productID]['status'] == 0) {
        echo 'this product would be turned active.';
        echo "<br>";
    }
    elseif ( !array_key_exists($productID, $_SESSION['MYADMIN']['products']) ) {
        echo 'insert';
        echo "<br>";
    }
}

这有点类似于您在 Update 1: Initial Thought 中发布的逻辑。更多信息,例如什么是 $_SESSION['productsOffered'] 数组和示例 $_REQUEST['products'] 数组会有所帮助。

于 2013-07-16T20:03:08.357 回答
0

你知道REPLACEmysql中的动词吗?

如果不存在则添加新的,如果存在则更新。

于 2013-07-16T19:44:37.673 回答