2012-09-03 71 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

哦,好吧(我新來張貼這裏) –

相關問題