2011-11-30 101 views
0

我對我們公司的競賽形式寫入到csv文件之前檢查重複。每個家庭只有一個入口,所以在提交時,我想檢查提交的地址是否已經在寫入之前輸入到csv文件中。我所看到的,你可以使用SELECT有一個數據庫,但我不知道如何與.csv這裏做的是代碼:PHP - 寫入CSV文件

if($_POST['formSubmit'] == "Enter Now") { 

     $errorMessage = ""; 
     $aClass = ""; 

     if(empty($_POST['name'])){$errorMessage .= "<li>You forgot to enter your name!</li>";} 
     if(empty($_POST['email'])){$errorMessage .= "<li>You forgot to enter your email!</li>";} 
     if(empty($_POST['address1'])){$errorMessage .= "<li>You forgot to enter your address!</li>";} 
     if(empty($_POST['city'])){$errorMessage .= "<li>You forgot to enter your city!</li>";} 
     if(empty($_POST['postcode'])){$errorMessage .= "<li>You forgot to enter your zip code!</li>";} 

     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $address1 = $_POST['address1']; 
     $city = $_POST['city']; 
     $state = $_POST['state']; 
     $postcode = $_POST['postcode']; 
     $csvData = $name . "," . $email . "," . $address1 . "," . $city . "," . $state . "," . $postcode ."\n"; 

     if(empty($errorMessage)){ 
       $fs = fopen("contest.csv","a"); 
       fwrite($fs,$csvData); 
       fclose($fs); 
      header("location: thank you"); 
       exit; 
     } 
    } 

我想改變我的fopen到r+在代替a然後讀取csv文件以檢查地址。然後把另一個if語句傳遞給「重複發現」或其他fwrite的信息並將它們發送到感謝頁面。

+2

你能不能在這裏使用一個數據庫? – Kit

+6

您必須閱讀csv文件並解析每行以查看該變量是否匹配。你看過[SQLite](http://www.sqlite.org)嗎?它爲文本文件提供了一個SQL機制。然後可以將完整的數據庫導出爲CSV,以便隨後導入到電子表格中 –

+3

平面文件在某些​​情況下確實有用,但這不是其中之一。 –

回答

0

正如一些評論所提到的,flatfiles不是爲這類問題的最佳解決方案,但正如你提到的,有時它只是更容易(便宜)使用什麼已經存在並移動到其他功能。

如果您正在使用的數據庫,你可以在哪裏你不想重複數據出現列添加一個唯一約束,而這種取消dupping能力在數據庫層爲您處理。雖然您將不得不處理嘗試插入時返回的錯誤,但它是一個更優雅的解決方案。

但是,如果你想與您的CSV解決方案前進,你必須分析現有的CSV,並推斷出了現有的地址,那麼你就可以檢查表單提交的地址已經存在。

// Pseduo code 
User submits form 

    Open up existing CSV file 

    Step through each entry in csv file 
     Store Address in $addresses[] array 

    Check if user submitted address exists in $addresses[] array 

正如你所看到的這個解決方案是不高性能,在你將不得不打開,解析和檢查每一個表單提交的時候,然而,應該完成自己的目標。

讓我知道,如果僞代碼是不夠的,我可以編寫出來。

- 編輯 -

下面是一些鏈接,讓您一開始就如何集成數據庫解決方案來解決問題。這些只是讓你開始,因爲有豐富的關於這個問題的信息:

數據庫設計:http://en.wikipedia.org/wiki/Database_design

與數據庫(使用PHP)香草互動:與數據庫http://php.net/manual/en/book.pdo.php

ORM的相互作用(使用PHP):http://www.doctrine-project.org/

+0

謝謝,這是信息豐富的,但我想我會採取所有的建議,並開始在db解決方案上工作。我總是可以學習更多。有什麼好的教程或指導可以帶領我走向正確的方向? –

+0

@ThomasPool:我通過幾個鏈接更新了帖子,讓你開始。 –