2011-12-22 9 views
0

PHP 코드에 문제가 있습니다. 기본적으로 저는 CSV에있는 사람들의 목록을 가지고 있으며이 파일을 fgetcsv를 사용하여 테이블로 읽고 있습니다. 내가 뭘 하려는지 그들의 이름을 링크로 표시하고, 링크를 클릭하고, fputcsv를 호출하고, 이름 옆에 1을 넣습니다.fgetcsv를 사용하여 CSV에 쓰기

현재 표시 부분 만 작동합니다. 글쓰기 부분을 어디에서 시작해야할지 모르겠습니다.

어떤 통찰력이라도 대단히 감사하겠습니다.

감사합니다.

<?php 
    $row = 1; 
    $handle = fopen("test/list.csv", "r"); 
    echo("<table>"); 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     echo("<tr>\r\n"); 
     foreach ($data as $index=>$val) { 
       echo("\t<td><a href=\"#\">$val</a></td>\r\n"); 
     } 
     echo("</tr>\r\n"); 
    } 
    echo("</table>"); 
    fclose($handle); 
    ?> 

답변

2

csv 파일을 데이터베이스로 직접 처리 할 수 ​​없습니다. 원래의 csv 파일에서 클릭 된 행의 위치를 ​​나타내는 방법이 필요합니다. 행 번호 또는 각 행의 고유 ID 필드 (선호).

나는 csv 파일의 열 0은 행에 대한 유일한 ID 척 것이다, 그래서 당신은 ouptut이있는 것 :

foreach ($data as $index=>$val) { 
      echo("\t<td><a href=\"update.php?id={$data[0]}\">$val</a></td>\r\n"); 
    } 

그리고 update.php 스크립트에서 기본 다음 의사 코드 :

<?php 
$id = $GET['id']; 

$fh = fopen('test/list.csv', 'rb'); 
$out = fopen('newlist.csv'', 'wb'); 
while($row = fgetcsv($fh)) { 
    if ($row[0] == $id) { 
     $row[xxx] = 1; // write '1' for this row because it's the row that was clicked on 
    } 
    fputcsv($out, $row); // write out to new file 
} 

수정 된 출력에 두 번째 파일을 사용하고 있습니다. 이것은 원래의 csv를 제자리에서 편집하는 것보다 안전합니다. 필요한 변경을 한 후에는 새 파일을 이전 파일로 옮기면 편집이 완료됩니다.

+0

@ 마크 B 고마워! 이제 어디서부터 시작해야하는지 알았습니다. 표시 부분의 경우 문제가 발생합니다 ... CSV를 표시 할 때 고유 식별자를 건너 뛰려면 어떻게해야합니까? 내 CSV 파일은 다음과 같습니다. 1, Kevin Johnson 2, Steve Jobs 3, Bill Gates 4, Steve Woz fgetcsv를 사용하여 1,2,3,4를 숨기려면 어떻게해야합니까? \t \t \t \t '동안 (($ 데이터 = fgetcsv ($ 핸들 (1000) ",")) == FALSE!) { 에코 ("\ r \ n를 "); 의 foreach ($ $ 인덱스 => $의 발과 같은 데이터) { \t \t \t \t \t 에코 ("\ r \ n를 \의 t $val"); \t \t \t \t \t \t \t는}' –

+0

fgetcsv는 라인 당 기초 CSV를 분석하고 개별 필드의 배열을 반환한다. 그 말은 $ row [0]이 1,2,3,4 물건이고, $ row [1]은 이름입니다. –