Omdat ik hier al een paar keren goed ben geholpen. een nieuwe vraag.
Dit is de foutmelding:
rouwbrief010000
Fatal error: Uncaught Error: Call to undefined function mysql_fetch_assoc() in /customers/1/5/0/fv-vl-ardennen.be/httpd.www/beheerder/export_naar_csv.php:25
Stack trace:
#0 {main}
thrown in /customers/1/5/0/fv-vl-ardennen.be/httpd.www/beheerder/export_naar_csv.php on line 25
En zoals altijd zie ik het niet. Geprobeerdmet qoutes, bacticks enz.
Dit is mijn code:
<?php
// output headers so that the file is downloaded rather than displayed
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
 // mysql database connection details
    include '../instellingen.php';
	// gegevens uit een keuzeformulier waar ze bestand en begin en eindrecord kunnen kiezen.
	$bestand = $_POST['bestand']; echo $bestand;
	$beginrec = $_POST['beginrec']; echo $beginrec;
	$eindrec = $_POST['eindrec']; echo $eindrec;
	
    // open connection to mysql database
    $conn = new mysqli($database_adres, $database_login_naam, $database_login_wachtwoord, $database_naam);
    //connectie testen
	if ($conn->connect_error)
{
	die("verbinding mislukt: ".$conn->connect_error);
} 
	
    // fetch mysql table rows
    $sql = "select * from $bestand WHERE IDR BETWEEN $beginrec AND $eindrec";
   $result = $conn->query($sql); 

    $fp = fopen('books.csv', 'w');

	while ($row = mysql_fetch_assoc($result)) fputcsv($fp, $row);
    
    fclose($fp);

    //close the db connection
    mysqli_close($connection);
?>


En hier heb ik mijn mosterd gehaald:
https://code.iamkate.com/php/creating-downloadable-csv-files/
iemand enig idee waar ik in de fout ga?
Ik zie gewoon dat er in de map waar het script staat er een bestandje wordt aangemaakt en telkens wordt overschreven met hetgeen ik vraag. Daar zorgt dit voor:
	$fp = fopen('books.csv', 'w');

Er staat daar een bestandje books.csv met de inhoud die ik vraag. Die headers zorgen er wel voor dat ik een schermpje krijg met de keuze om het bestand te openen met excell of het weg te schrijven naar een map op mijn PC maar dat bestandje is leeg. Alle bronnen die ik tot nu toe geraadpleegd heb houden diezelfde header syntax aan.
Op basis van dit :

https://stackoverflow.com/questions/16251625/how-to-create-and-download-a-csv-file-from-php-script

Heb ik dit gemaakt :

<?php
function array_csv_download( $array, $filename = "export.csv", $delimiter=";" )
{
	header( 'Content-Type: application/csv' );
	header( 'Content-Disposition: attachment; filename="' . $filename . '";' );

	// clean output buffer
	ob_end_clean();
	
	$handle = fopen( 'php://output', 'w' );

	// use keys as column titles
	fputcsv( $handle, array_keys( $array['0'] ) , $delimiter );

	foreach ( $array as $value ) {
		fputcsv( $handle, $value , $delimiter );
	}

	fclose( $handle );

	// flush buffer
	ob_flush();

	// use exit to get rid of unexpected output afterward
	exit();
}

include('class_login_credentials.php');
$db = new mysqli($dblogin['host'],$dblogin['user'],$dblogin['pass'],$dblogin['db'],$dblogin['port']);
$db->set_charset("utf8mb4");

$query = "SELECT *
FROM `make_models_2_7_15`
LIMIT 50";

$result = $db->query( $query );
$models = $result->fetch_all(MYSQLI_ASSOC);
//echo '<pre>' . print_r( $models, TRUE ) . '</pre>';
array_csv_download( $models );
?>
mijn bedoeling was dat Ignace door zou krijgen dat hij niets naar de browser stuurt.

Dat je script een bestand aanmaakt, wil niet zeggen dat er iets naar de browser gaat. Zoals je zegt: dat bestand wordt op de server aangemaakt.
Maar de output van je script zou ook kunnen zijn "he gebruiker, het is gelukt".

Het is niet zo dat dat bestandje magisch naar de browser gestuurd wordt. Stel dat je 2 bestanden aanmaakt, een csv een een gifje: welke moet dan naar de browser?

Het voorbeeld van Adoptive doet wel iets magisch:
de regel
$handle = fopen( 'php://output', 'w' );

Zegt: doe net of je een bestand aanaakt, maar stuur de inhoud naar de standaard output van PHP (de browser).

Het bestand wordt in dat geval niet opgeslagen op de server.
Je zou als dat wel nodig is, het bestand ook op kunnen slaan op de server en dan met https://www.php.net/readfile het naar de browser sturen.
Ondertussen nog eens gekeken naar een van mijn eerste linken waarmee het gestart is. https://code.iamkate.com/php/creating-downloadable-csv-files/
En ik her er nu dit van gemaakt:
$fp = fopen('php://output', 'w');

En nu werkt het wel. Het doel moet niet zijn 'books.csv' maar 'php://output'.
Nu nog eens zoeken hoe ik de separator die standaard op "," (komma) staat kan veranderen naar ";". Dat is in elk geval het derde argument in de fputcsv('file','fields','separator'). Dit '";"' werkt blijkbaar niet ook dit 'chr(59)' niet zoals ik al een suggestie vond.
Uitzoeken hoe je een , in een ; verandert.

Je geeft aan hoe je dat moet doen en dan nog lukt het je om het fout te doen.

Wijzig dit :

fputcsv('file','fields','separator')


In dit :

fputcsv('file','fields',';')

";", ';', en '";"' en 'chr(59)' werken niet. Allemaal geprobeerd. Het blijft gescheiden met een komma. Nog andere mogelijkheden? Of het zou moeten zijn dat het in plaats van single quotes, backtics zijn ;-) maar dat heb ik nog nergens vermeld gezien en op het scherm is dat ook niet altijd goed te zien. Het is niet van levensbelang. Ik kan er mee leven. Maar het is makkelijker met de punt komma omdat excel dat dat direct opent op de juiste manier. Met komma gescheiden moet je een lege excel openen en de gegevens inlezen waarbij je kan aangeven dat de komma als scheidingsteken gebruikt wordt. Een beetje omslachtiger.
Met deze vereenvoudigde code uit je link :

<?php
// output headers so that the file is downloaded rather than displayed
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');

// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');

// output the column headings
fputcsv($output, array('Column 1', 'Column 2', 'Column 3'), ';');
fputcsv($output, array('data 1', 'data 2', 'data 3'), ';');
?>


Krijg ik deze output naar een bestand :

"Column 1";"Column 2";"Column 3"
"data 1";"data 2";"data 3"
Door er mij blind op te staren was ik bezig in die fopen(x,w). Het is zoals Adoptive Solution zegt. Nu werkt het. Sorry maar ik had blijkbaar een blackout of iets dergelijks waardoor ik het niet meer juist zag.
Dus bij deze opgelost. Bedankt allemaal voor het geduld.

Reageren