I have an html form on my web site. When the form is filled out and the submit button is clicked the data is stored on my server in a csv text file. I want to add a column header row if it doesn’t exist. My code adds the header each time new data is entered whether it exists or not, even though I have an if statement that says add if the header row does not exist. What do I need to change so that the column header row only gets added if it doesn’t exist?
$fname = $_POST['fname'];
$address = $_POST['address'];
$city = $_POST['city'];
$yourzip = $_POST['yourzip'];
$header = "Name,address,city,ziprn";
$fp = fopen("protected/RaceName_2022-04-26_EntryList.txt", "a");
if (flock($fp, LOCK_EX)) {
if(!file_exists($header)) {
fwrite($fp, $header);
}
$savestring = $fname . "," . $address . "," . $city . "," . $yourzip . "rn";
fwrite($fp, $savestring);
flock($fp, LOCK_UN);
}
else {
echo "Error locking file!";
}
fclose($fp);
echo "Data has been saved in <b><i>protected</i></b> folder";
?>
Advertisement
Answer
After much struggling I got it right. First check if the file exists before opening, if not add the header. Here is the code that works as expected.
$exists = file_exists("protected/RaceName_2022-04-26_EntryList.txt");
$header = "fName,address,city,yourzipr";
$fp = fopen("protected/RaceName_2022-04-26_EntryList.txt", "a");
if (flock($fp, LOCK_EX)) {
if (!$exists) {
fwrite($fp, $header);
}
$savestring = $fname . "," . $address . "," . $city . "," .
$yourzip . "r";
fwrite($fp, $savestring);
flock($fp, LOCK_UN);
}
Note, the end of the $header string, r, not rn, also the end of the $savestring, r not rn. With the n removed the line spacing is single. With the rn the line spacing is double.