2

私はファンタジーペットゲームをプログラミングしています。現在、ユーザーが個人ショップの在庫を管理するのに役立つツールに取り組んでいます。このツールには、各アイテムの販売価格を変更するオプションが含まれています。それが私の問題です。ここで、お見せしましょう:

HTML

<form method="post">
<input type="text" name="cost[$item_id]" value="" />
<input type="submit" name="submit" value="Submit" />
</form>

$item_id は、編集中のアイテムに対応する変数です。そうしないと、どの価格がどのアイテムに対応するのかわかりません。

また、このスクリプト:

<input type="text" name="cost[$item_id]" value="" />

ショップの在庫にある商品の数だけ繰り返されます。したがって、フォームにはこれらのエントリを無制限に含めることができます。したがって、配列。

スクリプト

if(isset($_POST['update'])) {

foreach ($_POST['cost'] as $key => $value) {
$submitted_array = array_keys($_POST['cost']); 
echo ($_POST['cost'][$submitted_array[0]] . " " . $submitted_array[0]); 
}

}

上記のスクリプトは機能します...ただし、配列の最初のデータ セットのみを出力します。

これで問題ないように思えますが、コスト エントリを無制限に作成できると言ったことを覚えていますか? それが私の問題です。変数を使用して上記のスクリプトの「0」を置き換えると、関数が一緒に機能しなくなります。配列に含まれるエントリの総数がわかっている場合は、関数を繰り返すことができますが、わかりません。それで、なにかお手伝いできますか?私の問題に対する簡単な解決策はありますか?

変更される項目の数を指定する隠しフィールドをフォームに追加することは可能です。それが役立つかどうかはわかりません。

私が話していることをよりよく理解するためにフォームのスクリーン キャプションを見たい場合は、お尋ねください。

4

1 に答える 1

5

$submitted_arrayこれは、一度だけ必要なときに、変数を複数回書き換えているためです。

if (isset($_POST['update'])) {
    $submitted_array = array_keys($_POST['cost']);
    foreach ($_POST['cost'] as $key => $value) {
        echo ($_POST['cost'][$submitted_array[0]] . " " . $submitted_array[0]);
    }
}

また、配列を考慮すると、まったくcost使用する必要はありません。array_keys

if (isset($_POST['update'])) {
    foreach ($_POST['cost'] as $item_ID => $item_cost) {
        echo ($item_ID . " " . $item_cost);
    }
}
于 2012-07-28T22:05:16.287 に答える