使用PHP将数据保存在CSV文件中

时间:2019-02-26 23:01:54

标签: php forms csv input

我正在从表单中获取数据,并使用PHP将其保存在CSV文件中。我在表单中的一个字段中包含逗号,即两个单词之间有一个逗号,我需要将其存储在CSV文件中并以逗号分隔。但是,当我保存它时,左和右逗号的值存储在不同的行中。我该怎么做? 我的代码是:

enter code here
<?php
//read data from form
$food = filter_input(INPUT_POST, "food"); 
$output = $food . "\n";
$fp="input.csv";
if (file_exists($fp)) {
file_put_contents($fp, $output, FILE_APPEND);
}
else {
file_put_contents($fp, $output);
}
?>

1 个答案:

答案 0 :(得分:1)

默认情况下,CSV文件使用逗号作为字段分隔符,因此,如果该值包含任何逗号,则必须使用与引号相同的方式对其进行引用(如果它包含空格)。如果使用“ file_put_contents”,则需要使用类似以下内容的方法手动完成此操作:

<?php
//read data from form
$food = filter_input(INPUT_POST, "food"); 
$output = preg_match('/[, ]/', $food) ? "\"$food\"\n" : "$food\n";
file_put_contents('input.csv', $output, FILE_APPEND);
?>

“ preg_match”函数检查$ food中是否有逗号或空格,如果找到,则$ food用双引号引起来并添加换行符,否则仅添加换行符。

还请注意,您不需要检查文件是否已经存在,因为如果不存在,则无论您是否使用FILE_APPEND标志,file_put_contents函数都会自动创建该文件。

但是更好的解决方案是使用CSV特定功能,这些功能会自动为您执行任何必要的引用或转义操作:

<?php
//read data from form
$food = filter_input(INPUT_POST, "food"); 
$fields = array($food);
$fp = fopen('input.csv', 'a+');
fputcsv($fp, $fields);
fclose($fp);
?>

在“ a +”模式下使用fopen会使它的行为与file_put_contents的FILE_APPEND标志相同。因此,也无需事先检查文件是否存在。