2013-10-04 6 views
0

사용자가 CSV를 업로드 한 다음 PHP를 사용하여 기존의 mysql 테이블이 잘리고 CSV의 값이 테이블에 추가되는이 페이지가 있습니다.여분의 구분 기호가 큰 따옴표로 묶인 fgetcsv 행

지금까지는 phpMyAdmin trough Import CSV 방식을 사용했지만 파일을 직접 업로드 할 수 있도록 사용자에게 페이지를 제공하고 싶습니다. 그들 중 일부는 그가 CSV 수출 느릅 나무에서 상점에서 소프트웨어에 의해 큰 따옴표로 묶 제외

CSV 파일 구조는 라인이

code, name, price 
102, plane toy, 23.7 

99 %처럼은 동일합니다. 이처럼 는 :

223, "Mary's white, tshirt", 23.9 

이 내 가져 오기가 실패 할 경우, 그것은에 ','을 '의 흰색, t- 셔츠 "를 도달 할 수 있습니다.

내가 문자를 버리지 않는 방법으로 여기에서 발견되었지만 패턴이 동일하고 광산이 바뀌고 어디에서 여분의 ","가 될지 모르지만 그 항목이있는 시나리오에 대한 것이 었습니다. 여분의 ","큰 따옴표로 묶인 "item"을 포함합니다.

문제를 해결하기 위해 코드를 어떻게 수정할 수 있습니까? 다음

<?php 
    if(isset($_POST['submit'])) 
    { 
     $fname = $_FILES['sel_file']['name']; 

     $chk_ext = explode(".",$fname); 

     if(strtolower($chk_ext[1]) == "csv") 
     { 

      $filename = $_FILES['sel_file']['tmp_name']; 
      $handle = fopen($filename, "r"); 

      $con = mysqli_connect('localhost','xxxx','zzzz','zzz'); 
       if (!$con) 
       { 
       die('Could not connect: ' . mysqli_error($con)); 
       } 

      mysqli_select_db($con,"TABLE 1"); 
      $sqltruncate = "TRUNCATE TABLE `TABLE 1`"; 
      mysqli_query($con,$sqltruncate) or die(mysqli_error($con)); 


      while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) 
      { 
       $sql = "INSERT into `TABLE 1`(code,name,price) values('$data[0]','$data[1]','$data[24]')"; 
       mysqli_query($con,$sql) or die(mysqli_error($con)); 
      } 

      fclose($handle); 
      echo "Success"; 
     } 
     else 
     { 
      echo "Invalid file"; 
     } 
    } 
    ?> 


    <form action='<?php echo $_SERVER["PHP_SELF"];?>' method='post' enctype='multipart/form-data'> 

     Choose CSV : <input type='file' name='sel_file' id='sel_file'> 
     <input type='submit' name='submit' value='submit'> 

    </form> 

답변

0

그동안 내부 사용 foreach는 그 값에서 따옴표를 제거하는 트림()를 사용 :

여기 내 코드입니다.

관련 문제