probleem met vullen csv via php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Gijs Jansen

Gijs Jansen

23/02/2017 13:26:07
Quote Anchor link
Hallo,

Ik heb een stukje code waarmee ik een csv bestand kan aanmaken. Dit voorbeeld werk. Ik heb twee vragen.

1: Als ik zelf de arrays invul verdwijnen de aanhalingstekens in mijn csv bestand.

Als ik dus de waardes:
'Column 1', 'Column 2', 'Column 3', 'Column 4', 'Column 5'

vervang door mijn eigen waardes krijg ik geen foutmeldingen maar is de output:

waarde1, waarde2

ipv

'waarde1', 'waarde2'

Tweede vraag: Hoe kan ik tussen dit stukje code nog bewerkingen doen? En hoe doe ik dat?

$data = array(
array('Data 11', 'Data 12', 'Data 13', 'Data 14', 'Data 15'),
array('Data 21', 'Data 22', 'Data 23', 'Data 24', 'Data 25'),
array('Data 31', 'Data 32', 'Data 33', 'Data 34', 'Data 35'),
array('Data 41', 'Data 42', 'Data 43', 'Data 44', 'Data 45'),
array('Data 51', 'Data 52', 'Data 53', 'Data 54', 'Data 55')
);

Ik wil graag na de rij met headers (de rij met column 1 etc) de volgende rijen dynamisch vullen. De laatste rij is dan afwijkend vergeleken met rij 2 tot de laatste.

Vast bedankt voor de moeite.

Groeten,

Gijs

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
// open the file "demosaved.csv" for writing
$file = fopen('demosaved.csv', 'w');
 
// save the column headers
fputcsv($file, array('Column 1', 'Column 2', 'Column 3', 'Column 4', 'Column 5'));
 
// Sample data. This can be fetched from mysql too
$data = array(
    array('Data 11', 'Data 12', 'Data 13', 'Data 14', 'Data 15'),
    array('Data 21', 'Data 22', 'Data 23', 'Data 24', 'Data 25'),
    array('Data 31', 'Data 32', 'Data 33', 'Data 34', 'Data 35'),
    array('Data 41', 'Data 42', 'Data 43', 'Data 44', 'Data 45'),
    array('Data 51', 'Data 52', 'Data 53', 'Data 54', 'Data 55')
);

 
// save each row of the data
foreach ($data as $row)
{

    fputcsv($file, $row);
}

 
// Close the file
fclose($file);

?>
 
PHP hulp

PHP hulp

16/11/2024 22:26:38
 
Ben van Velzen

Ben van Velzen

23/02/2017 13:36:37
Quote Anchor link
Dus, je haalt je vorige topic leeg omdat je het niet eens bent met de opbouwende kritiek die je ontvangt, en verwacht daarna nog hulp met iets dat helemaal geen fout is?
 
Gijs Jansen

Gijs Jansen

23/02/2017 14:13:54
Quote Anchor link
@Ben:
Mijn vorige topic heb ik leeg gehaald omdat ik een vagere vraag had. Die vraag is nu anders en concreter. Ik had bij de vorige een hoop code. Deze code is nu ook anders en een stuk korter.

De opbouwende kritiek waar ik het niet mee eens was was 1 reactie die bestond uit: ga googlen. Oftewel: de poster neemt de tijd om je weer het bos in te sturen. Wat mag maar meestal gewoon een nutteloze opmerking is omdat veel mensen daar vandaan komen.

Sommige mensen schrijven zo'n stukje code wat ik nodig heb in een paar minuten. Ik doe er lang over.

Verder verwacht ik niet dat ik geholpen wordt maar vraag ik of iemand wil helpen.

@allemaal: Van Ben heb ik iig begrepen dat mijn code geen fout is.

Zelf denk ik dat ik mijn cellen niet alleen met komma's gescheiden moeten worden. omdat als ik een cel vul met tekst en komma's dan heb ik opeens meer cellen dan ik wil door. ("cell1","cell2","cel3,meertekst","cel4")

Mocht iemand weten hoe ik mijn vraag twee oplos en het leuk vinden om mij te helpen, dan hoor ik het graag :)

Bedankt voor de moeite
Gewijzigd op 23/02/2017 14:41:06 door Gijs Jansen
 
Ozzie PHP

Ozzie PHP

23/02/2017 14:21:38
Quote Anchor link
>> Oftewel: de poster neemt de tijd om je weer het bos in te sturen. Wat mag maar meestal gewoon een nutteloze opmerking is omdat veel mensen daar vandaan komen.

Klopt, maar dat komt omdat jouw vraagstelling nogal algemeen was. Daarom wordt in zo'n geval wel eens verwezen naar een tutorial op Google. Als je zelf concreet bent ... wat wil je precies ... kun je ook een gericht antwoord krijgen.

>> Tweede vraag: Hoe kan ik tussen dit stukje code nog bewerkingen doen? En hoe doe ik dat?

En dit is dus wat ik bedoel. Je wil 'bewerkingen' doen. En dan moeten wij maar begrijpen wat je daarmee bedoelt? Wees a.u.b. zo concreet mogelijk. Dus geef aan wat je wilt, wat je geprobeerd hebt en wat er misgaat.

>> @allemaal: Van Bas heb ik iig begrepen dat mijn code geen fout is. Het werkt allen niet zoals ik wil.

De jongeman heet Ben.
 
Gijs Jansen

Gijs Jansen

23/02/2017 14:40:41
Quote Anchor link
Hoi Ozzie,
Ik wilde graag dat ik halverwege de opbouw van $data loops kan draaien.

dus dat ik $data opbouw met 1 rij, dan een loop draai, dan een variabel aantal rijen invoer in $data en dan weer een loop draai en weer een rij toevoeg in $data.

$data = array(
array('Data 11', 'Data 12', 'Data 13', 'Data 14', 'Data 15'),
array('Data 21', 'Data 22', 'Data 23', 'Data 24', 'Data 25'),
array('Data 31', 'Data 32', 'Data 33', 'Data 34', 'Data 35'),
array('Data 41', 'Data 42', 'Data 43', 'Data 44', 'Data 45'),
array('Data 51', 'Data 52', 'Data 53', 'Data 54', 'Data 55')
);

Het tweede probleem. Sommige cellen moeten gevuld worden met bijvoorbeeld 4,3,7. Als ik dat zonder aanhalingstekens in een csv bestand wegschrijf dan maakt mijn magmi-script er door de komma's meerdere cellen van. Het rade is dat als ik het voorbeeld script wat ik hier poste kopier van de website en draai in mijn eigen omgeving dan blijven de aanhalingstekens staan. Als ik de waardes (zoals column1) zelf aanpas dan verdwijnen de aanhalingstekens.
 
Ozzie PHP

Ozzie PHP

23/02/2017 14:57:57
Quote Anchor link
Ik weet nog steeds niet wat je wilt bereiken (een concreet voorbeeld zou handiger zijn), maar je kunt jouw data array als volgt aanvullen.

$data[] = $new_array;
 
Adoptive Solution

Adoptive Solution

23/02/2017 20:44:15
Quote Anchor link
Ik heb mijn eigen raad opgevolgd en ben bij het begin begonnen en wat oefeningetjes gemaakt.

Dit komt wellicht in de buurt van de oplossing van het geschetste probleem :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
// open the file "demosaved.csv" for writing
$file = fopen('demosaved.csv', 'w');

$enclosure = '"';

$driewaarden = '4,3,7';

// save the column headers
fputcsv($file, array('Column 1', 'Column 2', 'Column 3', 'Column 4', 'Column 5'),',',$enclosure);

// Sample data. This can be fetched from mysql too
$data = array(
    array('Data 11', 'Data 12', 'Data 13', 'Data 14', 'Data 15'),
    array('Data 21', 'Data 22', 'Data 23', 'Data 24', 'Data 25'),
    array('Data 31', 'Data 32', 'Data 33', 'Data 34', 'Data 35'),
    array('Data 41', 'Data 42', 'Data 43', 'Data 44', '1,2,3'),
    array('Data 51', 'Data 52', 'Data 53', 'Data 54', $driewaarden)
);


// save each row of the data
foreach ($data as $row) {
    fputcsv($file, $row,',',$enclosure);
}


// Close the file
fclose($file);

?>
 
Ivo P

Ivo P

24/02/2017 08:28:53
Quote Anchor link
De " " worden alleen toegevoegd als ze nodig zijn.

En dat is met name zo, als het scheidingteken onderdeel is van de value. In jouw geval is de komma (of enter) het scheidingteken.

http://php.net/manual/en/function.fputcsv.php Example 1

Als je per se de " in de output wilt hebben in elke cel, dan zou je

array('"Data 11"', '"Data 12"', ....)

kunnen gebruiken, maar dat lijkt wat onnodig
 
Gijs Jansen

Gijs Jansen

24/02/2017 10:23:19
Quote Anchor link
Hoi

@Ivo P, bedankt voor je bericht. de data die ik toevoegde was elke keer zonder spatie. het voorbeeld had wel elke keer een spatie er tussen zitten. Thanks. Dit werkt nu goed! :)

@ozzie $data[] = $new_array; werkt idd goed om de nieuwe regels toe te voegen. Wellicht dat dit voor anderen heel simpel is. Mij heb je er goed mee geholpen :)

@adoptive Bedankt voor het meedenken. ik kwam er achter dat als je de array opbouwt dat je dat als volgt kan doen.

$data = array('waarde 1', "$var");

Ik heb geen idee waarom dit dan dubbele aanhalingstekens moeten zijn maar dat was wel de manier om de variabele op de juiste manier in het bestand te krijgen. Met enkele aanhalingstekens kon ik de $var wel echoen op het scherm maar komt de waarde niet in het csv bestand.

Mijn scriptje werkt nu goed en gaat weken werk schelen! Merci!!! :D
Gewijzigd op 24/02/2017 10:24:32 door Gijs Jansen
 
Ivo P

Ivo P

24/02/2017 10:34:43
Quote Anchor link
die spatie zou het probleem niet moeten zijn.

en $data = array('...', "$var");
moet precies hetzelfde zijn als

$data = array('...', $var);

In beide gevallen zal de data zonder " " erbij in je file terecht komen.

MAar wat is/was nu het probleem? Het ontbreken van de " in je csv file? En was dat echt een probleem, of was het iets dat jij zelf niet verwachtte?
 
Gijs Jansen

Gijs Jansen

24/02/2017 16:50:35
Quote Anchor link
Geloof dat ik geen probleem meer heb :)
het was dat ik dit gedrag niet verwachtte. Zal met mijn onervarenheid te maken hebben.

$var = "stukje tekst";

als ik dit doe:
$data = array('...', $var);

krijg ik in mijn bestand: ...,$var

als ik dit doe

$data = array('...', "$var");

krijg ik in mijn bestand:

...,"stukje tekst"

In ieder geval bedankt voor de hulp :D
 
Ivo P

Ivo P

24/02/2017 17:23:06
Quote Anchor link
Dat is geen standaard gedrag. Dan gaat er iets erg mis. Of het moet geen PHP zijn.

Wél als je '$var' doet ipv. "$var", maar dat is effectief gelijk aan $var.

Dus ik vraag me af wat je fout doet...
 
Ozzie PHP

Ozzie PHP

24/02/2017 18:10:17
Quote Anchor link
Gijs Jansen op 24/02/2017 16:50:35:
$var = "stukje tekst";

als ik dit doe:
$data = array('...', $var);

krijg ik in mijn bestand: ...,$var

Zet direct na deze regel: $data = array('...', $var);

eens het volgende:

var_dump($data);
exit;

Wat zie je dan op je scherm?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.