Export to CSV. Maar werkt printf in een array wel?
Hieronder tref je stuk code die data uit een tabel exporteert naar csv bestand. Dit werkt op een kleinigheid na perfect voor mij.... Echter één van de velden bevat een nummer. Dat nummer zou altijd 6 karakters moeten zijn en indien nodig voorafgaan met voorloopnullen. Maar dit is niet zo eenvoudig als het lijkt te zijn.
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
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
<?php
// Database Connection
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "xxxxxxxxxxx";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
if(isset($_GET['export'])){
if($_GET['export'] == 'true'){
$query = mysqli_query($conn, 'select * from m2r'); // Get data from Database from demo table
$delimiter = ",";
$filename = "significant_" . date('Ymd') . ".csv"; // Create file name
//create a file pointer
$f = fopen('php://memory', 'w');
//set column headers
$fields = array('Pers.nr', 'Rol', 'Mutatie');
fputcsv($f, $fields, $delimiter);
//output each row of the data, format line as csv and write to file pointer
while($row = $query->fetch_assoc()){
$lineData = array($row['personeelsnummer'], $row['uniekKenmerkRol'], $row['mutatie']);
fputcsv($f, $lineData, $delimiter);
}
//move back to beginning of file
fseek($f, 0);
//set headers to download file rather than displayed
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="' . $filename . '";');
//output all remaining data on a file pointer
fpassthru($f);
}
}
?>
// Database Connection
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "xxxxxxxxxxx";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
if(isset($_GET['export'])){
if($_GET['export'] == 'true'){
$query = mysqli_query($conn, 'select * from m2r'); // Get data from Database from demo table
$delimiter = ",";
$filename = "significant_" . date('Ymd') . ".csv"; // Create file name
//create a file pointer
$f = fopen('php://memory', 'w');
//set column headers
$fields = array('Pers.nr', 'Rol', 'Mutatie');
fputcsv($f, $fields, $delimiter);
//output each row of the data, format line as csv and write to file pointer
while($row = $query->fetch_assoc()){
$lineData = array($row['personeelsnummer'], $row['uniekKenmerkRol'], $row['mutatie']);
fputcsv($f, $lineData, $delimiter);
}
//move back to beginning of file
fseek($f, 0);
//set headers to download file rather than displayed
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="' . $filename . '";');
//output all remaining data on a file pointer
fpassthru($f);
}
}
?>
Nu dacht ik van.. he, dat is simpel op te lossen met printf maar helaas.
ik heb de code:
Code (php)
1
2
2
$lineData = array($row['personeelsnummer'], $row['uniekKenmerkRol'], $row['mutatie']);
fputcsv($f, $lineData, $delimiter);
fputcsv($f, $lineData, $delimiter);
proberen aan te passen naar:
Code (php)
1
2
2
$lineData = array( printf("%06d", $row['personeelsnummer']), $row['uniekKenmerkRol'], $row['mutatie']);
fputcsv($f, $lineData, $delimiter);
fputcsv($f, $lineData, $delimiter);
Maar dit is dus te simpel gedacht..
Klaarblijkelijk werkt dit niet in een array. Maar een andere methode ken ik niet. Dus ik zou het niet weten. Hoe kan ik dit aanpassen? wie weet hierin de oplossing?
Adoptive Solution op 16/09/2019 19:14:20:
Als het niet in de array lukt, probeer het dan buiten de array.
Of anders dit :
https://www.php.net/manual/en/function.str-pad.php
Of anders dit :
https://www.php.net/manual/en/function.str-pad.php
dat str pad is complex gebeuren... kijken of ik het buiten de array kan trekken
Toevoeging op 16/09/2019 20:04:28:
Adoptive Solution thnx voor de tip van str-pad.... is toch niet zo complex als ik in eerste instantie dacht.... ik kende de functie niet maar het is voor mij voor nu wel de oplossing.
de regel ziet er dan als volgt uit voor de geinteresseerden:
Code (php)
1
$lineData = array(str_pad($row['personeelsnummer'], 6, "0", STR_PAD_LEFT), $row['uniekKenmerkRol'], $row['mutatie']);
topic mag gesloten worden....