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