2011-11-30 3 views
0

CSV 파일에 쓰는 우리 회사의 컨테스트 양식이 있습니다. 가계 당 하나의 항목 일 뿐이므로 제출시 제출 된 주소가 작성되기 전에 이미 csv 파일에 입력되었는지 확인하고 싶습니다. 당신이 데이터베이스 사용을 선택 할 수있는 나는 보았다,하지만 난 여기에 .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; 
     } 
    } 

내가 대신에 r+ 내 fopen을 변경할 생각하고 a을 입력 한 다음 csv 파일을 읽어 주소를 확인하십시오. 그런 다음 '중복 발견'을 중계하는 다른 if 문을 입력하거나 fwrite 정보를 보내고 감사 페이지로 보냅니다.

+2

여기서 DB를 사용할 수 있습니까? – Kit

+6

csv 파일을 읽고 각 행을 구문 분석하여 해당 변수가 일치하는지 확인해야합니다. [SQLite] (http://www.sqlite.org)를 살펴 보았습니까? 텍스트 파일을위한 SQL 메커니즘을 제공합니다. 그런 다음 전체 데이터베이스를 CSV로 내 보내어 나중에 스프레드 시트로 가져올 수 있습니다 –

+3

플랫 파일은 특정 상황에서 용도가 있지만이 중 하나가 아닙니다. –

답변

0

일부 주석에서 언급했듯이 플랫 파일은 이러한 유형의 문제를 해결하는 가장 좋은 방법은 아니지만 때로는 언급 한 것처럼 이미 존재하는 것을 사용하고 다른 기능으로 이동하는 것이 더 쉽습니다.

데이터베이스를 사용하는 경우 중복 데이터를 표시하지 않으려는 열에 고유 제한 조건을 추가 할 수 있으며이 중복 제거 기능은 데이터베이스 계층에서 처리됩니다. 삽입 작업을 시도 할 때 반환 된 오류를 처리해야하지만, 더 우아한 해결책입니다.

그러나 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 

그러나 그것은 당신의 목표를 달성해야합니다, 당신은, 열 분석, 및 양식이 제출 될 때마다 확인해야합니다 점에서, 비 확대됨입니다.

가짜 코드가 충분하지 않으면 알려주세요. 코드를 작성할 수 있습니다. --Edit--

다음은 당신이 당신의 문제를 해결하기 위해 데이터베이스 솔루션을 통합하는 방법에 시작하는 몇 가지 링크입니다. 이 주제에 대한 풍부한 정보가 그대로 그냥 당신이 시작하는 데 있습니다

데이터베이스 설계 : 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 : 시작하기 위해 몇 가지 링크로 게시물을 업데이트했습니다. –

관련 문제