Toon posts:

PHP export Mysql to CSV vraagje.

Pagina: 1
Acties:

Onderwerpen

Vraag


  • Gigazone
  • Registratie: februari 2008
  • Laatst online: 30-11 22:10
Ik ben net begonnen met PHP zelf te leren, veelal door te knippen en plakken en dingen op te zoeken op php.net.

Ik wil graag een mysql database exporteren naar csv dmv een php script.
Ik heb deze code gebruikt: https://gist.github.com/janschoepke/3e7a3639546d0d740c023e11289cf13d


Op het einde staat:
// Export the data and prompt a csv file for download
header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=".$csv_filename."");
echo($csv_export);
Wat er dus gebeurt is dat de csv file gemaakt wordt en er een popup dialog venster komt om de file te downloaden. Maar ik wil graag de file opslaan op de server. Ik kom er niet helemaal uit, ik heb geprobeerd met
file_put_contents($file, $current);...
Maar ik krijg het niet voor elkaar en ik weet niet helemaal waar ik moet zoeken. Enige pointers zouden welkom zijn.

Beste antwoord (via Gigazone op 26-03-2019 15:24)


  • johnkeates
  • Registratie: februari 2008
  • Laatst online: 25-11 21:46
Hoewel ik knippen en plakken niet meer zou aanraden en PHP ook niet, hierbij een hint:

header() maakt een HTTP header voor je, en echo() pleurt te content over de HTTP verbinding naar de browser. Die heb je waarschijnlijk niet nodig als je je data niet naar de browser wil sturen.

file_put_contents() verwacht twee dingen: file (een pad naar het bestand dat je wil vullen, hoeft niet te bestaan maar moet wel beschrijfbaar zijn), en de data die je er in wil stoppen. Die data is in jouw geval CSV data.

Alle reacties


Acties:
  • Beste antwoord
  • 0Henk 'm!

  • johnkeates
  • Registratie: februari 2008
  • Laatst online: 25-11 21:46
Hoewel ik knippen en plakken niet meer zou aanraden en PHP ook niet, hierbij een hint:

header() maakt een HTTP header voor je, en echo() pleurt te content over de HTTP verbinding naar de browser. Die heb je waarschijnlijk niet nodig als je je data niet naar de browser wil sturen.

file_put_contents() verwacht twee dingen: file (een pad naar het bestand dat je wil vullen, hoeft niet te bestaan maar moet wel beschrijfbaar zijn), en de data die je er in wil stoppen. Die data is in jouw geval CSV data.

  • Gigazone
  • Registratie: februari 2008
  • Laatst online: 30-11 22:10
Bedankt voor het antwoord.
johnkeates schreef op zondag 24 maart 2019 @ 22:58:
Hoewel ik knippen en plakken niet meer zou aanraden en PHP ook niet, hierbij een hint:
Waarom zou u php niet adviseren? Is er iets mis met php?

  • Groentjuh
  • Registratie: september 2011
  • Laatst online: 05-12 11:43
Hij raadt PHP niet af; Alleen het plakken en knippen van code, die je niet begrijpt. Dat gaat nogal snel mis, omdat het dan bijvoorbeeld wel werkt maar bijvoorbeeld zo onveilig is als het maar kan.

  • q-enf0rcer.1
  • Registratie: maart 2009
  • Laatst online: 23:21
@Gigazone Waar gaat het precies mis? Wat voor foutmelding krijg je?

Ik zou eerst eens loggen of je de data wel ontvangt, en daarna kijken of de file_put_contents functie wel werkt met hardcoded data. Eerst even simpel beginnen voordat je het volledig dynamisch maakt.

  • DJMaze
  • Registratie: juni 2002
  • Niet online
https://php.net/fputcsv heb je nodig

[Voor 4% gewijzigd door DJMaze op 25-03-2019 22:17]

Maak je niet druk, dat doet de compressor maar


  • RobIII
  • Registratie: december 2001
  • Laatst online: 01:00

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Met file_put_contents kan 't net zo goed... dus ik zou graag wat onderbouwing zien behalve een linkje (en je weet best hoe 't hier werkt inmiddels ;) ). En ja, ik weet de verschillen donders goed; je hoeft 't niet aan mij uit te leggen maar aan TS.

[Voor 13% gewijzigd door RobIII op 25-03-2019 22:19]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • DJMaze
  • Registratie: juni 2002
  • Niet online
RobIII schreef op maandag 25 maart 2019 @ 22:18:
dus ik zou graag wat onderbouwing zien behalve een linkje (en je weet best hoe 't hier werkt inmiddels ;) ).
Voorkouwen mag ook niet op tweakers ;)

@Gigazone
Je hebt te maken met juiste quotation en (dot)comma scheidingen oplossen bij data die dat gebruikt.
Bijv. een mysql veld met de waarde '{"henk":2,"ingrid":1.0}'

Maak je niet druk, dat doet de compressor maar


  • RobIII
  • Registratie: december 2001
  • Laatst online: 01:00

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

DJMaze schreef op maandag 25 maart 2019 @ 22:31:
[...]

Voorkouwen mag ook niet op tweakers ;)
Er is een verschil tussen voorkauwen / op een zilveren presenteerblaadje kant-en-klare code / oplossingen aanreiken of uitleggen waarom iemand iets zou moeten doen / nodig hebben. En kom op, laten we nou geen flauwe discussie hierover gaan voeren. Je loopt hier lang genoeg rond om dat te weten ;) :>

[Voor 19% gewijzigd door RobIII op 25-03-2019 22:38]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Gigazone
  • Registratie: februari 2008
  • Laatst online: 30-11 22:10
Het is inmiddels gelukt. Ik heb het headers gedeelte verwijderd en blijkbaar zat er nog caching in de browser ofzo want ineens wordt het bestand wel opgeslagen. Bedankt voor de pointer

  • DJMaze
  • Registratie: juni 2002
  • Niet online
https://gist.github.com/j...9546d0d740c023e11289cf13d heeft bugs.

Voor mensen die last hebben van de bugs uit die code, dan kan je vanaf regel 22 zoiets als dit gebruiken (het helpt je op weg, er zit ook een bug in):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// query to get data from database
$query = mysqli_query($conn, "SELECT * FROM {$db_record} {$where}");

$delimiter = ',';
$enclosure = '"';
$filename  = 'php://output';

if ($fp = fopen($filename, 'w')) {
    // create line with field names
    $row = $query->fetch_assoc();
    fputcsv($fp, array_keys($row), $delimiter, $enclosure);

    // loop through database query and fill export variable
    do {
        fputcsv($fp, $row, $delimiter, $enclosure);
    } while ($row = $query->fetch_row());

    fclose($fp);
}

[Voor 3% gewijzigd door DJMaze op 27-03-2019 08:11]

Maak je niet druk, dat doet de compressor maar

Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee