有一些提示可以压缩此任务的代码块——太多了,无法在接受的答案下发表评论。
测试代码:
if (!$con = new mysqli("localhost", "root", "root", "Time_sheet")) {
echo "Database Connection Error: " , $con->connect_error; // don't show actual error in "production" stage
} elseif (!$result = $con->query("SELECT Emp_id FROM Employee ORDER BY Emp_id")) {
echo "Syntax Error: " , $con->error; // don't show actual error in "production" stage
} else {
echo "<select>";
foreach ($result as $row) {
echo "<option>{$row['Emp_id']}</option>";
}
echo "</select>";
}
- 该
if
行在一个步骤中声明$con
并检查它是否存在错误的返回值。
- 永远不要向您的用户提供原始连接或查询错误。在开发过程中没关系,但您不希望陌生人访问您的服务器将提供的关键/信息性错误。这是安全的基本最佳实践。
- 该
elseif
行在一个步骤中声明$result
并检查它是否存在错误的返回值。
- 该
else
块将处理由于成功的 SELECT 查询而生成的零行或多行数据。
- mysqli 结果是“可遍历的”,这意味着您可以使用它进行迭代,
foreach()
并通过关联键直接访问行数据。 PHP 手册参考 另一个 StackOverflow 帖子
- 通过插值将数组元素写入文字字符串时,将元素包裹在花括号中是一种很好的做法(尽管并非总是必要的)。这通常会在 IDE 中触发有用的突出显示,并确保数组后面的字符不会意外地与变量名本身耦合。
- 如果值与开始和结束标记 ( )之间的文本不同,您只需要在标记内写入
value
属性。如果省略了冗余属性,表单提交和 javascript 实现都将相同。<option>
<option>the text in here</option>
value
如果您确实希望在选择字段而不是文本中提交不同的值,则语法如下所示:
echo "<option value=\"{$row['Emp_id']}\">{$row['Emp_name']}</option>";
如果您想selected
根据预先存在的变量(例如$selected_id
)在其中一个选项上编写属性,它可以如下所示:
echo "<option" , ($row['Emp_id'] == $selected_id ? " selected" : "") , ">{$row['Emp_name']}</option>";
如果你想结合前面的两个过程,它可以是这样的:
echo "<option value=\"{$row['Emp_id']}\"" , ($row['Emp_id'] == $selected_id ? " selected" : "") , ">{$row['Emp_name']}</option>";