数据库配置(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">