提交表单后保留选定的值

时间:2019-04-21 16:09:08

标签: php html html5 forms

我有选择菜单,该菜单从txt文件获取值。我希望所选的值即使在提交表单后也保持选中状态。

<?php
$filename = 'select.txt';
$eachlines = file($filename, FILE_IGNORE_NEW_LINES);
?>

<form action="#" method="post">
    <select id="toolchain" name="toolchain" onchange='this.form.submit()'>
         <option selected value="base">Please Select</option>
          <?php foreach($eachlines as $lines){ 
                echo "<option value='".$lines."'>$lines</option>";
          }?>
    </select>
</form>

为了保持选择的值,我尝试了此操作:

<?php foreach($eachlines as $lines){ 
   echo "<option value='".$lines."'" if($_POST['$lines']) echo $_POST['$lines'];">$lines</option>";
}?>

但是它不起作用,可能是我在回声内部使用了回声。请纠正我。

2 个答案:

答案 0 :(得分:1)

您可以使用此代码。尽管我尚未测试代码,但让我与您分享我的逻辑,以使您更好地理解它。我添加了一个条件,即如果提交了表单,则它应显示选中了$_POST['toolchain']的表单,否则应以常规方式显示它。

<?php
$filename = 'select.txt';
$eachlines = file($filename, FILE_IGNORE_NEW_LINES);
if(isset($_POST['toolchain'])
{
 ?>
  <form action="#" method="post">
  <select id="toolchain" name="toolchain" onchange='this.form.submit()'>
    <option selected value="<?php echo $_POST['toolchain']; ?>"><?php echo $_POST['toolchain']; ?></option>
     <?php foreach($eachlines as $lines){ 
       if($lines!=$_POST['toolchain'])
        echo "<option value='".$lines."'>$lines</option>";
     }?>
  </select>

 </form>
 <?php }
else{
?>

<form action="#" method="post">
 <select id="toolchain" name="toolchain" onchange='this.form.submit()'>
     <option selected value="base">Please Select</option>
      <?php foreach($eachlines as $lines){ 
            echo "<option value='".$lines."'>$lines</option>";
      }?>
 </select>

</form>
 <?php }
 ?>

这是正常但漫长的方法。您还可以在表单内部添加条件。如果提交表单意味着if(isset($_POST['toolchain'])),则可以在option循环内为$_POST['toolchain']选择foreach

更新

我已将条件放入表格中。如果您因为我尚未测试代码而遇到任何错误,请进行更新

    <?php
$filename = 'select.txt';
$eachlines = file($filename, FILE_IGNORE_NEW_LINES);
?>
<form action="#" method="post">
 <select id="toolchain" name="toolchain" onchange='this.form.submit()'>
   <?php if(isset($_POST['toolchain']))
      {
        ?>
        <option value="base">Please Select</option>
        <?php foreach($eachlines as $lines){
            if($_POST['toolchain']==$lines))
            {
              echo "<option selected value='".$lines."'>$lines</option>";
            }
            else {
              echo "<option value='".$lines."'>$lines</option>";
            }
      }
   }
   else {

   ?>
     <option selected value="base">Please Select</option>
      <?php foreach($eachlines as $lines){
            echo "<option value='".$lines."'>$lines</option>";
      }
    }
    ?>
 </select>

</form>

答案 1 :(得分:0)

像这样更改代码

<?php foreach($eachlines as $lines){ 
    echo '<option value="'.$lines.'" '.($_POST['$lines'] ? $_POST['$lines'] :"").'>'.$lines.'</option>';
}?>