3

一部の製品の注文ページを PHP で開発しています。ユーザーは複数の種類の製品を選択できる必要があるため、HTML フォームにチェックボックスが必要になります。

「name」属性を介してチェックボックスの配列を確立しました。

私の問題は、ユーザーが選択したものを確認ページに表示したいので、それらのチェックボックスの「値」が最終的に製品名と製品価格を返すようにしたいということです。私が知る限り、私は 1 つの値だけに固執するので、これを回避しようとしました:

<?php
//variables for the array and the count
$parray = $_POST['product'];
$pcount = count($parray);

//arrays for each product's information; i've only listed one for simplicity
$br = array("Big Red", 575);

/*The idea for this was for each product ordered to add a line giving the product information and display it. When the $key variable is assigned, it is stored simply as a string, and not an array (yielding [0] as the first letter of the string and [1] as the second), which I expected, but my general idea is to somehow use $key to reference the above product information array, so that it can be displayed here*/


if (!empty($parray))
{
    for ($i=0; $i < $pcount; $i++)
{
    $key = $parray[i];
    echo "<tr><td height='40'></td><td>" . $key[0] . "</td><td>" . $key[1] . "</td></tr>";

}
}
?>

$key 変数を、設定されている配列の名前であるかのように実際に動作させる方法はありますか? そうでない場合、これを行う良い方法はありますか?

4

4 に答える 4

9

したがって、HTML テーブルでは、各チェックボックスを次のようにレンダリングする必要があります。

<input type="checkbox" name="selectedIDs[]" value="$key" />

アイテム番号はどこ$keyにありますか。

次に、PHP に、$_POST["selectedIDs"]チェックされたすべての項目番号の配列である変数があります。

次のような製品リスト配列があるとします。

$products = array( 1 => array("Big Red", 575), 2 => array("Spearmint", 525));

次に、次のようなループを使用して、選択した製品のリストを印刷できます。

for($i = 0; $i < count($_POST["selectedIDs"]); $i++) {
    $key = $_POST["selectedIDs"][$i];
    $product = $products[$key];
    echo "<tr><td height='40'></td><td>" . $product[0] . "</td><td>" . $product[1] . "</td></tr>";
}

これとあなたが書いたものとの唯一の本当の違いは、私の$products配列は 2 次元であり、配列$keyから関連する製品を取得するために my が使用されていること$productsです。

于 2012-04-27T17:53:22.743 に答える
3

のに対応するアイテムのIDの値をvalue指定できます。option次に、IDの配列を受け取ります。この配列に再度マップして$br、アイテムの名前と価格をIDで検索できます。配列キーをIDとして使用できるため、次のようになります。

<!-- Form: -->
<input type="checkbox" name="product[]" value="1" />
<input type="checkbox" name="product[]" value="..." />
<input type="checkbox" name="product[]" value="15" />
[...]

<?php
$product = array();
$product[1] = array('name' => "Big Red", 'price' => 575);
$product[...] = array('name' => "...", 'price' => ...);
$product[15] = array('name' => "Small Green", 'price' => 475);

foreach ($_POST['product'] as $pId)
{
    echo $products[$pId]['name'] . " costs " . $products[$pId]['price'];
}
?>

もちろん、配列がデータベースに由来する場合は、チェックボックスの値としてテーブルのIDを使用できます。次に、$ _ POST ['product']を(もちろんエスケープした後)コンマでインプロポーズし、SELECT ... WHERE ID IN ($productIds)クエリで使用できます。

于 2012-04-27T17:42:59.043 に答える
1

私があなたを正しく理解している場合、次のようなチェックボックスがあります。

<input type="checkbox" name="product_id[]" value="1">Product #1<br/>
<input type="checkbox" name="product_id[]" value="2">Product #2<br/>
<input type="checkbox" name="product_id[]" value="3">Product #3<br/>

これにより、チェックされたものはすべて配列としてサーバーに投稿されます。

于 2012-04-27T17:46:35.087 に答える