2
echo "<td>Language</td>";
echo "<td><select id='language' name='language'>
            <option value=''>Select...</option>
            <option value='en_US'>English(US)</option>
            <option value='en_AU'>English(AU)</option>
            <option value='en_US'>English(UK)</option>
          </select>
      </td>";   

我将该代码片段包含在表单中以发布 php 文件,当我选择提交表单时,我可以看到这些选项。但是,在我单击按钮保存我选择的内容后,无论如何,上面的语言总是设置为第一个选项(en_US)。

4

2 回答 2

3

您需要检查您上次提交的值以确定哪个选项应该接收该selected属性。您目前没有这样做,因此浏览器将第一个选项设置为选定的选项。

// Define all languages
$l = array('en_US'=>'English(US)','en_AU'=>'English(AU)','en_UK'=>'English(UK)');

// Prepare an options variable
$o = "";

// Construct our options list
foreach ( $l as $k => $v )
  $o .= sprintf("<option value='%s'%s>%s</option>", 
          $k, $k === $_POST["language"] ? " selected" : "", $v);

// Echo our Select menu
echo "<select id='language' name='language'>$o</select>";

演示:http ://codepad.org/PkwNYHbO

于 2012-05-15T02:56:13.677 回答
0
$selected = $_POST["language"];

echo "<td><select id='language' name='language'>
            <option value='' ".($selected==""?"selected":"").">Select...</option>
            <option value='en_US' ".($selected=="en_US"?"selected":"").">English(US)</option>
            <option value='en_AU' ".($selected=="en_AU"?"selected":"").">English(AU)</option>
            <option value='en_US' ".($selected=="en_US"?"selected":"").">English(UK)</option>
          </select>
      </td>";  

我通常会做这样的事情。第一部分获取发送到服务器的语言值,然后检查每个选项是否具有相同的值,然后将“选定”放入具有相同值的元素。

万一,($selected=="en_US"?"selected":"")意味着,如果当前选择的语言是“en_US”,“selected”将作为它的属性连接到标签,从而给出输出:

<option value='en_US' selected>English(US)</option>

或者你可以做乔纳森的解决方案,它更优雅。

于 2012-05-15T03:02:13.730 回答