在php开发班级通信录系统时,导入指定班级的数据并做按班级筛选,是后台管理常见需求。通常做法是前端选择班级,后端接收班级id,解析上传文件后只把匹配该班级的记录写入数据库。
一、数据库与表单设计
通信录表建议包含班级id字段,便于筛选。简单结构如下:
CREATE TABLE address_book ( id INT PRIMARY KEY AUTO_INCREMENT, class_id INT NOT NULL, name VARCHAR(50) NOT NULL, phone VARCHAR(20), INDEX (class_id) );
二、前端选择班级并上传文件
使用普通表单提交班级id和csv文件:
<form method="post" enctype="multipart/form-data">
<select name="class_id">
<option value="1">一班</option>
<option value="2">二班</option>
</select>
<input type="file" name="file" />
<button type="submit">导入</button>
</form>
三、php接收并筛选导入
后端先取class_id,再读csv,只导入该班级数据:
<?php
$class_id = intval($_POST['class_id'] ?? 0);
if ($class_id <= 0) {
die('请选择有效班级');
}
$file = $_FILES['file']['tmp_name'];
if (!is_uploaded_file($file)) {
die('上传失败');
}
$conn = new mysqli('127.0.0.1', 'user', 'pass', 'school');
if ($conn->connect_error) {
die('连接错误');
}
if (($handle = fopen($file, 'r')) !== false) {
while (($row = fgetcsv($handle)) !== false) {
// 假设csv: 姓名,电话
$name = $conn->real_escape_string($row[0]);
$phone = $conn->real_escape_string($row[1]);
$sql = "INSERT INTO address_book (class_id,name,phone) VALUES ($class_id,'$name','$phone')";
$conn->query($sql);
}
fclose($handle);
}
$conn->close();
echo '导入完成';
?>
四、按班级筛选导入的注意点
- 班级id必须从服务端校验,不能信任前端隐藏值。
- csv编码建议用utf-8,避免中文乱码。
- 可先查班级是否存在,再执行导入逻辑。
五、常见错误处理
若文件里混有其它班级数据,应在读取时加判断:
<?php
// 假设csv第一列为班级名,仅导入选中班级
$target_class = '一班';
while (($row = fgetcsv($handle)) !== false) {
if ($row[0] !== $target_class) {
continue; // 按班级筛选导入
}
// 写入数据库
}
?>
通过以上步骤,php就能实现班级通信录导入指定班级并按班级筛选导入,保证数据归属清晰。