2011-12-22 115 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是行的唯一indentifier,所以你必须为这个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

@Mark B谢谢!现在我知道从哪里开始。对于显示部分,我遇到了一个问题......如何在显示CSV时跳过唯一标识符?我的CSV文件看起来像: 1,凯文约翰逊 2,史蒂夫乔布斯 3,比尔盖茨 4,史蒂夫沃兹 如何隐藏1,2,3,4使用fgetcsv? \t \t \t \t '而(($数据= fgetcsv($处理,1000, “ ”))== FALSE!){ 回波(“ \ r \ n”); 的foreach($数据作为$索引=> $ val)的{ \t \t \t \t \t回波( “\吨​​$val \ r \ n”); \t \t \t \t \t \t \t}' – 2011-12-22 22:00:22

+0

fgetcsv解析在每个线的基础上的CSV和返回各个字段的阵列。这意味着$ row [0]是1,2,3,4的东西,$ row [1]是名称。 – 2011-12-22 22:10:17