【问题标题】:Trying to upload CSV with some emtpy fields to MySQL DB with PHP尝试使用 PHP 将带有一些空字段的 CSV 上传到 MySQL DB
【发布时间】:2020-04-27 21:57:30
【问题描述】:

我一直在尝试创建此函数以将数据上传到我的 MySQL 数据库(现在在我的本地主机上),CSV 文件中的某些字段将始终为空,我相信这是我尝试错误的原因上传没有空格的文件,效果很好,这里的代码顶部上传CSV文件

<?php

include('conexion.php');

$fileContacts = $_FILES['fileContacts']; 
$fileContacts = file_get_contents($fileContacts['tmp_name']); 

$fileContacts = explode("\n", $fileContacts);
$fileContacts = array_filter($fileContacts); 

// preparar contactos (convertirlos en array)
foreach ($fileContacts as $contact) 
{
    $contactList[] = explode(",", $contact);
}

// insertar contactos
foreach ($contactList as $contactData) 
{
    $conexion->query("INSERT INTO contacts 
                        (contact_given_name,
                         contact_last_name,
                         contact_phone,
                         contact_email,
                         contact_zip_code)
                         VALUES

                         ('{$contactData[0]}',
                          '{$contactData[1]}', 
                          '{$contactData[2]}',
                          '{$contactData[3]}',
                          '{$contactData[4]}'
                           )

                         "); 
}
?>

这些是 import.php 中的错误

警告:file_get_contents(): 第 6 行的 E:\wamp64\www\insert_from_csv\insert_from_csv\import.php 中的文件名不能为空

注意:未定义变量:第 18 行 E:\wamp64\www\insert_from_csv\insert_from_csv\import.php 中的contactList

警告:在第 18 行的 E:\wamp64\www\insert_from_csv\insert_from_csv\import.php 中为 foreach() 提供的参数无效

非常感谢您的帮助!

【问题讨论】:

  • 第 6 行关于 $fileContacts['tmp_name'] 的第一个警告不是空的吗?你能做点什么让这个警告先消失吗?
  • 我想这样做,因为我的文件总是有一个空文件,但即使它是我希望代码继续运行。你会建议我如何让它消失?对不起,我是个新手。
  • 好的 2 件事。如果文件为空,file_get_contents 将返回 FALSE,如果找不到“文件名”,则会发出警告。我认为在这种情况下 $fileContacts['tmp_name'] 正在获取一个不存在的文件名。在第 6 行下面打印 $fileContacts,看看当警告出现时你会得到什么。

标签: php mysql excel csv crud


【解决方案1】:

在第 6 行下面,添加一个条件-

if($fileContacts !== false)

并将其余代码放在该条件内,以便仅在文件内容不为空时运行。

PS:您看到的第一个警告主要是因为 $fileContacts['tmp_name'] 正在获取一个不存在的文件名。您可以使用 is_file() 检查文件名是否存在,如果存在则返回 true,否则返回 false

因此将两者结合起来,第 6 行下方使用的条件将是-

if((is_file($fileContacts) == true) && ($fileContacts !== false))

【讨论】:

    【解决方案2】:

    代码没有任何问题。 您可以向数据库添加默认值,这将解决问题。 尝试类似:

    CREATE TABLE contacts (
    contact_id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    contact_given_name varchar(255) NOT NULL DEFAULT 'Not Provided',
    contact_last_name varchar(255) NOT NULL DEFAULT 'Not Provided',
    contact_phone varchar(255) NOT NULL DEFAULT 'Not Provided',
    contact_email varchar(255) NOT NULL DEFAULT 'Not Provided',
    contact_zip_code int(10) NOT NULL DEFAULT 0
    );
    

    【讨论】:

      猜你喜欢
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多