0

在选择第一个下拉框后,我有以下代码用于填充第二个下拉框(实际上它们都已经制作好了,它只是根据您的第一个下拉列表显示正确的下拉框:

<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”下拉列表总是会被使用,因为当它提交时(我相信)会覆盖另外两个。

我尝试将 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++;
    }
?>

关闭td并且tr需要在循环中。并且$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();
});

然后你就得到了隐藏的三个下拉菜单:

<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 回答