2012-09-03 72 views
0

我正在为我的表单邮件脚本编写一个php脚本来发送所有发送到管道分隔的csv文件的电子邮件,然后通过php数组显示csv文件。我需要允许用户通过将列表中的最后一个或第22个字段的ID /发票号从该列表传递到删除函数来删除条目,如下所示,但它将删除csv文件中的所有内容,不仅仅是这条线。这是我的代码。我比较传递给invoicenumber的id,如果它匹配,它应该删除该行并将其余的放回,但它会删除所有条目。PHP找到关键字并删除具有匹配关键字的整个行

我做你的更正如下,但它仍然是消灭所有条目:

if ($_POST['action'] == "Delete") 
{ 
    $id = $_GET['id']; 
    $fptemp = fopen('data-temp.csv', "a+"); 
    if (($handle = fopen($dataFile, "r")) !== FALSE) 
    { 
     while (($data= fgetcsv($handle)) !== FALSE) 
     { 
      if ($id != $data[22]) 
      { 
       fputcsv($data); 
      } 
     } 
     fclose($handle); 
     fclose($fptemp); 
     unlink($dataFile); 
     rename('data-temp.csv',$dataFile); 
    } 
} 

所以我在我的CSV文件有以下条目

1346785585|Martha|Stewart|[email protected]|555-444-2222|578 dude rd|dude|TN|57660|usa|Do it Yourself Cooking Book||389|12|||360|12|Credit Card|www.something.com||98.143.4.228|6c67b98 
1346785588|Karen|b|[email protected]|555-444-2222|578 dude rd|dude|TN|57660|usa|Do it Yourself WebSite||389|12|||360|12|Credit Card|www.something.com||98.143.4.228|464b4ec 

我想找到发票号码是所以假设我想找到“464b4ec”并删除整个条目组成

1346785588|Karen|b|[email protected]|555-444-2222|578 dude rd|dude|TN|57660|usa|Do it Yourself WebSite||389|12|||360|12|Credit Card|www.something.com||98.143.4.228|464b4ec 

我想单独留下所有其他条目,我该怎么做?

+0

你为什么覆盖你的循环内'$ id'? –

回答

0

几件事

一个)fgetcsv()返回字段的从CSV数据的刚读取的行的阵列。您将整个阵列与单个项目比较,$data[22]。除非数据[22]本身就是一个数组,否则这不会如你所期望的那样工作

如果$ data不是一个数组,它将被视为一个字符串,并且你将$ id与第22字符串中的字符。 b)$ data已经是一个数组,然后你将其包装在另一个数组中 - array($data)。所以...我猜数据实际上是一个字符串。

c)既然你只做fputcsv,如果你的id v.s数据比较不匹配,你不会删除一个字段 - 你可以跳过整个行。只删除数组中的第22项,它会必须

if ($id == $data[22) { 
    unset($data[22]); 
} 
fputcsv($fptemp, $data); 

d)和杰克在他的评论中指出的那样,你是覆盖在你的循环$ ID,所以$ _ POST值你当你读到你的第一行csv数据的时候,它已经被破坏了。

+0

“你并没有删除只是一个领域 - 你跳过整条线” - 这就是他说他想做的事。他只是将该字段用作是否删除它的标准。 – Barmar

1

两个修复程序。正如其他人指出的那样,您使用$id来做两件事。更改:

$id= fgetcsv($handle) 

到:

$data = fgetcsv($handle, 0, '|') 

而且,当你写的输出文件,你在包装另一个数组,这是没有必要的数组。变化:

$list = array($data); 
fputcsv($fptemp, $list); 

到:

fputcsv($data); 
+0

它工作吗?如果没有正确的格式,我无法告诉任何关于您评论中的代码。 – Barmar

+0

您不能在评论框中格式化。编辑原始问题。 – Barmar

+0

哦,好吧(我新来张贴这里) –

相关问题