数据库配置(dbconfig.php)
“dbconfig.php”用于连接数据库。
指定数据库主机('$dbhost'),用户名('$dbusame'),密码('$dbpassword'),以及根据mysql数据库凭据的名称('$dbname')。
<?php
//Database configuration
$dbHost = "localhost";
$dbUsername = "root";
$dbPassword = "root";
$dbName = "onitroad";
//Create database connection
$db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
//Check connection
if ($db->connect_error) {
die("Connection failed: " . $db->connect_error);
}
将CSV数据导入数据库(ImportData.php)
“importData.php”文件使用PHP和MySQL处理文件上载和CSV数据导入进程。
- 验证发布文件是否是有效的.csv文件。
- 检查CSV文件是否使用is_uploaded_file()函数上载。
- 使用Fopen()函数在只读模式下打开CSV文件。
- 使用FGETCSV()函数从打开的CSV文件中读取和解析数据。
- 按行检索CSV数据行。
- 根据电子邮件地址在数据库中插入/更新成员数据。
- 使用导入状态代码重定向到列表页面。
<?php
//Load the database configuration file
include_once 'dbConfig.php';
if(isset($_POST['importSubmit'])){
//Allowed mime types
$csvMimes = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain');
//Validate whether selected file is a CSV file
if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'], $csvMimes)){
//If the file is uploaded
if(is_uploaded_file($_FILES['file']['tmp_name'])){
//Open uploaded CSV file with read-only mode
$csvFile = fopen($_FILES['file']['tmp_name'], 'r');
//Skip the first line
fgetcsv($csvFile);
//Parse data from CSV file line by line
while(($line = fgetcsv($csvFile)) !== FALSE){
//Get row data
$name = $line[0];
$email = $line[1];
$phone = $line[2];
$status = $line[3];
//Check whether member already exists in the database with the same email
$prevQuery = "SELECT id FROM members WHERE email = '".$line[1]."'";
$prevResult = $db->query($prevQuery);
if($prevResult->num_rows > 0){
//Update member data in the database
$db->query("UPDATE members SET name = '".$name."', phone = '".$phone."', status = '".$status."', modified = NOW() WHERE email = '".$email."'");
}else{
//Insert member data in the database
$db->query("INSERT INTO members (name, email, phone, created, modified, status) VALUES ('".$name."', '".$email."', '".$phone."', NOW(), NOW(), '".$status."')");
}
}
//Close opened CSV file
fclose($csvFile);
$qstring = '?status=succ';
}else{
$qstring = '?status=err';
}
}else{
$qstring = '?status=invalid_file';
}
}
//Redirect to the listing page
header("Location: index.php".$qstring);
CSV(逗号分隔值)文件以纯文本格式存储表格数据。
基本上,CSV文件格式用于导入或者从表数据导入或者导出。
CSV文件的每一行是包含一个或者多个字段的数据记录。
当需要将巨大的数据添加到MySQL数据库中时,它会非常耗时地添加一个数据。
在这种情况下,导入功能有助于单击在数据库中插入一堆数据。
批量导入是一个非常有用的功能,可以在没有手动插入的情况下添加数据库中的多个记录。
使用CSV文件,我们可以使用PHP和MySQL存储数据并将CSV文件数据导入数据库。
将CSV导入MySQL有助于保存用户时间并避免重复工作。
在本教程中,我们将展示如何使用PHP将CSV文件从CSV文件导入MySQL数据库。
在示例脚本中,我们将从CSV文件导入成员的数据并使用PHP和MySQL将其插入数据库中。
根据此脚本功能,用户将能够上传成员详细信息的CSV文件,并且将使用PHP将成员数据插入MySQL数据库中。
创建数据库表
要存储成员的数据,需要在数据库中创建表。
以下SQL使用MySQL数据库中的某些基本字段创建“成员”表。
CREATE TABLE `members` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`phone` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
`status` enum('Active','Inactive') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Active',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CSV文件格式
基于数据库表结构,CSV文件应具有这些字段名称,电子邮件,电话和状态。
要从CSV文件导入数据,格式将类似于以下屏幕。
CSV文件上传(index.php)
最初,成员数据列出了CSV文件导入选项。
- 现有成员数据从数据库中获取,并在网页上列出。
- 导入按钮位于列表的顶部。
- 通过单击“导入”按钮,将出现HTML表单来选择并上载CSV文件。
- 在提交时,表单将提交到“ImportData.php”文件中,用于将CSV数据导入数据库。
- FormToggle() - 它是一个JavaScript函数,有助于显示/隐藏CSV上传表单。在“导入”按钮的“单击”事件“中触发此函数。
如果表单已经提交,
- 从URL检索状态消息,并在网页上显示导入状态。
<?php
//Load the database configuration file
include_once 'dbConfig.php';
//Get status message
if(!empty($_GET['status'])){
switch($_GET['status']){
case 'succ':
$statusType = 'alert-success';
$statusMsg = 'Members data has been imported successfully.';
break;
case 'err':
$statusType = 'alert-danger';
$statusMsg = 'Some problem occurred, please try again.';
break;
case 'invalid_file':
$statusType = 'alert-danger';
$statusMsg = 'Please upload a valid CSV file.';
break;
default:
$statusType = '';
$statusMsg = '';
}
}
?>
<!-- Display status message -->
<?php if(!empty($statusMsg)){ ?>
<div class="col-xs-12">
<div class="alert <?php echo $statusType; ?>"><?php echo $statusMsg; ?></div>
</div>
<?php } ?>
<div class="row">
<!-- Import link -->
<div class="col-md-12 head">
<div class="float-right">
<a href="javascript:void(0);" class="btn btn-success" onclick="formToggle('importFrm');"><i class="plus"></i> Import</a>
</div>
</div>
<!-- CSV file upload form -->
<div class="col-md-12" id="importFrm" style="display: none;">
<form action="importData.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" class="btn btn-primary" name="importSubmit" value="IMPORT">
</form>
</div>
<!-- Data list table -->
<table class="table table-striped table-bordered">
<thead class="thead-dark">
<tr>
<th>#ID</th>
<th>Name</th>
<th>Email</th>
<th>Phone</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<?php
//Get member rows
$result = $db->query("SELECT * FROM members ORDER BY id DESC");
if($result->num_rows > 0){
while($row = $result->fetch_assoc()){
?>
<tr>
<td><?php echo $row['id']; ?></td>
<td><?php echo $row['name']; ?></td>
<td><?php echo $row['email']; ?></td>
<td><?php echo $row['phone']; ?></td>
<td><?php echo $row['status']; ?></td>
</tr>
<?php } }else{ ?>
<tr><td colspan="5">No member(s) found...</td></tr>
<?php } ?>
</tbody>
</table>
</div>
<!-- Show/hide CSV upload form -->
<script>
function formToggle(ID){
var element = document.getElementById(ID);
if(element.style.display === "none"){
element.style.display = "block";
}else{
element.style.display = "none";
}
}
</script>
Bootstrap库用于调整表,表单和按钮。
因此,包括Bootstrap 4库文件和自定义样式表文件(如果有)。
如果我们不想使用Bootstrap结构,请省略包含此库文件。
<!-- Bootstrap library --> <link rel="stylesheet" href="assets/bootstrap/bootstrap.min.css"> <!-- Stylesheet file --> <link rel="stylesheet" href="assets/css/style.css">
