Php 在创建类似于Mailchimp的CSV导入和映射功能方面寻求帮助

Php 在创建类似于Mailchimp的CSV导入和映射功能方面寻求帮助,php,mysql,csv,import,mailchimp,Php,Mysql,Csv,Import,Mailchimp,我试图做的是上传产品的CSV,获取标题,并创建一个映射工具,允许用户将CSV标题与需要导入的字段相匹配。我想我需要获取列值,而不是行值 Mailchimp目前拥有这种非常酷的功能,我相信电子邮件营销的所有其他大玩家都有这种功能。导入后,系统将列出每个列名,并允许用户选择将其映射到内置列的内容 我已经研究了几种不同的预先存在的解决方案,它们似乎都有问题,我只需要创建自己的定制解决方案 我目前正在使用PHP/MySQL。任何帮助或建议将不胜感激 根据您为我提供的内容,我将下面的PHP类放在一起,希望

我试图做的是上传产品的CSV,获取标题,并创建一个映射工具,允许用户将CSV标题与需要导入的字段相匹配。我想我需要获取列值,而不是行值

Mailchimp目前拥有这种非常酷的功能,我相信电子邮件营销的所有其他大玩家都有这种功能。导入后,系统将列出每个列名,并允许用户选择将其映射到内置列的内容

我已经研究了几种不同的预先存在的解决方案,它们似乎都有问题,我只需要创建自己的定制解决方案


我目前正在使用PHP/MySQL。任何帮助或建议将不胜感激

根据您为我提供的内容,我将下面的PHP类放在一起,希望它能为您提供所需的功能。代码的底部演示了小型类的用法

<?php
class CSVtoSQL {
    private $filePath, $csvData;

    public function __construct($filePath) {
        $this->filePath = $filePath;
    }

    public function readDataIn() {
        $file = fopen($this->filePath, 'r');
        $data = fread($file, filesize($this->filePath));

        // Split CSV line by line.
        $lines = explode("\n", $data);

        // Split each line by commas to extract each value.
        for ($i = 0; $i < sizeof($lines); $i++) {
            $this->csvData[$i] = explode(',', $lines[$i]);
        }

        fclose($file);

        // Returns true if we managed to read data, false if we didn't.
        return (sizeof($this->csvData) > 0);
    }

    public function getHeadings() {
        if (sizeof($this->csvData) > 0) {
            // The first index of csvData has all the headings.
            return $this->csvData[0];
        }
        else {
            return null;
        }
    }

    public function pushToDatabase($con, $tableName, $columns) {
        $createColumnQuery = '';
        $insertQuery = 'INSERT INTO ' . $tableName . ' (';

        // Build column section of query.
        foreach ($columns as $column) {
            $createColumnQuery .= $column['name'] . ' ' . $column['type'] . ',';
        }

        // Remove trailing comma.
        $createColumnQuery = rtrim($createColumnQuery, ',');

        // Create table.
        $con->query('CREATE TABLE ' . $tableName . ' (' . $createColumnQuery . ')');

        // Create insert query template.
        foreach ($columns as $column) {
            $insertQuery .= $column['name'] . ',';
        }

        // Remove trailing comma.
        $insertQuery = rtrim($insertQuery, ',');

        // Insert values using our insertQuery string which looks like: "INSERT INTO <<table name>> (<<column 1>>, <<column 2>>"
        // Also skip the first line as that has the headings.
        for ($i = 1; $i < sizeof($this->csvData); $i++) {
            $values = '';

            foreach($this->csvData[$i] as $value) {
                $values .= '\'' . $value . '\',';
            }

            // Remove trailing comma.
            $values = rtrim($values, ',');
            $con->query($insertQuery . ') VALUES (' . $values . ')');
        }
    }
}

$csv = new CSVtoSQL('test.csv');
$csv->readDataIn();
var_dump($csv->getHeadings());
$con = new mysqli('127.0.0.1', 'root', '', 'testdb');
$columns = array(array('name'=>'col1', 'type'=>'VARCHAR(256)'),
                array('name'=>'col2', 'type'=>'VARCHAR(256)'),
                array('name'=>'col3', 'type'=>'VARCHAR(256)'));
$csv->pushToDatabase($con, 'test_table', $columns);
?>

您能提供一个CSV外观的简单示例吗?只是想澄清一下,您是否正在尝试将CSV和“映射”(插入)其所有数据放入MySQL表中,用户在该表中明确定义了匹配的CSV头和数据库列?嗨,Shane,谢谢您的回复。CSV是相当标准的,大约有12列标题和每个单元格的各种数据类型。为了回答您的问题,我希望在用户将CSV上传到可以选择CSV中的每列数据将进入哪个表的位置之后,再进行一个中间步骤。然后将其提交以插入数据库。我希望这能彻底回答你的问题。我试图附上Mailchimp的截图,但是我现在没有足够的声望点!非常感谢。很抱歉回复太慢,今晚我会为你准备一些东西,我下班回家后会帮你准备的。:)谢恩,谢谢你!我感谢你为这项工作所做的努力。我现在正在尝试利用它。不用担心,用一些简单的HTML表单实现应该不会太困难。祝你好运