2013-11-02 3 views
0

나는 PHP에 매우 익숙하다. csv 파일을 열고 데이터베이스를 업데이트하려면 다음 코드를 사용하고 있습니다. csv 파일의 첫 번째 행 - 첫 번째 열의 값을 확인해야합니다. "일부 텍스트 1"과 일치하는 경우 "일부 텍스트 2"이면 code1을 실행하고 code2는 else3을 실행해야합니다. else 조건을 사용할 수 있지만 While 루프를 사용하고 있기 때문에 실패합니다. 누구든지 나를 도와 줄 수 있어요.csv 파일 업로드 및 업데이트 mysql db

$handle = fopen($file_tmp,"r"); 
     while(($fileop = fgetcsv($handle,",")) !== false) 
     { 
        // I need to check here 
     $companycode = mysql_real_escape_string($fileop[0]); 
     $Item = mysql_real_escape_string($fileop[3]); 
     $pack = preg_replace('/[^A-Za-z0-9\. -]/', '', $fileop[4]); 
     $lastmonth = mysql_real_escape_string($fileop[5]); 
     $ltlmonth = mysql_real_escape_string($fileop[6]); 
     $op = mysql_real_escape_string($fileop[9]); 
     $pur = mysql_real_escape_string($fileop[10]); 
     $sale = mysql_real_escape_string($fileop[12]); 
     $bal = mysql_real_escape_string($fileop[17]); 
     $bval = mysql_real_escape_string($fileop[18]); 
     $sval = mysql_real_escape_string($fileop[19]); 

     $sq1 = mysql_query("INSERT INTO `sas` (companycode,Item,pack,lastmonth,ltlmonth,op,pur,sale,bal,bval,sval) VALUES ('$companycode','$Item','$pack','$lastmonth','$ltlmonth','$op','$pur','$sale','$bal','$bval','$sval')"); 
    } 
+0

긴 감가 상각 된 mysql 확장을 사용하지 마십시오. 대신 준비된 명령문을 사용하십시오. 그런 다음 모든 명령을 이스케이프 처리 할 필요가 없으며 코드가 안전 해집니다. – arkascha

+0

"while while it while fail"이라는 단어는 무엇을 의미합니까? 나는 조건부 ('if')를 여기에서 발견 할 수 없다 ... – arkascha

+0

괜찮아. 나는 PDO도 배우고있다. 내가 물었던 것을 할 수있는 방법이 있습니까 – Indra

답변

0

아마도 switch 문을 찾고 계십니까?

사례 1 :

$handle = fopen($file_tmp,'r'); 
while(FALSE!==($fileop = fgetcsv($handle,','))) { 
    switch($fileop[0]) { 
     case 'some text 1': 
      // do thing 1 
      $sql = '...'; 
      break; 
     case 'some text 2': 
      // do thing 2 
      $sql = '...'; 
      break; 
     case 'some text 3': 
      // do thing 3 
      $sql = '...'; 
      break; 
     default: 
      $sql = FALSE; 
    } // switch 
} // while 

if (FALSE!==$sql) { 
    // now go on with the $sql statement and execute it using `mysqli` or `PDO`... 
} // if 

설명 : 당신이 모든 행에 대해 다른 조치를 해고해야 당신이 읽고 각 행 ($fileop[0])의 첫 번째 열을 확인하고 발사 할 작업을 결정합니다.


사례 2 :

$handle = fopen($file_tmp,'r'); 
$action = NULL; 
while(FALSE!==($fileop = fgetcsv($handle,','))) { 
    if (is_null($action)) { 
     switch($fileop[0]) { 
      case 'some text 1': $action = 1; break; 
      case 'some text 2': $action = 2; break; 
      case 'some text 3': $action = 3; break; 
      default:   $action = FALSE; 
     } // switch 
    } // if 
    switch ($action) { 
     case 1: 
      $sql = '...'; 
      // prepare statement, use $fileop as array of attributes for the statement 
      break; 
     case 2: 
      $sql = '...'; 
      // prepare statement, use $fileop as array of attributes for the statement 
      break; 
     case 2: 
      $sql = '...'; 
      // prepare statement, use $fileop as array of attributes for the statement 
      break; 
    } // switch 
} // while 

설명 : 각 파일에 대해 다른 조치를 해고해야 당신이 읽은 첫 번째 행 ($fileop[0])에서 첫 번째 열을 확인합니다. $action이 아직 NULL 인 경우에만이 작업을 수행합니다. $action가 설정되면 퇴장합니다. 이제 처리 단계 시작시 한 번 정의 된 $action이 있으며 읽은 모든 단일 행에 대해 반응 할 수 있습니다. 당신이이 경우에 전체 파일을 읽는 건너 뛸 수 있도록이 예기치 않은 첫 번째 열 값을 처리하기 위해이에 예외를 사용하여 지불 할 수 일반적으로


...

+0

나는 당신을 업데이트하려고합니다. – Indra

+0

코드가 도움이되지 않았습니다. 다시 한번 설명하겠습니다. 두 개의 differnt csv 파일이 있습니다. File1은 첫 번째 셀에 text1을 포함합니다. File2에는 text2가 있습니다. csv 파일을 업로드 할 때 값이 text1이고 업로드 된 파일이 File1이면 첫 번째 행의 첫 번째 열 값을 검사해야하므로 루프 코드가 데이터베이스에 데이터를 삽입하는 동안 실행해야합니다. 당신이 제안한 코드는 각각의 모든 행을 확인하는 것입니다. $ fileop [0] – Indra

+0

사실 내가 어떻게 당신의 질문을 이해했는지입니다. 잘하면 올바른 방향으로 안내하는 두 번째 케이스를 추가했습니다 ... – arkascha

0

이유를 직접로드 할 수 없습니다 mysql에?

load data local infile 'filename.csv' into table tblname 
fields terminated by ',' 
enclosed by '"' 
lines terminated by '\n' 
(field1, field1, field1,...); 
+0

데이터 업로드는 프런트 엔드 사용자가 매일 수행합니다. – Indra

+0

csv를 서버에 업로드 한 다음 mysql에로드 하시겠습니까? –