2015-02-10 3 views
0

Im новое для PHP и не могу понять это.Запись входов в CSV

У меня есть 2 входа (имя и адрес электронной почты). Мне нужно записать его в файл CSV и загрузить по клику. Я выяснил, что мне нужна функция fputcsv() и сформировать массив массивов ...

Но почему-то я не могу понять, как правильно сформировать этот массив ... Может кто-нибудь подскажет мне?

Im уже wirting в текстовый файл ... но просто не могу преобразовать его в формат CSV ...

public function invokeAction(CakeRequest $request){ 
     if ($this->request->is('post')) { 
      if(isset($_POST['subName']) && isset($_POST['subEmail'])) { 
      $data = $_POST['subName'] . '-' . $_POST['subEmail'] . "\n"; 
      $ret = file_put_contents('../tmp/subs.txt', $data, FILE_APPEND | LOCK_EX); 
      unset($_POST['subName']); 
      unset($_POST['subEmail']); 
     } 
    } 
+0

@ Карстен: _ «Нет необходимости в fputcsv или что-нибудь» _ - да, нужно. Ваше простое решение сломается, как только одно из значений содержит разделитель. – CBroe

ответ

0

Единственное, что вам нужно сделать, это заменить тире между подимени и subEmail с «» и переименуйте файл в subs.csv.

public function invokeAction(CakeRequest $request){ 
     if ($this->request->is('post')) { 
      if(isset($_POST['subName']) && isset($_POST['subEmail'])) { 
      $data = $_POST['subName'] . ',' . $_POST['subEmail'] . "\n"; 
      $ret = file_put_contents('../tmp/subs.csv', $data, FILE_APPEND | LOCK_EX); 
      unset($_POST['subName']); 
      unset($_POST['subEmail']); 
     } 
    } 

CSV не является специальным файловым форматом. Это просто текст с определенным форматом.

0

Благодарим вас за ответ. Мое решение почти такое же, но на всякий случай, если это кому-то понадобится:

public function invokeAction(CakeRequest $request){ 
     if ($this->request->is('post')) { 
      if(isset($_POST['subName']) && isset($_POST['subEmail'])) { 
      // $data = $_POST['subName'] . '-' . $_POST['subEmail'] . "\n"; 
      $subName=$_POST['subName']; 
      $subEmail=$_POST['subEmail']; 
      $subs[] = array("$subName","$subEmail"); 
      //$ret = file_put_contents('../tmp/subs.txt', $data, FILE_APPEND | LOCK_EX); 
      $fp = fopen('../webroot/subs.csv', 'a'); 
      foreach ($subs as $fields) { 
       fputcsv($fp, $fields); 
      } 
      fclose($fp); 
      unset($_POST['subName']); 
      unset($_POST['subEmail']); 
     } 
    }