【问题标题】:Uploading a CSV file to the web server and inserting the row's into the database将 CSV 文件上传到 Web 服务器并将行插入数据库
【发布时间】:2013-07-09 18:59:28
【问题描述】:

目前,我可以从名为“data.csv”的 CSV 文件中获取数据,该文件是我手动上传到网络服务器的。然后我可以将数据上传到数据库,这一切都很好。

我需要做的是:

  1. 只需将文件上传到web服务器的根目录即可
  2. 例如,无论 CSV 文件标题的顺序如何,即使一个用户上传的 CSV 文件的列顺序是这样的(名称 | 电子邮件 | 地址),但另一用户上传的 CSV 文件的列的顺序是这样的(电子邮件|地址|名称)。所以基本上我需要将适当的数据上传到正确的数据库字段,其中 CSV 标题的名称与表中的字段名称匹配?

代码如下:

上传.php

<?php

include('config.php');

$file = "data.csv";
$separator = ",";
$length = 0; 
$fields = array('title', 'firstName', 'secondName', 'emailAddress', 'houseNumber', 'mobileNumber', 'address1', 'address2', 'address3', 'address4', 'postcode'); 

$handle = fopen($file, "r");

$header = array_flip(fgetcsv($handle, $length, $separator));

$values = array();

$i = 1;

while(($csvData = fgetcsv($handle, $length, $separator)) !== false){

$values = array();

echo $i." - You have inserted another row of data into the database.<br>";

    foreach ($fields as $field){
        $values[] = $csvData[$header[$field]];
    }

    mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES ('" . implode("','", $values) . "')"); 

$i++;

}

fclose($handle);

?>

请问我是否没有完全正确地解释这一点。

提前致谢。

【问题讨论】:

  • 我想我上次你问这个问题时已经解决了这个问题。你的implode(",", array_keys($header)) 应该是implode(",", $fields);
  • @Orangepill 噢,我明白了,我之前忘记做的是删除 array_keys()。非常感谢。
  • 如何将 CSV 文件上传到 Web 服务器?
  • 不是问题——我建议通过调用 mysql_real_escape_string 来执行 array_map,以确保未转义的字符不会导致脚本失败
  • @Orangepill 我会这样做,但是如何将 CSV 文件上传到服务器,同时始终将其命名为“data.csv”?

标签: php mysql file-upload


【解决方案1】:

以下应该是您的完整解决方案。

在你的 html 中

<form enctype="multipart/form-data" action="sompepage.php" method="POST">
<!-- MAX_FILE_SIZE must precede the file input field -->
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<!-- Name of input element determines name in $_FILES array -->
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>

在 PHP (somepage.php) 中

<?php
include('config.php');
$file = $_FILES['userfile']['tmp_name'];
$separator = ",";
$length = 0; 
$fields = array('title', 'firstName', 'secondName', 'emailAddress', 'houseNumber', 'mobileNumber', 'address1', 'address2', 'address3', 'address4', 'postcode'); 

$handle = fopen($file, "r");

$header = array_flip(fgetcsv($handle, $length, $separator));

$values = array();

$i = 1;

while(($csvData = fgetcsv($handle, $length, $separator)) !== false){

$values = array();

echo $i." - You have inserted another row of data into the database.<br>";

    foreach ($fields as $field){
        $values[] = $csvData[$header[$field]];
    }
    $values = array_map("mysql_real_escape_string", $values);
    mysql_query("INSERT INTO csv (" . implode(',', $fields) . ") VALUES ('" . implode("','", $values) . "')"); 

$i++;

}

fclose($handle);

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 2020-02-23
    相关资源
    最近更新 更多