Reputation: 35
I have the following PHP script for creating CSV and collecting data from HTML form to CSV file, but I can't add headers to the first row of CSV file. I'm a newbie in PHP world so I'll appreciate if anyone can use this code to help me with that:
<?php
$fieldA = $_POST["prezime"];
$fieldB = $_POST["ime"];
$fieldC = $_POST["datumrodjenja"];
$fieldD = $_POST["mestorodjenja"];
$fieldE = $_POST["rod"];
$fieldF = $_POST["prebivaliste"];
$fieldG = $_POST["brojpasosa"];
$fieldH = $_POST["izdatod"];
$fieldI = $_POST["vazido"];
$fieldJ = $_POST["profesija"];
$fieldK = $_POST["zanimanje"];
$fieldL = $_POST["fiksni"];
$fieldM = $_POST["mobilni"];
$fieldN = $_POST["email"];
$fieldO = $_POST["napomena"];
$keys = array($fieldA,$fieldB,$fieldC,$fieldD,$fieldE,$fieldF,$fieldG,$fieldH,$fieldI,$fieldJ,$fieldK,$fieldL,$fieldM,$fieldN,$fieldO); //THIS IS WHERE YOU PUT THE FORM ELEMENTS ex: array('$fieldA','$fieldB',etc)
$fname = 'prijave.csv';
$fp = fopen($fname,'a');
//add BOM to fix UTF-8 in Excel
fputs($fp, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
fputcsv($fp, $keys);
fclose($fp);
?>
Upvotes: 0
Views: 2295
Reputation: 1454
Please have a look at https://secure.php.net/manual/de/function.fputcsv.php to find out about how fputcsv actually works.
Each call of the function writes one line of CSV from an array to the specified file.
The very first example illustrates that very well:
<?php
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$fp = fopen('file.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>
Therefore, beefore writing your forst line of data you should use fputcsv to write your headers. In your case that would look like that:
$headers = array("prezime","ime","datumrodjenja","mestorodjenja","rod","prebivaliste","brojpasosa","izdatod","vazido","profesija","zanimanje","fiksni","mobilni","email","napomena");
$fname = 'prijave.csv';
$fp = fopen($fname,'a');
//add BOM to fix UTF-8 in Excel
fputs($fp, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
fputcsv($fp, $headers);
fputcsv($fp, $keys);
fclose($fp);
Upvotes: 1
Reputation: 19780
You could create a array with your keys, and create a loop to get values. Then use fputcsv()
to write header and values:
$keys = ["prezime", "ime", "datumrodjenja", "mestorodjenja", "rod", "prebivaliste",
"brojpasosa", "izdatod", "vazido", "profesija", "zanimanje", "fiksni", "mobilni",
"email", "napomena"];
$values = [];
foreach ($keys as $key)
$values[] = $_POST[$key];
$fname = 'prijave.csv';
$fp = fopen($fname,'a');
//add BOM to fix UTF-8 in Excel
fputs($fp, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
fputcsv($fp, $keys);
fputcsv($fp, $values);
fclose($fp);
Edit: To add values but not BOM and headers each time, you could check if the file exists, and add them only if the file is new:
// same code as above ($header + $values)
// then,
$fname = 'prijave.csv';
if (!file_exists($fname)) {
$fp = fopen($fname,'a');
//add BOM to fix UTF-8 in Excel
fputs($fp, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
fputcsv($fp, $keys);
}
else {
$fp = fopen($fname,'a');
}
fputcsv($fp, $values);
fclose($fp);
Upvotes: 3