2015-02-10 115 views
0

我是新来的PHP,无法弄清楚这一点。将输入写入CSV

我有2个输入(姓名和电子邮件)。我需要将它写入CSV文件并单击下载。我发现我需要fputcsv()函数并形成阵列数组...

但不知何故,我不能看到如何正确地形成该数组... ...有人可以给我一个提示?

林已经wirting到txt文件......而仅仅倾斜它转换为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

@Carsten:_“不需要fputcsv或任何东西”_ - 是的,需要。只要其中一个值包含分隔符,您的简单解决方案就会中断。 – CBroe 2015-02-10 08:01:02

回答

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

谢谢Wim的答案。我的解决方案是几乎相同,但只是在有人需要它的情况下:

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']); 
     } 
    }