数据库配置(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);
如何使用PHP将CSV文件数据导入MySQL数据库

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">
日期:2020-06-02 22:15:56 来源:oir作者:oir