首先回显所选值

use*_*279 1 html php forms html-select

当用户想要更新时,我需要首先在表单中回显所选值。我尝试了几种变体:

1)

<?php 
  $opt= array('1' => 'opt1', '2' => 'opt2', '3' => 'opt3') ;
  echo '<select name="up_opt" >' ;

  foreach ($opt as $i => $value) {
    echo "<option value=\"$i\"";
    if ($_REQUEST['up_opt'] == $i) 
    {
      echo "selected" ; 
    }
    echo ">$opt[$i]</option>" ;
  }
  echo '</select>' ;
?>
Run Code Online (Sandbox Code Playgroud)

2)

<?php $opt= array('1' => 'opt1', '2' => 'opt2', '3' => 'opt3') ;
  $edu = $_REQUEST['edu']; 
  <select name="up_opt">     
    <?php foreach ( $opt as $i=>$opt ) : ?>       
      <option value="<?php echo $i?>" <?php echo $i == $edu ? 'selected' : ''?>><?php echo $opt ?></option>
    <?php endforeach; ?>
  </select>
Run Code Online (Sandbox Code Playgroud)

3)

<select name="up_opt">
    <option value="1" <?php if ($_GET['1'] == 'option1') { echo 'selected'; } ?>>Opt1</option>
    <option value="2" <?php if ($_GET['2'] == 'option2') { echo 'selected'; } ?>>Opt2</option>
    <option value="3" <?php if ($_GET['3'] == 'option3') { echo 'selected'; } ?>>Opt3</option>
 </select>
Run Code Online (Sandbox Code Playgroud)

这些变体都不会首先回显检查的值。有人可以帮助我,告诉我出了什么问题或者给我另一个变体吗?

Has*_*ast 5

变体 3 可以(但我宁愿使用循环而不是硬编码选项)。您的错误是,当您的实际值为“1”、“2”、“3”时,您比较“选项1”、“选项2”等。另外,正如@ElefantPhace所说,不要忘记selected之前的空格,否则你会得到无效的html。所以会是这样的:

<select name="up_opt">
    <option value="1" <?php if ($_GET['up_opt'] == 1) { echo ' selected="selected"'; } ?>>Opt1</option>
    <option value="2" <?php if ($_GET['up_opt'] == 2) { echo ' selected="selected"'; } ?>>Opt2</option>
    <option value="3" <?php if ($_GET['up_opt'] == 3) { echo ' selected="selected"'; } ?>>Opt3</option>
</select>
Run Code Online (Sandbox Code Playgroud)

带循环:

<?php

$options = array(
    1 => 'Opt1',
    2 => 'Opt2',
    3 => 'Opt3',
);

?>

<select name="up_opt">
<?php foreach ($options as $value => $label): ?>
    <option value="<?php echo $value; ?>" <?php if ($_GET['up_opt'] == 1) { echo ' selected="selected"'; } ?>><?php echo $label; ?></option>
<?php endforeach ?>
</select>
Run Code Online (Sandbox Code Playgroud)