首先回应选定的值

时间:2014-02-12 17:21:24

标签: php html 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>' ;
?>

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>

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>

这些变体都不会首先回显检查值。有人可以帮助我,告诉我什么是错的或给我另一个变种?

2 个答案:

答案 0 :(得分:2)

变体3没问题(但我宁愿使用循环而不是硬编码选项)。你的错误是你比较'option1','option2',那么你的实际值是'1','2','3'。另外正如@ElefantPhace所说,不要忘记选择之前的空格,否则你会得到无效的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>

使用循环:

<?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>

答案 1 :(得分:0)

以下是您的所有三种变体,经过测试并按预期工作。它们基本上都是一样的,你只是使用了错误的变量名,而不是从示例到示例


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 ($_POST['up_opt'] == $i){
            echo " selected"; 
        }
        echo ">$value</option>";
    }
    echo '</select>';
?>

2)使用与上面相同的数组

$edu = $_POST['up_opt']; 
echo '<select name="up_opt">';
foreach ( $opt as $i => $value ){       
    echo "<option value=\"$i\"", ($i == $edu) ? ' selected' : '';
    echo ">$value</option>";
}
echo "</select>";

3)

echo '<select name="up_opt">';
echo '<option value="1"', ($_POST['up_opt'] == '1') ? 'selected':'' ,'>Opt1</option>';
echo '<option value="2"', ($_POST['up_opt'] == '2') ? 'selected':'' ,'>Opt2</option>';
echo '<option value="3"', ($_POST['up_opt'] == '3') ? 'selected':'' ,'>Opt3</option>';
echo '</select>';