SELECT FROM syntax
Pagina: « vorige 1 2 3 volgende »
Dat lijkt mij nog altijd beter dan om alles plat te spuiten met een prepared statements laag en daarmee aan te moedigen niet verder na te denken over wat je doet.
Tevens: getallen volgen een andere sortering dan strings. Als je je daar in je queries niet bewust van bent kan dit rare resultaten opleveren.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
mysql> SELECT '200' BETWEEN '1' AND '3';
+---------------------------+
| '200' BETWEEN '1' AND '3' |
+---------------------------+
| 1 |
+---------------------------+
1 row in set (0.00 sec)
+---------------------------+
| '200' BETWEEN '1' AND '3' |
+---------------------------+
| 1 |
+---------------------------+
1 row in set (0.00 sec)
Ik had laatst serieus een programmeur die gebruik maakte van PDO en zich afvroeg waarom een query geen foutmelding opleverde. Deze query vroeg informatie op uit een tabel middels een id uit de URL. In de URL vulde hij echter zoiets in als ?id=aap. In plaats van een foutmelding leverde dit gewoon geen resultaat op (omdat je tussenlaag van alles voor je aanpast). De programmeur begreep niet waarom.
Je zou dan kunnen stellen dat dit soort lagen hun doel voorbij zijn geschoten, maar ook dat zo'n laag alleen niet genoeg is.
Af en toe behoor je je input gewoon te filteren en vaak (nagenoeg altijd) is het verstandig om output te escapen. Dit is bijna fundamenteel voor het schrijven van "veilige code" dus ik snap niet dat dit wordt afgeraden om aan te leren aan beginners omdat dit te geavanceerd zou zijn.
En tot slot: Wat helemaal funest is, is als je eigenlijk geen weet hebt van wtf je aan het doen bent. Op het moment dat je aan de slag gaat met databases dan moet je je vertrouwd gaan maken (of het al zijn) met een aantal onderwerpen.
Gewijzigd op 09/03/2015 14:06:22 door Thomas van den Heuvel
Ivo P op 09/03/2015 13:15:18:
hij converteert '200' naar 200.
Vervolgens staat er dus WHERE employee_id = 200
dus dan lijkt me daar niets aan de hand
Vervolgens staat er dus WHERE employee_id = 200
dus dan lijkt me daar niets aan de hand
Hieruit blijkt nog steeds niet of het record wordt opgezocht door middel van een index lookup of een full table scan. In extreme gevallen kan dat het verschil zijn tussen het terugkrijgen van het record in een paar milliseconden of een paar minuten.
$FTGbegindatum = ( $_POST['begindatum'] );
$FTGeinddatum = ( $_POST['einddatum'] );
en vervolgens dit:
$sql_query = "select datum,factnr,email,verkoper from $table WHERE datum BETWEEN '". $FTGbegindatum ."' AND '". $FTGeinddatum ."'";
Ik begrijp dat dit niet veilig is.
Dus wil ik graag leren en begrijpen wat wel veilig is.
Verder moet je $_POST, $_GET en $_COOKIE-variabelen in een query altijd escapen met mysql(i)_real_escape_string() om SQL-injection te voorkomen.
Verder gebruiken we voor de leesbaarheid altijd hoofdletter voor MySQL-functies, en bij lange queries kan het geen kwaad om er wat enters tussenin te plaatsen.
Dit werkt:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$sql_query = "SELECT datum,factnr,email,verkoper FROM $table
WHERE datum BETWEEN '2015-02-01' AND '2015-02-28'";
?>
$sql_query = "SELECT datum,factnr,email,verkoper FROM $table
WHERE datum BETWEEN '2015-02-01' AND '2015-02-28'";
?>
Hier krijg ik netjes de data tussen de 2 datums.
Dit werkt niet:
Code (php)
1
2
3
4
2
3
4
<?php
$sql_query = "SELECT datum,factnr,email,verkoper FROM $table
WHERE datum BETWEEN '".mysqli_real_escape_string($link, $_POST['date_5ISO8601'])."' AND '".mysqli_real_escape_string($link, $_POST['date_6ISO8601'])."'";
?>
$sql_query = "SELECT datum,factnr,email,verkoper FROM $table
WHERE datum BETWEEN '".mysqli_real_escape_string($link, $_POST['date_5ISO8601'])."' AND '".mysqli_real_escape_string($link, $_POST['date_6ISO8601'])."'";
?>
Ik krijg een leeg csv bestand. Ook als ik 'begindatum' en 'einddatum' neem
Dit is het stukje code in het formulier (alleen voor de 1e datum, 2e datum is idem)
Ik gebruik Webplus8 om de site te maken
<html>
<input name="begindatum" class="OBJ-3" type="text" id="date_5" __AddCode="here" style="position:absolute;left:139px;top:27px;width:200px;height:22px;/*Add Style*/">
<script type="text/javascript">
$(function() {
$( "#date_5" ).datepicker({ beforeShow: function(input, inst) { setDatepickerCss(input); } });
$( "#date_5" ).datepicker( "option", $.datepicker.regional[ "nl" ] );
$( "#date_5" ).datepicker( "option", "dateFormat", "yy-mm-dd" );
$( "#date_5" ).datepicker( "option", "prevText", "" );
$( "#date_5" ).datepicker( "option", "nextText", "" );
$( "#date_5" ).datepicker( "option", "altField", "#date_5ISO8601" );
$( "#date_5" ).datepicker( "option", "altFormat", "yy-mm-dd" );
/*Add Script Here*/
});
</script>
<!--Postamble for Form Date Picker date_5-->
<input type="hidden" name="date_5ISO8601" id="date_5ISO8601">
</html>
Als ik dit stukje code uitvoer dan komen de datums wel op het uitvoerscherm dus is het blijkbaar niet aan de $POST gelegen.
<html>
<head>
<title>Form</title>
</head>
<body>
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$FTGdatum1 =($_POST['date_5ISO8601']);
$FTGdatum2 =($_POST['date_6ISO8601']);
echo "<h1>Hello " .$FTGdatum1. " - " .$FTGdatum2. "</h1>";
// input ophalen
?>
$FTGdatum1 =($_POST['date_5ISO8601']);
$FTGdatum2 =($_POST['date_6ISO8601']);
echo "<h1>Hello " .$FTGdatum1. " - " .$FTGdatum2. "</h1>";
// input ophalen
?>
</body>
</html>
Misschien nuttig: In de database is het veld datum van het type "date" jaar-maand-dag
Gelukkig ben ik al grijs, mijn haar kan alleen nog uitvallen. ;-)
En als je "yy-mm-dd" verandert in "yyyy-mm-dd"?
Ik probeer het nog eens met een ander veld zoals verkoper of zoiets. where verkoper = input formulierveld.
Toevoeging op 16/03/2015 21:23:19:
Nog eens op een rijtje:
Uit te voeren script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$host = 'xxx'; // MYSQL database host adress
$db = 'xxx'; // MYSQL database name
$user = 'xxx'; // Mysql Datbase user
$pass = 'xxx'; // Mysql Datbase password
// Connect to the database
$link = mysql_connect($host, $user, $pass);
mysql_select_db($db);
require 'exportcsv1.inc.php';
$table="eva_tevr"; // this is the tablename that you want to export to csv from mysql.
exportMysqlToCsv($table);
?>
$host = 'xxx'; // MYSQL database host adress
$db = 'xxx'; // MYSQL database name
$user = 'xxx'; // Mysql Datbase user
$pass = 'xxx'; // Mysql Datbase password
// Connect to the database
$link = mysql_connect($host, $user, $pass);
mysql_select_db($db);
require 'exportcsv1.inc.php';
$table="eva_tevr"; // this is the tablename that you want to export to csv from mysql.
exportMysqlToCsv($table);
?>
2e script exportcsv1.inc.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
function exportMysqlToCsv($table,$filename = 'export.csv')
{
$csv_terminated = "\n";
$csv_separator = ";";
$csv_enclosed = '"';
$csv_escaped = "\\";
$sql_query = "SELECT datum,factnr,email,verkoper,vriendwin,uitleg,crossel,aanbod,conform,opm_winkel FROM $table
WHERE 'verkoper' = '".mysqli_real_escape_string($link, $_POST['verkoper'])."'";
// Gets the data from the database
$result = mysql_query($sql_query);
$fields_cnt = mysql_num_fields($result);
$schema_insert = '';
for ($i = 0; $i < $fields_cnt; $i++)
{
$l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed,
stripslashes(mysql_field_name($result, $i))) . $csv_enclosed;
$schema_insert .= $l;
$schema_insert .= $csv_separator;
} // end for
$out = trim(substr($schema_insert, 0, -1));
$out .= $csv_terminated;
// Format the data
while ($row = mysql_fetch_array($result))
{
$schema_insert = '';
for ($j = 0; $j < $fields_cnt; $j++)
{
if ($row[$j] == '0' || $row[$j] != '')
{
if ($csv_enclosed == '')
{
$schema_insert .= $row[$j];
} else
{
$schema_insert .= $csv_enclosed .
str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $row[$j]) . $csv_enclosed;
}
} else
{
$schema_insert .= '';
}
if ($j < $fields_cnt - 1)
{
$schema_insert .= $csv_separator;
}
} // end for
$out .= $schema_insert;
$out .= $csv_terminated;
} // end while
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length: " . strlen($out));
// Output to browser with appropriate mime type, you choose ;)
header("Content-type: text/x-csv");
//header("Content-type: text/csv");
//header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=$filename");
echo $out;
exit;
}
?>
function exportMysqlToCsv($table,$filename = 'export.csv')
{
$csv_terminated = "\n";
$csv_separator = ";";
$csv_enclosed = '"';
$csv_escaped = "\\";
$sql_query = "SELECT datum,factnr,email,verkoper,vriendwin,uitleg,crossel,aanbod,conform,opm_winkel FROM $table
WHERE 'verkoper' = '".mysqli_real_escape_string($link, $_POST['verkoper'])."'";
// Gets the data from the database
$result = mysql_query($sql_query);
$fields_cnt = mysql_num_fields($result);
$schema_insert = '';
for ($i = 0; $i < $fields_cnt; $i++)
{
$l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed,
stripslashes(mysql_field_name($result, $i))) . $csv_enclosed;
$schema_insert .= $l;
$schema_insert .= $csv_separator;
} // end for
$out = trim(substr($schema_insert, 0, -1));
$out .= $csv_terminated;
// Format the data
while ($row = mysql_fetch_array($result))
{
$schema_insert = '';
for ($j = 0; $j < $fields_cnt; $j++)
{
if ($row[$j] == '0' || $row[$j] != '')
{
if ($csv_enclosed == '')
{
$schema_insert .= $row[$j];
} else
{
$schema_insert .= $csv_enclosed .
str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $row[$j]) . $csv_enclosed;
}
} else
{
$schema_insert .= '';
}
if ($j < $fields_cnt - 1)
{
$schema_insert .= $csv_separator;
}
} // end for
$out .= $schema_insert;
$out .= $csv_terminated;
} // end while
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length: " . strlen($out));
// Output to browser with appropriate mime type, you choose ;)
header("Content-type: text/x-csv");
//header("Content-type: text/csv");
//header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=$filename");
echo $out;
exit;
}
?>
Dit loopt goed tot ik er deze WHERE conditie bij zet.
Ik heb nu eens foutmeldingen aangezet. Misschien geraakt er nog iemand wijs uit. Ik in elk geval niet meer.
Om het simpel te maken heb ik nu gekozen voor verkoper. Als je Annelies kiest moet er zeker iets uitkomen.
Maar ik krijg een lege tabel met tabelnamen weliswaar.
Probeer maar eens op www.telecomvanassche.be/resultaten.html
En ik die dacht om het wat simpeler te maken voor mijn collega's.
En waar komt $link vandaan?
// Connect to the database
$link = mysql_connect($host, $user, $pass);
mysql_select_db($db);
Ik heb daarnet nog zitten googelen en ik kreeg al een donkerblauw vermoeden dat de knoop daar ergens zat. Nu nog uitvlooien hoe ik het kan aanpassen en wat ik moet aanpassen.
Ik heb al geprobeerd om er dit van te maken:
$sql_query = "SELECT datum,factnr,email,verkoper,vriendwin,uitleg,crossel,aanbod,conform,opm_winkel FROM $table
WHERE 'verkoper' = '".mysql_real_escape_string($link, $_POST['verkoper'])."'";
Maar dat is het blijkbaar ook niet.
Gewijzigd op 16/03/2015 21:55:11 door Ignace Verschaeve
Dit kan je onder andere oplossen door
global $link;
bovenin de function te zetten.
Tenzij er een verkoper is die 'verkoper' heet zal dit geen resultaat opleveren.
Ger van Steenderen op 16/03/2015 22:32:28:
WHERE 'verkoper' = '".mysql_real_escape_string($link, $_POST['verkoper'])."'";
Tenzij er een verkoper is die 'verkoper' heet zal dit geen resultaat opleveren.
Tenzij er een verkoper is die 'verkoper' heet zal dit geen resultaat opleveren.
Droge vaststelling waar ik niet veel mee ben.
Ik dacht dat dit gewoon wilde zeggen "Where" inhoud veld verkoper gelijk is aan "$Post" zijnde de inhoud opgegeven in het formulierveld. Zo heb ik het toch geleerd. Als ik schrijf Where verkoper = Annelies dan werkt het wel. Ik laat in het midden of er rond verkoper quotes moeten staan of niet maar dat is nu niet de oorzaak dat het niet werkt.
Ignace Verschaeve op 16/03/2015 18:19:44:
Probeer maar eens op www.telecomvanassche.be/resultaten.html
Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in /customers/4/f/3/telecomvanassche.be/httpd.www/exportcsv1.inc.php on line 10 Warning: Cannot modify header information - headers already sent by (output started at /customers/4/f/3/telecomvanassche.be/httpd.www/exportcsv1.inc.php:10) in /customers/4/f/3/telecomvanassche.be/httpd.www/exportcsv1.inc.php on line 63 Warning: Cannot modify header information - headers already sent by (output started at /customers/4/f/3/telecomvanassche.be/httpd.www/exportcsv1.inc.php:10) in /customers/4/f/3/telecomvanassche.be/httpd.www/exportcsv1.inc.php on line 64 Warning: Cannot modify header information - headers already sent by (output started at /customers/4/f/3/telecomvanassche.be/httpd.www/exportcsv1.inc.php:10) in /customers/4/f/3/telecomvanassche.be/httpd.www/exportcsv1.inc.php on line 66 Warning: Cannot modify header information - headers already sent by (output started at /customers/4/f/3/telecomvanassche.be/httpd.www/exportcsv1.inc.php:10) in /customers/4/f/3/telecomvanassche.be/httpd.www/exportcsv1.inc.php on line 69 "datum";"factnr";"email";"verkoper";"vriendwin";"uitleg";"crossel";"aanbod";"conform";"opm_winkel"
WHERE verkoper = 'Annelies'
Om kolomnamen komen geen quotes. Plaats je daar wel quotes omheen, dan krijg je geen foutmelding, want het is niet fout, maar er komt ook bijna nooit een resultaat.
Zoals Ger stelt: alleen als de naam van de gezochte persoon gelijk is aan de kolomnaam
Je gebruikt een mysql_connect() om verbinding te maken met de database. Verwacht dan niet dat je mysqli_real_escape_string() kunt gebruiken. De mysql-functies zijn niet uitwisselbaar met mysqli-functies. Maar dat zei SanThe een paar posts geleden ook al. ;-)
Gewijzigd op 17/03/2015 11:54:15 door Willem vp
Ivo P op 17/03/2015 10:55:02:
het is
WHERE verkoper = 'Annelies'
Om kolomnamen komen geen quotes. Plaats je daar wel quotes omheen, dan krijg je geen foutmelding, want het is niet fout, maar er komt ook bijna nooit een resultaat.
Zoals Ger stelt: alleen als de naam van de gezochte persoon gelijk is aan de kolomnaam
WHERE verkoper = 'Annelies'
Om kolomnamen komen geen quotes. Plaats je daar wel quotes omheen, dan krijg je geen foutmelding, want het is niet fout, maar er komt ook bijna nooit een resultaat.
Zoals Ger stelt: alleen als de naam van de gezochte persoon gelijk is aan de kolomnaam
Zoals gezegd dat werkt zonder quotes rond verkoper. Maar het is wel de bedoeling dat de naam van de verkoper uit een keuzeveld uit een formulier komt. Dus het is voor mij duidelijk dat de verkregen naam uit het formulier naar de WHERE voorwaarde gebracht wordt. Verkoper is een variabel gegeven (Tom, Steven Annelies whatever)
WHERE verkoper = '".mysql_real_escape_string($link, $_POST['verkoper'])."'"
moet komen te staan. ;-) Zónder quotes om de tabelnaam en mét quotes om de formulier-input.
Gewijzigd op 17/03/2015 13:27:44 door Willem vp
mysql_real_escape_string() expects parameter 1 to be string, resource given in /customers/4/f/3/telecomvanassche.be/httpd.www/exportcsv1.inc.php on line 12
De oplossing:
$sql_query = "SELECT datum,factnr,email,verkoper,vriendwin,uitleg,crossel,aanbod,conform,opm_winkel FROM $table
WHERE verkoper = '".mysql_real_escape_string($_POST['verkoper'],$link)."'";
het argument $link moet als 2e staan en niet als eerste en nu werkt het.
Joepie.
Toevoeging op 17/03/2015 19:24:32:
Zoals gezegd het werkt voor de variabelen,verkoper en technieker. Maar nog altijd niet voor het opvragen van een bepaalde datum. Dus daar moet ik nog iets op vinden. Alle velden zijn of integer of Char of gelijkaardig enkel datum is van het type Date en ik denk dat daar iets misloopt met de omzetting of uitlezing. We blijven zoeken.
Maar op datum dat blijft blokkeren.
Ik krijg nu de volgende foutmelding:
Parse error: syntax error, unexpected 'Cache' (T_STRING) in /customers/4/f/3/telecomvanassche.be/httpd.www/exportcsv.inc.php on line 66
Niettegenstaande dat exact dezelfde lijn in de andere scripts voorkomt die sorteren op verkoper of technieker.
Nog eens de code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
function exportMysqlToCsv($table,$filename = 'export.csv')
{
global $link;
$csv_terminated = "\n";
$csv_separator = ";";
$csv_enclosed = '"';
$csv_escaped = "\\";
$sql_query = "SELECT datum,factnr,email,verkoper,vriendwin,uitleg,crossel,aanbod,confom,opm_winkel FROM $table
WHERE datum BETWEEN '".mysql_real_escape_string($_POST['date_1ISO8601'],$link)."'
AND '".mysql_real_escape_string($_POST['date_2ISO8601'],$link)."';
// Gets the data from the database
$result = mysql_query($sql_query);
$fields_cnt = mysql_num_fields($result);
$schema_insert = '';
for ($i = 0; $i < $fields_cnt; $i++)
{
$l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed,
stripslashes(mysql_field_name($result, $i))) . $csv_enclosed;
$schema_insert .= $l;
$schema_insert .= $csv_separator;
} // end for
$out = trim(substr($schema_insert, 0, -1));
$out .= $csv_terminated;
// Format the data
while ($row = mysql_fetch_array($result))
{
$schema_insert = '';
for ($j = 0; $j < $fields_cnt; $j++)
{
if ($row[$j] == '0' || $row[$j] != '')
{
if ($csv_enclosed == '')
{
$schema_insert .= $row[$j];
} else
{
$schema_insert .= $csv_enclosed .
str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $row[$j]) . $csv_enclosed;
}
} else
{
$schema_insert .= '';
}
if ($j < $fields_cnt - 1)
{
$schema_insert .= $csv_separator;
}
} // end for
$out .= $schema_insert;
$out .= $csv_terminated;
} // end while
[b]// Hier loopt het fout.[/b]
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length: " . strlen($out));
// Output to browser with appropriate mime type, you choose ;)
header("Content-type: text/x-csv");
//header("Content-type: text/csv");
//header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=$filename");
echo $out;
exit;
}
?>
function exportMysqlToCsv($table,$filename = 'export.csv')
{
global $link;
$csv_terminated = "\n";
$csv_separator = ";";
$csv_enclosed = '"';
$csv_escaped = "\\";
$sql_query = "SELECT datum,factnr,email,verkoper,vriendwin,uitleg,crossel,aanbod,confom,opm_winkel FROM $table
WHERE datum BETWEEN '".mysql_real_escape_string($_POST['date_1ISO8601'],$link)."'
AND '".mysql_real_escape_string($_POST['date_2ISO8601'],$link)."';
// Gets the data from the database
$result = mysql_query($sql_query);
$fields_cnt = mysql_num_fields($result);
$schema_insert = '';
for ($i = 0; $i < $fields_cnt; $i++)
{
$l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed,
stripslashes(mysql_field_name($result, $i))) . $csv_enclosed;
$schema_insert .= $l;
$schema_insert .= $csv_separator;
} // end for
$out = trim(substr($schema_insert, 0, -1));
$out .= $csv_terminated;
// Format the data
while ($row = mysql_fetch_array($result))
{
$schema_insert = '';
for ($j = 0; $j < $fields_cnt; $j++)
{
if ($row[$j] == '0' || $row[$j] != '')
{
if ($csv_enclosed == '')
{
$schema_insert .= $row[$j];
} else
{
$schema_insert .= $csv_enclosed .
str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $row[$j]) . $csv_enclosed;
}
} else
{
$schema_insert .= '';
}
if ($j < $fields_cnt - 1)
{
$schema_insert .= $csv_separator;
}
} // end for
$out .= $schema_insert;
$out .= $csv_terminated;
} // end while
[b]// Hier loopt het fout.[/b]
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length: " . strlen($out));
// Output to browser with appropriate mime type, you choose ;)
header("Content-type: text/x-csv");
//header("Content-type: text/csv");
//header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=$filename");
echo $out;
exit;
}
?>
Gewijzigd op 20/03/2015 19:15:06 door Ignace Verschaeve
op regel 12 aan het einde mist een " voor de ;