login  Naam:   Wachtwoord: 
Registreer je!
 Forum

PHP to CSV (Opgelost)

Offline levideridder - 26/08/2012 20:05
Avatar van levideridderLid Hallo,

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?

Alvast bedankt.

Levi

Code:
  1. <table>
  2. <thead>
  3. <th>ID</th>
  4. <th>Voornaam</th>
  5. <th>Achternaam</th>
  6. <th>Prijs incl BTW</th>
  7. <th>Afstand</th>
  8. </thead>
  9. <tbody>
  10. <?php
  11.  
  12. $selectall = ("SELECT * FROM tbl");
  13.  
  14. while ($sa = mysql_fetch_array($selectall)) {
  15.  
  16. $prijs = $sa["prijs"]*1.21;
  17.  
  18. echo "<tr>";
  19. echo "<td> Prefix" . $sa["id"] . "</td>";
  20. echo "<td>" . $sa["voornaam"] . "</td>";
  21. echo "<td>" . $sa["achternaam"] . "</td>";
  22. echo "<td>" . $prijs . "</td>";
  23. echo "<td>" . $afstand . " meter</td>";
  24. echo "</tr>";
  25.  
  26. ?>
  27. </tbody>
  28. </table>

6 antwoorden

Gesponsorde links
Offline Martijn - 26/08/2012 22:07 (laatste wijziging 26/08/2012 22:08)
Avatar van Martijn Crew PHP 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

  1. <?php
  2. $selectall = ("SELECT * FROM tbl");
  3.  
  4. while ($sa = mysql_fetch_array($selectall)) {
  5. echo implode(", ",$sa); // per rij alles seperaten met een komma
  6. echo "<br />"; // nieuwe regel voor makkelijke invoer
  7. }
  8. ?>


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 
Offline levideridder - 27/08/2012 09:05 (laatste wijziging 27/08/2012 09:18)
Avatar van levideridder Lid Beste Martijn,

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
  1. echo implode(", ",$sa);

er voor zorgt dat de hele query wordt uitgelezen.

In het startbericht van dit topic zie je ook dat ik bij ID een prefix wil toevoegen en bij $afstand het woord meter.
Offline Martijn - 27/08/2012 09:59 (laatste wijziging 27/08/2012 09:59)
Avatar van Martijn Crew PHP Een andere mogelijkheid is zo doen:

  1. // Als het maar een paar zijn die je er uit wilt kun je het zo doen:
  2. $csvArray = $sa;
  3. unset($csvArray['kolomDieIkNietWil'], $csvArray['andereKolomDieIkNietWil']);
  4.  
  5. $csvArray['id'] = 'prefix'.$csvArray['id']; // Waarde veranderen
  6. $csvArray['prijsIncl'] = $sa["prijs"]*1.21;
  7.  
  8.  
  9. // Als dit niet zo praktisch is, kun je altijd nog dit doen:
  10. echo $var1.", ".$var2.", ".$var3;
Offline levideridder - 27/08/2012 10:41 (laatste wijziging 27/08/2012 10:43)
Avatar van levideridder Lid 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/...

Code:
  1. while ($sa = mysql_fetch_array($selectall)) {
  2.  
  3. $prijs = $sa["prijs"]*1.21;
  4.  
  5. $Array = "Prefix ". $sa["id"].", ". $sa["voornaam"] .", " .$sa["achternaam"].", ".$prijs.", " .$afstand ." meter,";
  6.  
  7. }
  8.  
  9. $list = array (
  10. $Array
  11. );
  12.  
  13. $fp = fopen('export.csv', 'w');
  14.  
  15. foreach ($list as $fields) {
  16. fputcsv($fp, $fields);
  17. }
  18.  
  19. fclose($fp);


Als ik eens
  1. print_r($Array)
doe, ziet alles er wel goed uit, buiten de komma helemaal op het einde dan. Nu nog in de CSV krijgen.
Offline Martijn - 27/08/2012 11:57 (laatste wijziging 27/08/2012 11:58)
Avatar van Martijn Crew PHP Mja, die functie had je net ook nog niet genoemt Die moet je ook helemaal niet gebruiken in mijn voorbeeld.

  1. $list = array(); // aangeven dat het een array is
  2. while ($sa = mysql_fetch_array($selectall)) {
  3. $prijs = $sa["prijs"]*1.21;
  4.  
  5.  
  6. // Je noemt m $Array, maar dat was het niet, nu wel:
  7. $Array = array("Prefix ". $sa["id"], $sa["voornaam"], $sa["achternaam"], $prijs, $afstand ." meter");
  8.  
  9. $list[] = $Array; // met de blokjes kun je een nieuwe toevoegen aan je lijst
  10. }
  11. // Hier heb je dus per listwaarde een array
  12. // print_r($list); // als je het wilt zien
  13.  
  14. // 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
  15. $fp = fopen('export.csv', 'w');
  16. fputcsv($fp, $list);
  17. fclose($fp);
Bedankt door: levideridder
Offline levideridder - 27/08/2012 14:33
Avatar van levideridder Lid Perfect. Het script loopt precies zoals ik in gedachten had. Nu begrijp ik ook eindelijk wat dit script doet. Nogmaals heel erg bedankt Martijn!  
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.233s