Beste PHPers,
Ik ben een .CSV importeer script aan het aanpassen, waarin ik straks wil kunnen aangeven welke rijen & kolommen hij mag overslaan. Dit heb ik nodig omdat de CSV bestanden die ik probeer te importeren, veel onnodige informatie bevatten.
Het importeer script dat ik gebruik is 'Simplecsvimport' en ziet er momenteel bij mij zo uit:
<?php
$databasehost = "localhost";
$databasename = "test";
$databasetable = "test";
$databaseusername ="root";
$databasepassword = "test";
$fieldseparator = ",";
$lineseparator = "\n";
$csvfile = $_POST['naamcsv'];
//Primary key 1ste row van de tabel? dan deze op 1 laten staan.
$addauto = 1;
if(!file_exists($csvfile)) {
echo "File not found. Make sure you specified the correct path.\n";
exit;
}
$file = fopen($csvfile,"r");
if(!$file) {
echo "Error opening data file.\n";
exit;
}
$size = filesize($csvfile);
if(!$size) {
echo "File is empty.\n";
exit;
}
$csvcontent = fread($file,$size);
fclose($file);
$con = @mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
@mysql_select_db($databasename) or die(mysql_error());
$lines = 0;
$queries = "";
$linearray = array();
$rowimport1 = $_POST['horizontaal1'] -1;
$rowimport2 = $_POST['horizontaal2'] +1;
$rowimport3 = $_POST['horizontaal3'] -1;
$rowimport4 = $_POST['horizontaal4'] +1;
foreach(split($lineseparator,$csvcontent) as $line) {
$lines++;
if($lines > $rowimport1 & $lines < $rowimport2 && $lines > $rowimport3 & $lines < $rowimport4){
$line = trim($line," \t");
$line = str_replace("\r","",$line);
$line = str_replace("'","\'",$line);
$line = str_replace('"','',$line);
$linearray = explode($fieldseparator,$line);
$linemysql = implode("','",$linearray);
if($addauto){
$query = "insert into $databasetable values('',Projectnr= " .$_POST['projectnr']. " ,'','','','','$linemysql');";
}else
$query = "insert into $databasetable values('$linemysql');";
$queries .= $query . "\n";
@mysql_query($query);
}
}
@mysql_close($con);
?>
Zoals je kan zien geef ik bij de lijn:
<?php if($lines > 3 & $lines < 20){ //Only import rows >"?" to <"?" ?>
aan dat hij alleen de 'rows' 3 tot 20 moet importeren
en bij:
<?php $query = "insert into $databasetable values('','','','','','$linemysql');"; ?>
dat hij kolommen 1 tot 5 moet leeglaten.
Verder heb ik een formulier:
<?php <table>
<form action="csvimport.php" method="post">
<tr><center><td><center><p>Overslaan horizontaal</p></center></td><td> </td></center></tr>
<tr><td><input type="text" name="horizontaal1"/></td><td><input type="text" name="horizontaal2"/></td></tr>
<tr><td><input type="text" name="horizontaal3"/></td><td><input type="text" name="horizontaal4"/></td></tr>
<tr><center><td><center><p>Overslaan verticaal</p></center></td><td> </td></center></tr>
<tr><td><input type="text" name="verticaal1"/></td><td><input type="text" name="verticaal2"/></td></tr>
<tr><td><input type="text" name="verticaal3"/></td><td><input type="text" name="verticaal4"/></td></tr>
<tr><td><label><center><p>Naam CSV bestand:</p></center></label><input type="text" name="naamcsv" placeholder="Ex: 'csvimport.csv'" /></td><td><center><button class="submit" type="submit">SUBMIT</button></center></td></tr>
</form>
</table> ?>
In dit formulier moet een gebruiker de rijen en kolommen invullen die niet geimporteerd moeten worden.
Mijn vraag is nu:
Hoe kan ik dit het beste aanpakken? Bijvoorbeeld van die 3 & 20 een variabele maken die zijn gegevens haalt uit de input fields van het formulier, of kan dit makkelijker op een andere manier?
En hoe kan ik het probleem met de kolommen oplossen? want nu laat hij alleen 5 kolommen open voordat hij het CSV bestand importeerd, maar ik moet een aantal kolommen uit het CSV bestand niet importeren.
Alvast bedankt voor de hulp,
-Max
2.585 views