0

最初のドロップダウンボックスが選択された後、2番目のドロップダウンボックスにデータを入力するために使用している次のコードがあります(実際にはすべてすでに作成されており、最初のドロップダウンに基づいて正しいものが表示されます:

<tr><th>Customer</th><td>
        <select name='customer_id' id='customer_id'>
            <option value=''>-- Select Customer --</option>
            <?php
            $results = Misc::customerDropDown();
            while ($row = mysql_fetch_array($results)) {
                echo "<option value='" . $row['customer_id'] . "'>" . $row['customer_name'] . "</option>";
            }
            ?>
        </select><span class='error'>&nbsp;*&nbsp;<?php echo $errors['customer_id']; ?></span>
    </td></tr>
<?php
$results = Misc::customerDropDown();
$num_customers = mysql_num_rows($results);
$n = 1;
while ($row = mysql_fetch_array($results)) {
    ?>
    <tr class='locations' id='locations<?= $row['customer_id'] ?>'><th>Customer Location</th><td>
            <select name='customer_location<?= $n ?>'>
                <option value=''>-- Customer Locations --</option>
                <?
                $location_results = Misc::locationDropDown($row['customer_id']);
                while ($option = mysql_fetch_array($location_results)) {
                    echo "<option value='" . $option['location_id'] . "'>" . $option['location_name'] . "</option>";
                }
                ?>
            </select><span class='error'>&nbsp;*&nbsp;<?php echo $errors['customer_location']; ?></span></td></tr>                                   
    <? $n++;
} ?> 

私が抱えている問題は、最後の「customer_location」ドロップダウンを何を試しても、送信すると他の2つが上書きされるため、常に使用されるということです。

customer_locationを配列(customer_location [])にしようとしましたが、それでは、(たとえば)3つの要素を持つ配列ではなく3つの配列があると思われます。また、(示されているように)それぞれの末尾に$ nを付けて場所に名前を付けようとしましたが、投稿を参照するときに、参照できないため、方法がわかりません。$_POST['customer_location$n']

アイデア?

4

2 に答える 2

2

ドロップダウンが表示されているかどうかに関係なく、ドロップダウンはフォームの一部です。そして、それらの値は送信時にサーバーにポストバックされます。クライアント側でロジックを使用して表示されるドロップダウンを決定しているため、サーバー側で同じロジックを使用して、取得するドロップダウンの値を決定する必要があります。

$_POST['customer_location1']、、などを参照できます$_POST['customer_location2']

タイプミスにも気づきました。最後の部分は次のようになります。

<?php
    $results = Misc::customerDropDown();
    $num_customers = mysql_num_rows($results);
    $n=1;
    while($row = mysql_fetch_array($results)){
        ?>
        <tr class='locations' id='locations<?=$row['customer_id']?>'>
                <th>Customer Location</th>
                <td>
                    <select name='customer_location<?=$n?>'>
                        <option value=''>-- Customer Locations --</option>
                        <?
                        $location_results = Misc::locationDropDown($row['customer_id']);
                        while($option = mysql_fetch_array($location_results)){
                            echo "<option value='".$option['location_id']."'>".$option['location_name']."</option>";
                        }
                        ?>
                    </select>
                    <span class='error'>&nbsp;*&nbsp;<?php echo $errors['customer_location'.$n]; ?></span>
                </td>
            </tr>
        <?
        $n++;
    }
?>

クロージングtdtrループにある必要があります。そして、$errorsおそらくを含める必要があります$n

編集

たとえば、ドロップダウン1は次のようになります。

<select id='dd'>
   <option value='1'>1</option>
   <option value='2'>2</option>
   <option value='3'>3</option>
</select>

jqueryには、正しいドロップダウンを示す変更ハンドラーがあります(この部分は実際にはこの正確な例でのみ機能しますが、すでにこの部分が機能していると言ったので、私はそれを詳しく説明しています...基本的に'正しいドロップダウンを表示するロジック')。

$("#dd").change(function() {
   var dd = $(this).val();
   $("#dd1").hide();
   $("#dd2").hide();
   $("#dd3").hide();
   $("#dd" + val).show();
});

次に、非表示になっている3つのドロップダウンがあります。

<select id='dd1' style='display: none;'>
   <option value='1'>1</option>
   <option value='2'>2</option>
   <option value='3'>3</option>
</select>
<select id='dd2' style='display: none;'>
   <option value='1'>1</option>
   <option value='2'>2</option>
   <option value='3'>3</option>
</select>
<select id='dd3' style='display: none;'>
   <option value='1'>1</option>
   <option value='2'>2</option>
   <option value='3'>3</option>
</select>

次に、でオプション2を選択します#dd#dd2が表示されたら、オプション1を選択し、[送信]をクリックします。次に、phpコードで(私のphpは少し錆びているかもしれません):

$val = $_POST['dd'];
$ddval = '';

if ($val == '1') {
   $ddval = $_POST['dd1'];
} else if ($val == '2') {
   $ddval = $_POST['dd2'];
} else if ($val == '3') {
   $ddval = $_POST['dd3'];
} 
于 2012-08-12T03:52:11.193 に答える
0

@Barmarからのヒント(コメントを参照)に基づいて、ソリューションをつなぎ合わせて、必要な入力の値を見つけて割り当てることができました。

// Figure out which customer_location$n to use
                foreach ($_POST as $key=>$value){ 
                 if (preg_match('/^customer_location/', $key)){ 
                  if($value!=NULL){ $location = $value; }
                 }
                }
于 2012-08-12T04:22:46.270 に答える