创建类似的下拉列表时如何避免重复的代码


How to avoid a repetitive code when creating similar dropdown lists?

下面是我创建下拉列表的代码,我能够从MySQL中检索数据,但我必须为每个字段重复选项步骤,如何为下拉列表设置代码,以便我可以缩短在选择列表中调用它一次,就像在for循环中一样。另外,如果没有选择,以及从数据库中存储的列表中选择数据,如何创建要显示的错误消息

 <form action="sign.php" method="post">
 <label for="employee_name">Employee name</label>
 <select name = "employee_name">
 <option value=""> -----------Select----------- </option> 
 <?php
 $stmt = $pdo->prepare('Select name from people');
 $stmt->execute();
 while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
 echo '<option>'.$row['name'].'</option>';
 }
 ?>
 </select> 
 <label for="manager">manager</label>
 <select name = "manager">
 <option value=""> -----------Select----------- </option> 
 <?php
 $stmt = $pdo->prepare('Select name from people');
 $stmt->execute();
 while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
 echo '<option>'.$row['name'].'</option>';
 }
 ?>
 </select> 
 <label for="senior">Senior</label>
 <select name = "Senior">
 <option value=""> -----------Select----------- </option> 
 <?php
 $stmt = $pdo->prepare('Select name from people');
 $stmt->execute();
 while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
 echo '<option>'.$row['name'].'</option>';
 }
 ?>
 </select> 
 <input type="submit" name="register" value=" Click to Add"></button>
 </form>

使用数组并运行一次查询来设置数组中的选项。

<?php
$optionArray = array();
 $stmt = $pdo->prepare('Select name from people');
 $stmt->execute();
 while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $optionArray[] = '<option value="'.$row['name'].'">'.$row['name'].'</option>';
 }
 ?>
<form action="sign.php" method="post">
 <label for="employee_name">Employee name</label>
 <select name = "employee_name">
 <option value=""> -----------Select----------- </option> 
 <?php
foreach($optionArray as $row)
{
    echo $row;
}
 ?>
 </select>

如何为下拉列表设置代码,以便我可以缩短在选择列表中调用它一次,就像在 for 循环中一样。

只需创建一个循环。 虽然它应该是foreach,而不是for。

首先收集您的数据,

$people = $pdo->query('Select name from people order by name')->fetchAll(PDO::FETCH_COLUMN);
$sections = [
    'employee_name' => 'Employee name',
    'manager'       => 'Manager',
    'senior'        => 'Senior',
];

然后循环它

<form action="sign.php" method="post">
<?php foreach ($sections as $label => $caption): ?>
    <label for="<?=$label?>"><?=$caption?></label>
    <select name = "<?=$label?>">
        <option value=""> -----------Select----------- </option> 
        <?php foreach ($people as $name): ?>
            <option><?=$name?></option>
        <?php endforeach ?>
    </select> 
<?php endforeach ?>
<input type="submit" name="register" value=" Click to Add"></button>
</form>

而不是每次都重复此操作,您可以创建一个执行相同任务的方法。

<label for="employee_name">Employee name</label>
<select name = "employee_name">
<option value=""> -----------Select----------- </option> 
   <?=loadOptions('name','people');?> <!--shortcut way to echo in php-->
</select>
<?php 
function loadOptions($field,$table){
   $stmt = $pdo->prepare('Select '.$field.' from '.$table);
   $stmt->execute();
   $options='';
   while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
      $options .= '<option>'.$row['name'].'</option>';
   }
   return $options;
}
?>