上一篇
html下拉框获取数据库数据
- 行业动态
- 2025-05-11
- 1
实现HTML下拉框与数据库交互需三步:①后端建立数据库连接(如MySQL/PDO),执行SELECT查询获取数据;②将结果集转换为JSON格式;③前端通过AJAX异步请求数据,遍历生成标签,注意使用参数化查询防注入,建议配合Vue/React框架实现双向绑定提升体验。(
数据库准备
首先需要有一个存储数据的数据库表,例如创建一个名为categories
的表,包含id
和name
字段。
字段名 | 数据类型 | 说明 |
---|---|---|
id | INT | 主键ID |
name | VARCHAR | 分类名称 |
示例SQL脚本:
CREATE TABLE categories ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL ); INSERT INTO categories (name) VALUES ('电子产品'), ('服装'), ('食品');
后端接口开发(PHP示例)
通过PHP从数据库中查询数据并以JSON格式返回。
get_categories.php
:
<?php header('Content-Type: application/json'); $servername = "localhost"; $username = "root"; $password = ""; $dbname = "testdb"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->query("SELECT FROM categories"); $categories = $stmt->fetchAll(PDO::FETCH_ASSOC); echo json_encode($categories); } catch(PDOException $e) { echo json_encode(['error' => $e->getMessage()]); } ?>
前端HTML与JavaScript实现
使用AJAX请求后端接口并将数据填充到<select>
HTML结构:
<select id="category-select" style="width:200px;">
<option value="">请选择分类</option>
</select>
JavaScript代码(使用jQuery):
$(document).ready(function(){
$.ajax({
url: 'get_categories.php',
method: 'GET',
dataType: 'json',
success: function(data){
var select = $('#category-select');
if(data.error){
alert('数据加载失败: ' + data.error);
}else{
$.each(data, function(i, item){
select.append('<option value="'+item.id+'">'+item.name+'</option>');
});
}
},
error: function(xhr){
alert('网络错误: ' + xhr.statusText);
}
});
});
完整工作流程
页面加载时,JavaScript发起AJAX请求到
get_categories.php
后端PHP连接数据库,查询
categories
表所有数据将查询结果转换为JSON格式返回给前端
JavaScript动态生成
<option>
元素并插入到<select>
标签中
常见问题与解答
问题1:出现"No 'Access-Control-Allow-Origin' header"错误怎么办?
解答:这是跨域请求被浏览器拦截导致的,需在后端PHP代码中添加以下header:
header('Access-Control-Allow-Origin: '); // 允许所有域名访问
问题2:如何防止SQL注入攻击?
解答:使用PDO的预处理语句代替直接拼接SQL,修改查询代码如下:
$stmt = $conn->prepare("SELECT FROM categories");
$stmt->execute();
$categories = $stmt->fetchAll(PDO::FETCH_ASSOC);
原创文章,作者:未希,如若转载,请注明出处:https://www.xixizhuji.com/ask/1790394.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。