将csv填充到数据库中

时间:2014-01-17 22:59:40

标签: php csv

我已经成功编写了这个CSV文件并且运行良好..我得到的唯一问题是表单上的变量错误..我得到这个错误...注意:未定义的变量:C:中的数据xampp \ htdocs \ helper.php(527):第22行的运行时创建函数

  1. 如何解决错误?此

    这是我的示例代码......

    <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,",","'"));
    
      }
    
      ?>
    

3 个答案:

答案 0 :(得分:0)

$data=$data[0]

应该是

$data==$data[0]

您正在比较,而不是分配。特别是在if语句中

答案 1 :(得分:0)

如果这是您的所有代码,我看不到您在哪里设置变量$data,然后继续对其进行测试:

if ($data[0]) { ... }

在进行这些类型的测试之前,您应该使用isset函数,除非您100%确定该变量不为null:

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

然后

if ($var) { ... }

答案 2 :(得分:0)

这里有三个问题:

1)你正在使用双引号,它告诉PHP用它找到的变量的值替换你之前设置它的值,见下面的例子。

2)$ data直到循环结束才定义,所以使用常规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抛出运行时警告,因为所有解释器都知道它将在稍后设置(它设置为在你的情况下)。基本上在执行操作之前,直到主体运行之后才检查条件,因此直到第一次通过之后才会调用$ data = fgetcsv()。

您可以轻松切换它并使警告消失,只需更改此构造:

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

到此:

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