Controle csv bestand voor importeren ?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Erwin van Brink

Erwin van Brink

29/10/2010 17:11:07
Quote Anchor link
Ik heb een csv import functie op mijn site draaien, en dat gaat goed.
Nou wil ik echter wat controle inbouwen, zodat ik zeker weet dat de gegevens
in een regel in het csv bestand compleet zijn, en dat de velden gevuld worden
met de juiste gegevens uit het bestand.

Het betreft hier een ', seperated' csv bestand, waar een aantal velden gevuld moeten zijn omdat de applicatie dit vereist. Ook zijn er wat optie velden welke
gevuld mogen zijn, en indien deze geen waarde hebben, als een lege string in het
csv bestand opgenomen moeten worden.

Voorbeeld :

Velden in applicatie :
naam, adres, postcode, plaats, land, contactpersoon, telefoonnummer

Alle velden zijn verplicht, BEHALVE de contactpersoon en telefoonnummer.


Juiste formaat in csv bestand :
Erwin van Brink,Brinkstraat 1,1234 AB,Brinkstad,Nederland,Erwin,0123-456789


Stel dat de gebruiker in zijn CSV bestand onderstaande regel heeft staan :


Erwin van brink,Brinkstraat 1,1234 AB,Brinkstad,Nederland,0123-456789

Dan komt bij het importeren het telefoonnummer in het veld contactpersoon te staan. Dit wil ik natuurlijk niet.

Als er onderstaande regel in staat, dan gaat het wel goed :

Erwin van brink,Brinkstraat 1,1234 AB,Brinkstad,Nederland,,0123-456789

Er is een leeg veld ( door de dubbele ,, ) en blijft het veld contactpersoon leeg in de Db.


Is het handig om

1. het aantal ',' te tellen in een regel ? ( er moeten er 6 staan )
2. daarna kijken of de verplichte velden gevuld zijn ?

Als beide kloppen, dan pas importeren.


Vraag is hoe je het aantal komma's kunt controleren in een string en
of er een andere / betere manier om dit te doen ?

Alvast bedankt voor de reactie(s).
 
PHP hulp

PHP hulp

24/11/2024 00:49:26
 
Joakim Broden

Joakim Broden

29/10/2010 17:20:25
Quote Anchor link
Zoek eens op explode();

En dan zou je per item kunnen kijken of het een waarde bevat en of de waarde juist is (bv postcode, telefoon etc)
Gewijzigd op 29/10/2010 17:50:50 door Joakim Broden
 
Pim -

Pim -

29/10/2010 17:43:41
Quote Anchor link
http://php.net/manual/en/function.fgetcsv.php
Geeft gewoon een array, je kan dus met count() tellen.
 
Marco M

Marco M

29/10/2010 19:22:09
Quote Anchor link
Als ik me niet vergis zou count() op zichzelf niet werken, aangezien een leeg element nogsteeds een waarde is in count().

Zet je data per rij om naar een array. Via control-structures.for kun je dan per keer kijken of de array ook echt een waarde heeft van bijvoorbeeld een x aantal karakters via de functie function.strlen
Gewijzigd op 29/10/2010 19:24:06 door Marco M
 
Erwin van Brink

Erwin van Brink

30/10/2010 20:05:31
Quote Anchor link
Bedankt allemaal voor jullie reacties.

Ik 'trek' een line uit het csv bestand uit elkaar met 'explode' wat prima werkt natuurlijk. Ik kan echter niet controleren of wat in het eerste item ingevuld is, ook in het eerste veld in de Db thuishoort...en dat geldt eigenlij voor alle items in de line uit het csv bestand.

Count() heb ik uitgeprobeert, en deze telt inderdaad ook de lege velden. Helaas is dat dus is ook niet de oplossing.

Makkelijkste zou zijn als ik het aantal comma's kan tellen in een line.
Hiermee kan ik in ieder geval controleren of alle velden ( al dan niet ) gevuld zijn.
Dus als iemand mij daarmee kan helpen....


Toevoeging op 30/10/2010 21:31:55:

Ik heb de oplossing gevonden naar aanleiding van de link (control-structure.for) van Marco M.
Hiermee tel ik het aantal comma's en vergelijk deze met het aantal comma's wat elke line in het csv bestand MOET hebben. Als deze niet gelijk is, dan mist er dus ergens iets.

Hieronder de code :

$searchchar=",";
$count="0"; //zero

for($i="0"; $i<strlen($csvdata); $i=$i+1){

if(substr($csvdata,$i,1)==$searchchar){

$count=$count+1;

}
}


// Het aantal commas MOET bijvoorbeeld 9 zijn

if ( $count == 9 ) {

// Controleren of de verplichte velden gevuld zijn. Dit doe ik door via EXPLODE de line
// uit elkaar te 'trekken' en de waardes in de array te checken of ze leeg zijn of niet.

// Indien niet leeg : inlezen in Db
// Indien wel leeg : NIET inlezen in db

} else {

// NIET INLEZEN !

}


Deze controle in natuurlijk niet waterdicht, omdat de gebruiker nog steeds verkeerde data in het verkeerde item kan zetten...
 



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.