私たちが構築しているユーザーシステムでは、クライアントは私たちが提供する多くの製品を販売することができます。これらの製品の数はそれほど多くはありませんが、可能性があります (また、新しい製品を頻繁に追加する予定です)。ユーザーが管理ポータルにログインすると、提供されているすべての利用可能な製品のリストから、販売したい製品を有効または無効にすることができます。
チェックボックスとチェックボックスname="products[]"
配列を使用して、「有効な」製品の値を受け入れるようにフォームを作成しました。この部分はすべて正常に動作します。この問題は、入力されたデータに最適な INSERT / UPDATE メソッドを構築しようとしているときに発生します。値は、顧客が後で (当社から) 新製品を提供され、その製品を有効にすることを選択した場合に挿入されます。更新は、対応する製品のチェックボックスをオンまたはオフにするだけで発生し、その製品を有効または無効にします。
しかしINSERT
、UPDATE if a product is currently disabled
現在DBで有効に設定されている場合、製品を「無効」に正しく更新するための配列を比較することはできません。
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']
除外された (または本質的にチェックされていない) 製品を特定し、適切な製品を更新することができます。
この方法はうまくいくと思いますが、非常にずさんなようです。Update2: これも現在の foreach リクエストの外で行う必要があります。これは、非アクティブ化された製品が REQUEST に存在しないことが明らかであるためです。
アップデート 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');