Php 以编程方式生成下拉菜单

Php 以编程方式生成下拉菜单,php,html,Php,Html,我在下面有一个下拉菜单: $form = " <form action='" . htmlentities($_SERVER["PHP_SELF"]) . "' method='post'> <table> <tr> <td><select name='year' id='yearDrop'> <option value=''></option> <option value='$getyea

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

  $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  

  $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;

?>

在数组上循环并对其值执行操作时,
foreach
循环非常有益


在数组上循环并对其值执行操作时,
foreach
循环非常有益


此文件将自动生成
选择
选项,并为您提供进行进一步处理的方便位置。
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>
函数过程\u form(){
如果(!isset($_POST['year'])是数字($_POST['year'])){
//表格无效
返回false;
}
$year=$_POST['year'];
//执行操作-保存到数据库等。。?
//形式有效
返回true;
}
$error=false;
如果($\u服务器['REQUEST\u METHOD']=='POST'){
//提交的表格
$result=process_form();
如果($结果){
?>
选择的有效年份

您必须选择学生的当前学年进行注册

学年:
此文件将自动生成
选择
选项,并为您提供一个进行进一步处理的方便位置。
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>
函数过程\u form(){
如果(!isset($_POST['year'])是数字($_POST['year'])){
//表格无效
返回false;
}
$year=$_POST['year'];
//执行操作-保存到数据库等。。?
//形式有效
返回true;
}
$error=false;
如果($\u服务器['REQUEST\u METHOD']=='POST'){
//提交的表格
$result=process_form();
如果($结果){
?>
选择的有效年份

您必须选择学生的当前学年进行注册

学年:

您所有的选项值…都是相同的吗?或者我在这里遗漏了一些基本的东西…我想您是在寻找一个复选框。@RussellDias我不确定是否允许我对每个选项使用相同的值。是否有一种方法可以使每个选项通过使用维度数组(例如,
$getyear[1]
$getyear[2]来包含自己的值
$getyear[1]
等。如果是,那么我应该在If语句中写些什么来查看是否选择了drop dowm菜单中的值?为每个选项赋予相同的value属性相当于只给用户一个选项。$getYear代表什么?@moonDogDog我将编辑代码,为每个下拉列表赋予不同的值,我可以问If语句应该是什么吗那么,您是否有更新的值?您所有的选项值……都是相同的?或者我在这里遗漏了一些基本内容……我想您是在寻找一个复选框。@RussellDias我不确定是否允许我对每个选项使用相同的值。是否有一种方法可以通过使用维度数组(例如,
$getyear[1])使每个选项包含自己的值
$getyear[2]
$getyear[1]
等。如果是,那么我应该在If语句中写些什么来查看是否选择了drop dowm菜单中的值?为每个选项赋予相同的value属性相当于只给用户一个选项。$getYear代表什么?@moonDogDog我将编辑代码,为每个下拉列表赋予不同的值,我可以问If语句应该是什么吗那么,我是否需要更新值?只需一个简单的问题,在页面顶部,我需要包含一个isset,所以isset是否可以完全像这样:`$getyear=(isset($\u POST['year'])?$\u POST['year']:'';如果有一个带有“year”的选择选项,我就不会得到未定义的索引作为表单中的name属性,用户是否输入了任何内容都无关紧要。从上面的问题来看,默认选项将是一个空字符串,因为它是列表中的第一个选项。换句话说,如果$\u POST不为空并且您的表单已提交,您的年份索引将在那里。也就是说,我如果JavaScript或其他东西删除了它,我当然不会有什么坏处,所以我修改了答案以反映这一预防措施。我在我的代码问题中包含了一个更新,我似乎还没有完全正常工作,你能看看我哪里出了错,因为如果你想使用$getyear作为代码,我不知道哪里出了错测试一个条件语句,然后您可以在数组中使用$getyear=($\u POST['year',$years),它返回布尔值true或false。然后您只需使用if($getyear)echo“year is Selected”;。你的脚本到底发生了什么?没关系,你解决了问题。它返回的是布尔值,这是问题所在,我已经标记了你的答案。只需一个简单的问题,在页面顶部,我需要包含一个isset,所以isset是否可以像这样显示:“$getyear=(isset($\u POST['year'])?$\u POST['year']:“”;`这就是为什么我不会得到未定义的索引如果有一个带有“year”的select选项作为表单中的name属性,用户是否输入了任何内容都无关紧要。从上面的问题来看,默认选项将是一个空字符串,因为它是列表中的第一个选项。换句话说,如果$\u POST不为空并且您的表单已提交,您的年份索引将在那里。也就是说,我如果JavaScript或其他东西删除了它,我当然不会有什么坏处,所以我修改了答案以反映这一预防措施。我在我的代码问题中包含了一个更新,我似乎还没有完全正常工作,你能看看我哪里出了错,因为如果你想使用$getyear作为代码,我不知道哪里出了错测试一个条件语句,然后你可以在数组中使用$getyear=in_($_POST['year',$years),它返回布尔值true或false。然后你可以简单地使用($getyear)echo'year's Selected';。你的脚本到底发生了什么?没关系,你解决了这个问题。它返回的是布尔值,这就是问题所在,我已经标记了你的答案。
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>