根据用户之前的选择将选定内容添加到选项下拉列表中

时间:2011-10-10 19:55:00

标签: php

在供应商下拉菜单中,我需要根据用户在上一屏幕输入的内容动态添加“已选择”。我有我认为循环基本上看起来像但我不能让它工作。任何帮助将不胜感激,我看了其他的例子,但他们不是这样的。这是我的代码:

 <?php  
 $set_date =$_POST['set_date'];
 include "../include/setup.inc.php";
 $query="select * from quote_distro where set_date ='2011-10-05'";
 $result = mysql_query($query);
  if (!$result) {echo "<p><b>".$query ."</b></p>";echo 'MySQL Error: ' . mysql_error(); return;}
echo '<br /><br />';
echo '<form name="edit_quote_setting_'.$row['qdid'].'" action="'.$self.'" method="post"><table align="center" border="1" width="800px">
               <tr><td width="10%">Email:</td><td width="20%"><input type="text" MAXLENGTH=40 size="30" name="email" value="'.$row['agent_email'].'"></td>
                <td width="10%">#Quote:</td><td width="10%"><input type="text" MAXLENGTH=4 size="3" name="num_quote" value="'.$row['num_quote'].'"></td>
                </td><td width="10%">Vendor</td><td width="40%"><select id="vendor1" name="vendor[1]">      
                        <option value="Regent Seven Seas Cruises"'.test().'>Regent</option>
                        <option value="Silversea Cruises">Silversea</option> 
                        <option value="Oceania Cruises">Oceania</option> 
                        <option value="Windstar Cruises">Windstar</option>
                        <option value="Paul Gauguin Cruises">Paul Gaugin</option>
                        <option value="all"> - No Preference - </option>
                        </select></td>
                <td><input name="qdid" type="hidden" value="'.$row['qdid'].'" />
                <input name="submit" id="submit" type="submit"  class="go" value="Update Quote Setting" />
                </tr></form><table>';           
        }
        function test(){
        $vensel = $row['vendor'];
        if($vensel = "Regent Seven Seas Cruises" ){ echo "selected" }
        }//etc for each option
                ?>

2 个答案:

答案 0 :(得分:2)

你的代码可以使用一些重新设计,但是这里有一个建议:开始你的巡航线阵列,迭代那个数组输出标签,并让你的逻辑来确定在那里选择哪个。

$array = array('Regent Seven Seas Cruises', 'Silversea Cruises', 'etc');
foreach ($array as $cruise) {
    echo "<option value=\"$cruise\"";
    if ($row[vendor] == $cruise) echo ' selected="selected"';
    echo ">$cruise</option>";
}

答案 1 :(得分:1)

你非常接近。尝试像这样调用test

'<option value="Regent Seven Seas Cruises"'.test($row['vendor'],"Name of Cruise").'>Regent</option>'

然后像这样实施test

function test($vensel,$cruisename){
    if($vensel == $cruisename){ 
        return "selected"; 
    }
    else
    {
        return "";
    }
}

还有其他方法可以做到这一点,但这种方式需要对当前代码进行最少的更改。您的代码存在的问题是变量有scope,除非您将它们作为参数传递,否则无法在创建它们之外访问它们。

编辑:

这是另一种方法。只需将下面的内容直接放在代码中,而不是放在方法中。如果您需要将其放在方法中,请将$row['vendor']作为参数传递。

$values = array('Regent Seven Seas Cruises','Silversea Cruises','Oceania Cruises','Windstar Cruises','Paul Gauguin Cruises','all'); 
$texts = array('Regent Seven Seas','Silversea','Oceania','Windstar','Paul Gauguin ',' - No Preference - ');
$len=min(count($values),count($texts));
for($i=0;$i<$len;$i++)
{
  echo '<option value="' . $values[$i] . '"';
  if($cruise == $row['vendor'])
  {
      echo ' selected';
  } 
  echo '>';
  echo $texts[$i];
  echo '</option>';
}