2011-12-22 8 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ファイルのWHICH行を示すための手段が必要です。行番号、または(できれば)各行の一意のIDフィールド。

あなたはouptutのために、この必要があると思いますので、私は、CSVファイルの列0、行の一意のindentifierあるふり:update.phpをスクリプトで

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

そして、基本中の擬似コード:

<?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 
} 

変更された出力には2番目のファイルが使用されています。これは元のcsvをインプレースで編集しようとするよりも安全です。必要な変更を加えたら、新しいファイルを古いファイルに移動するだけで、編集が完了します。

+0

@マークBありがとう!今どこから始めたらいいか分かります。表示部分については、私は問題に遭遇しています... CSVを表示する際にユニークIDをスキップするにはどうすればよいですか?私の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の($インデックス=> $ valのよう$データ){ \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]が名前であることを意味します。 –

関連する問題