Zoals gewoonte lees ik mijn SQL-resultaten uit in een HTML-tabel met een PHP-while-loop. Nu zou ik ook een CSV-bestand nodig hebben van deze HTML tabel die genereerd wordt via een PHP script. Heb al vanalles gegoogled in de aard van "PHP to CSV" e.d. maar er zit niets echt relevant tussen.
Is er iemand die mij een goede uitleg kan geven of mijn script kan aanpassen naar een CSV-schrijvend script?
Dat kan best makkelijk eigenlijk. Voor de mensen die niet weten wat een CSV is, het staat voor comma seperated values, oftewel waardes gescheiden door een komma, bv:
voornaam, achternaam, straat, 1, postcode
andere naam, andere achternaam, andere straat 2, postcode
<?php
$selectall = ("SELECT * FROM tbl");
while ($sa = mysql_fetch_array($selectall)) {
echo implode(", ",$sa); // per rij alles seperaten met een komma
echo "<br />"; // nieuwe regel voor makkelijke invoer
}
?>
echoimplode(", ",$sa);// per rij alles seperaten met een komma
echo"<br />";// nieuwe regel voor makkelijke invoer
}
?>
LET OP! Een csv hoeft niet persé met komma's, het teken in de implode kun je aanpassen, veel excel achtige programma's accepteren ook een custom seperator
EDIT: Je kunt ook een database rechtstreeks exporteren naar csv mocht je dat willen
Hartelijk dank voor het goede antwoord. Maar met welk script krijg ik de hele output in een CSV-bestand?
Bovendien werk ik ook met inner joins in mijn myqsl_query. Als ik jouw code uitvoer, krijg ik ook kolommen te zien uit de tabel die ik niet nodig heb. Waarschijnlijk omdat
// Als het maar een paar zijn die je er uit wilt kun je het zo doen:
$csvArray = $sa;
unset($csvArray['kolomDieIkNietWil'], $csvArray['andereKolomDieIkNietWil']);
$csvArray['id'] = 'prefix'.$csvArray['id']; // Waarde veranderen
$csvArray['prijsIncl'] = $sa["prijs"]*1.21;
// Als dit niet zo praktisch is, kun je altijd nog dit doen:
echo $var1.", ".$var2.", ".$var3;
// Als het maar een paar zijn die je er uit wilt kun je het zo doen:
Ik ben dus gegaan voor optie 2. Ik krijg nu volgende error: Fatal error: Uncaught exception 'Exception' with message 'Warning: fputcsv() expects parameter 2 to be array, string given in /home/...
$list = array(); // aangeven dat het een array is
while ($sa = mysql_fetch_array($selectall)) {
$prijs = $sa["prijs"]*1.21;
// Je noemt m $Array, maar dat was het niet, nu wel:
$Array = array("Prefix ". $sa["id"], $sa["voornaam"], $sa["achternaam"], $prijs, $afstand ." meter");
$list[] = $Array; // met de blokjes kun je een nieuwe toevoegen aan je lijst
}
// Hier heb je dus per listwaarde een array
// print_r($list); // als je het wilt zien
// ik weet niet waar je foreach voor was, maar volgens mij kan dit ook gewoon. Indien het per regel gaat, dan moet je een foreach doen op $list
$fp = fopen('export.csv', 'w');
fputcsv($fp, $list);
fclose($fp);