【问题标题】:Programmatically generating a drop-down menu以编程方式生成下拉菜单
【发布时间】:2012-11-22 01:50:57
【问题描述】:

我在下面有一个下拉菜单:

  $form = "
<form action='" . htmlentities($_SERVER["PHP_SELF"]) . "' method='post'>
  <table>
  <tr>
  <td><select name='year' id='yearDrop'>
<option value=''></option>
<option value='$getyear[1]'>1</option>
<option value='$getyear[2]'>2</option>
<option value='$getyear[3]'>3</option>
<option value='$getyear[4]'>4</option>
<option value='$getyear[5]'>5</option>
<option value='$getyear[6]'>6</option>
<option value='$getyear[7]'>7</option>
<option value='$getyear[8]'>8</option>
<option value='$getyear[9]'>9</option>
<option value='$getyear[10]'>10</option>
</select></td>
</tr>
</table>
</form>
";

请注意,下拉菜单位于表单中的 php 变量中。我的问题是:“有没有更好更短的方法来显示上面的下拉菜单?”。也许通过使用某种循环来遍历每个值并为每个选项提供相同的value 属性?

我想使用getyear 来适应一个简单的 if 语句:

    if ($getyear){
    echo "year is chosen";
    }else{
    $errormsg = "You must enter in Student's current Academic Year to Register";
              }

更新:

<?php  

  $getyear = (isset($_POST['year'])) ? $_POST['year'] : '';
  $errormsg = (isset($errormsg)) ? $errormsg : '';

$min_year = 1;
$max_year = 10;
$years = range($min_year, $max_year); // returns array with numeric values of 1900 - 2012
$yearHTML = '';
$yearHTML .= '<select name="year" id="yearDrop">'.PHP_EOL; 
$yearHTML .= '<option value="">Please Select</option>'.PHP_EOL;  
foreach ($years as $year) {
    $yearHTML .= "<option>$year</option>".PHP_EOL;  // if no value attribute, value will be whatever is inside option tag, in this case, $year
}
$yearHTML .= '</select>'; 

  if( (isset($_POST['registerbtn']))){
      $getyear = $_POST['year'];

      if (!in_array($getyear , $years)){
      echo "year is chosen";
                    }else{
              $errormsg = "You must enter in Student's current Academic Year to Register";
          }

            }

  $form = "
<form action='" . htmlentities($_SERVER["PHP_SELF"]) . "' method='post'>
  <table>
  <tr>
  <td></td>
  <td id='errormsg'>$errormsg</td>
  </tr>
  <tr>
  <td>Year:</td>
  <td>{$yearHTML}</td>
  <td><input type='text' name='year' value='$getyear' /></td>
  </tr>
  <tr>
  <td></td>
  <td><input type='submit' value='Register' name='registerbtn' /></td>
  </tr>
  </table>
  </form>";

  echo $form;

?>

【问题讨论】:

  • 您所有的选项值...都一样吗?还是我在这里遗漏了一些基本的东西......
  • 我认为您正在寻找一个复选框。
  • @RussellDias 我不确定是否允许我对每个选项使用相同的值。有没有一种方法可以通过使用维度数组来让每个选项都包含自己的值,例如$getyear[1], $getyear[2] $getyear[1] 等等。如果是这样,那么我应该在 if 语句中写什么来查看是否选择了下拉菜单中的值?
  • 给每个选项相同的值属性相当于只给用户一个选项。 $getYear 代表什么?
  • @moonDogDog 我将编辑代码以给每个下拉菜单一个不同的值,请问如果更新后的值应该是什么语句?

标签: php html


【解决方案1】:

foreach 循环在遍历数组并对它们的值执行操作时非常有用。

foreach control structure

<?php
// reference values for output and for validation later
$min_year = 1900;  // using as an example
$max_year = 2012;
$years = range($min_year, $max_year); // returns array with numeric values of 1900 - 2012

// for HTML output
if (empty($_POST)) {  // display form
    $html = '';
    foreach ($years as $year) {
        $html .= "<option>$year</option>";  // if no value attribute, value will be whatever is inside option tag, in this case, $year
    }
    // output HTML
    echo $html;
} else {  // process form
    $chosen_year = isset($_POST['year']) ? $_POST['year'] : "";
    if (!in_array($chosen_year , $years) {  // year is invalid
        $errormsg = "You must enter in Student's current Academic Year to Register";
    } else {  // year is chosen
        echo 'year is chosen';
    }
}

【讨论】:

  • 只是一个简单的问题,在页面顶部我需要包含一个 isset,所以 isset 可以看起来完全像这样:` $getyear = (isset($_POST['year'])) ? $_POST['year'] : '';` 这样我就不会得到未定义的索引
  • 如果您的表单中有一个以“年份”作为名称属性的选择选项,那么用户是否输入任何内容都无关紧要。从您上面的问题中的样子来看,默认选项将是一个空字符串,因为它是列表中的第一个选项。换句话说,如果 $_POST 不为空并且您的表单已提交,则您的年份索引将在那里。话虽如此,万一 JavaScript 或其他东西删除它肯定不会有什么坏处,所以我修改了答案以反映这种预防措施。
  • 我在我的代码问题中包含了一个更新,我似乎还没有让它工作,你能看看我哪里出错了,因为我不知道在哪里我错了
  • 如果你想使用 $getyear 作为条件语句的测试,那么你可以使用 $getyear = in_array($_POST['year'], $years),它返回布尔值 true 或 false .然后你可以简单地使用 if ($getyear) echo 'year is selected';。您的脚本到底发生了什么?
  • 你解决了这个问题没关系。它返回了问题所在的布尔值,我已经标记了你的答案。
【解决方案2】:

此文件将自动生成select 选项,并为您提供一个方便的地方进行进一步处理。

function process_form(){
    if(!isset($_POST['year']) || !is_numeric($_POST['year'])){
        // Form invalid
        return false;
    }

    $year   = $_POST['year'];

    // Perform actions - save to database, etc..?

    // Form valid
    return true;
}

$error  = false;
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    // Form submitted
    $result = process_form();
    if($result){
        ?>
        <p>Valid year selected</p>
        <?php
        exit;
    }

    $error  = true;
}
?>
<form action="" method="post">
<?php if($error){ ?>
    <p class="error">You must select the student's current academic year to register</p>
<?php } ?>
<label for="select_year">Academic Year:</label>
<select name="year" id="select_year">
    <option value=""></option>
    <?php for($year = $start_year; $year <= $end_year; $year++){ ?>
        <option value="<?php echo $year;?>"><?php echo $year;?></option>
    <?php } ?>
</select>

<button type="submit">Register</button>
</form>

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2014-05-15
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多