Php 将csv填充到数据库中

Php 将csv填充到数据库中,php,csv,Php,Csv,我已经成功地编写了这个CSV文件,它运行得很好。我唯一遇到的问题是表单上的变量错误。我遇到了这个错误…注意:未定义的变量:C:\xampp\htdocs\helper.php527中的数据:运行时在第22行创建的函数 如何解决错误?这个 这是我的示例代码 <form enctype="multipart/form-data" method="POST" action="" > CSV<input type="

我已经成功地编写了这个CSV文件,它运行得很好。我唯一遇到的问题是表单上的变量错误。我遇到了这个错误…注意:未定义的变量:C:\xampp\htdocs\helper.php527中的数据:运行时在第22行创建的函数

如何解决错误?这个

这是我的示例代码

<form enctype="multipart/form-data" method="POST" action="" >
CSV<input type="file" name="file" />
<input type="submit" value="submit" name="submit"/>
</form>

//connect to the database
$connect = mysql_connect("localhost","root","");
mysql_select_db("test",$connect); //select the table
if(isset($_POST['submit']))
{

//get the csv file
$file = $_FILES['file']['tmp_name'];
$handle = fopen($file,"r");

 //loop through the csv file and insert into database
do {
if ($data[0]) {
    mysql_query("INSERT INTO f38uj_zhgooglemaps_markers (title, addresstext,  published, baloon, icontype, mapid) VALUES
        (
           '".addslashes($data[0])."',
           '".addslashes($data[1])."',
           '".addslashes($data[2])."',
           '".addslashes($data[3])."',
           '".addslashes($data[4])."',
           '".addslashes($data[5])."'
         )
      ");
     }
   } while ($data = fgetcsv($handle,1000,",","'"));

  }

  ?>
应该是

$data==$data[0]

您是在比较,而不是分配。特别是在if语句中,如果这是您的全部代码,我看不出您在何处设置变量$data,然后继续对其进行测试:

if ($data[0]) { ... }
在进行这些类型的测试之前,应使用函数,除非100%确定变量不为null:

if (isset($var)){ ... }
然后

if ($var) { ... }

这里有三个问题:

1您使用的是双引号,它告诉PHP用它找到的变量值替换前面设置的值,请参见下面的示例

2$数据直到循环结束时才定义,因此请使用常规while循环,而不要使用do while

3您的sql查询无论如何都是错误的。你会有一些效果

$data='value',$data='value',$data='value2',$data='value3',$data='value4',



mysql_query("INSERT INTO f38uj_zhgooglemaps_markers (title, addresstext,  published, baloon, icontype, mapid) VALUES
        (
          $data=  '".addslashes($data[0])."',
          $data= '".addslashes($data[1])."',
          $data= '".addslashes($data[2])."',
          $data='".addslashes($data[3])."',
          $data= '".addslashes($data[4])."',
          $data= '".addslashes($data[5])."'
         )
      ");
     }
由于您使用的是do-while,在循环的第一次迭代中,$data将没有值,因此PHP会抛出一个运行时警告,因为对于所有解释器来说,解释器都知道它将在以后设置,就像您的情况一样。基本上在do中,直到主体运行之后才检查条件,因此直到第一次通过之后才调用$data=fgetcsv

您可以轻松地切换此设置并消除警告,只需更改此结构:

do{
//...
}
while($data=fgetcsv())
为此:

while($data=fgetcsv()){
//...
}

我注意到了,但我还是发现了一个错误,使用db server直接导入数据是可能的。我的问题是我的公司需要从远程位置导入数据,所以我需要创建标记…我正在处理地图。无论如何,他应该使用常规的while循环,然后使用fgetcsv将保证在变量为null时代码不会运行loop@Farkie除了它是一个do-while循环$直到循环体已经运行了一次,数据才被设置。@Farkie-我使用了常规while循环,是的,它可以正常工作,但是在表上重复记录6次。我需要一些东西来结束记录的重复。这就是为什么我尝试了这个方法。感谢我在上一篇文章中尝试了while方法的支持,但是它在表上重复了数据3次..我已经修改了这个,现在数据不再重复,但是在我得到的表单上..注意:未定义变量:数据当你说这是我的$data时,php会找到名为$data的变量并将其值放入字符串中。但是,在循环的第一次迭代中,未设置$data。您使用的是do while循环,因此直到第一次迭代之后才检查条件,这也意味着$data在第一次迭代之后才被设置。您正在尝试替换一个尚不存在的值。请使用while循环代替do while循环。我将更新我使用的答案,例如//在$data=fgetcsv$handle,1000,,,,'时循环浏览csv文件并插入数据库;如果$data=$data[0]{mysql_queryINSERT到contacts_,contact_,contact_,email VALUES'.addslashes$data[0].','.addslashes$data[1].','.addslashes$data[2].;}}?>虽然有效,但在桌子上重复了lettes@Zarazthuztra-我理解..我只需要你们专家的帮助,因为我相信stack和所有人..我一直知道这里有专家和proi已经删除..$数据=
while($data=fgetcsv()){
//...
}