使用php在csv文件中保存数据

使用php在csv文件中保存数据,php,forms,csv,input,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_e

我从表单中获取数据,并使用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);
}
?>
在此处输入代码

默认情况下,CSV文件使用逗号作为字段分隔符,因此,如果该值包含任何逗号,则需要以与包含空格时相同的方式引用该值。如果使用“文件内容”,则需要手动执行以下操作:

<?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\u APPEND标志,file\u put\u 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标志的作用相同。因此,也无需事先检查文件是否存在。

如何保存3-4个字段每次调用fputcsv函数时,它会写入一行$字段是一个数组,每个元素从左到右都是csv文件中的一个字段。因此,要写入多个字段,只需向数组中添加更多项即可。对于需要跳过的字段,请使用空字符串。