0

編集リンクのあるレコードのリストがあります。リンクをクリックすると、データベースからの結果を含む編集ページが表示されます。

すべてのテキスト ボックスのデータを正常に取得できます。

機能しない配列を介してこれを実装しようとしています。

コードフラグメントでの私の実装は次のとおりです。

        # $data is from $data=mysqli_fetch_array($result)


                        $product=$data['product'];
                        echo $product.'<br />';

        #initializing array to empty
           $product_list=array("Remote"=>" ","TV"=>" ","Box"=>" ");

        if (array_key_exists($product,$product_list)){


            $product_list["'$product'"] =  'selected="selected" ';


            }

                            print_r($product_list);


        #combo box 

              <select name="products">
                        <option value="select">Select</option>
                        <option value="Remote"<?php echo @$product_list["'$product'"] ?>>Remote</option>
                        <option value="TV" <?php echo @$product_list["'$product'"] ?>> TV</option>
                        <option value="Box" <?php echo @$product_list["'$product'"] ?>> Box</option>
                    </select>

製品「リモート」を持つレコードで編集をヒットすると、すべてのレコードを表示するページで、次の出力が得られます (上記のエコーステートメントに従って):

Remote
Array ( [Remote] => [TV] => [Box] => ['Remote'] => selected="selected" ) 

HTML フォームが表示されます。

 <select name="products">                   
    <option value="select">Select</option>
        <option selected="selected" value="Remote">Remote</option>
        <option selected="selected" value="TV"> TV</option>
        <option selected="selected" value="Box"> Box</option>
</select>

編集ページで、製品「TV」を持つレコードを選択すると、次の出力が得られます。

 TV
 Array ( [Remote] => [TV] => [Box] => ['TV'] => selected="selected" ) 

HTML出力は上記と同じです。そして、オプションは常に「ボックス」である最後の製品に設定されます。

誰かがこれを修正する方法についてアドバイスできますか? ありがとう!

4

1 に答える 1

1

これ:

$product_list["'$product'"] =  'selected="selected" ';

する必要があります

$product_list[$product] =  'selected="selected" ';

また、他の場所で$product_list["'$product'"]も引用符を削除する必要があります。

編集:

ここ

<select name="products">
    <option value="select">Select</option>
    <option value="Remote"<?php echo @$product_list["'$product'"] ?>>Remote</option>
    <option value="TV" <?php echo @$product_list["'$product'"] ?>> TV</option>
    <option value="Box" <?php echo @$product_list["'$product'"] ?>> Box</option>
</select>

ループを使用しておらず$product_list[$product]、すべてのアイテムの値を取得しようとしています- $product は常にすべての行で同じであり、mysql からフェッチされた最後のものと等しくなります。

各行で正しいインデックスを使用するか(つまり<?php echo $product_list['TV']; ?>)、適切な方法で使用する必要があります-ループを使用します:

<select name="products">
    <option value="select">Select</option>
    <?php foreach($product_list as $product_name => $selected): ?>
    <option value="<?= $product_name ?>" <?= $selected ?>><?= $product_name ?></option>
    <?php endforeach; ?>
</select>
于 2012-05-13T08:10:41.300 に答える