874 views
Weet iemand een goed script waarmee je een CSV adressenboek kunt importen in de mysql database? Met blader knop om de CSV te kunnen uploaden.
<?php
$file = 'adresgegevens.csv'; // Het CSV bestand dat moet worden verwerkt
$table = 'adressen'; // De tabel waarin de gegevens moeten worden opgeslagen
// Verbind met de database
mysql_connect('localhost', 'username', 'password') or die('Cannt connect to server.');
mysql_select_db('database');
// Laad de inhoud van het bestand
$data = file_get_contents($file);
// Verwerk de gevonden inhoud tot een 2d array (zorg dat het een VALIDE csv bestand betreft!!!)
$csv = csvToArray($data);
// Bouw queries..
$drop_table = "DROP TABLE IF EXISTS `" . escapeSql($table) . "`;"; // Maak een query voor het verwijderen van bestaande tabel
$create_table = "CREATE TABLE `" . escapeSql($table) . "` ("; // Maak een query voor het aanmaken van de tabel waarin de CSV gegevens worden geplaatst
$insert_start = "INSERT INTO `" . escapeSql($table) . "` ("; // Maak een query voor het toevoegen van records aan de tabel
// Zoek de kolommen op in de 1e regel van het CSV bestand
$number_of_columns = sizeof($csv[0]);
for($i = 0; $i < $number_of_columns; $i++)
{
if($i > 0)
{
$insert_start .= ", ";
$create_table .= ", ";
}
$insert_start .= "`" . escapeSql($csv[0][$i]) . "`"; // Voeg de kolomnaam toe aan de query
$create_table .= "`" . escapeSql($csv[0][$i]) . "` VARCHAR(255)"; // Voeg de kolomnaam toe aan de query
}
$insert_start .= ") VALUES (";
$insert_end = ");";
$create_table .= ");";
// Verwijder de tabel als deze reeds bestaat
mysql_query($drop_table) or die('Error in query: ' . $drop_table . '<br>Message: ' . mysql_error());
// Maak een nieuwe tabel aan met opgegeven tabelnaam
mysql_query($create_table) or die('Error in query: ' . $create_table . '<br>Message: ' . mysql_error());
// Zoek per regel de kolomwaarden op, en cvoeg deze toe aan de tabel
for($i = 1; $i < sizeof($csv); $i++)
{
$values = '';
for($j = 0; $j < $number_of_columns; $j++)
{
if($j > 0)
{
$values .= ", ";
}
if(isset($csv[$i][$j]))
{
$value = $csv[$i][$j];
}
else
{
$value = '';
}
$values .= "'" . escapeSql($value) . "'";
}
$sql = $insert_start . $values . $insert_end;
mysql_query($sql) or die('Error in query: ' . $sql . '<br>Message: ' . mysql_error());
}
?><?php
// Use this function to ensure user input is save to use in SQL statements.
function escapeSql($string)
{
$string = str_replace("\\", "\\\\", $string);
$string = str_replace("'", "\'", $string);
$string = str_replace("`", "\`", $string);
return $string;
}
// Parse a CSV data to a 2D array
function csvToArray($data)
{
// output
$csv = array();
$line = array();
$escaped = false; // Flag: escape char
$quoted = false; // Flag: quoted string
$buffer = ''; // Buffer (quoted values)
$junk = ''; // Junk buffer (unquoted values)
for($i = 0; $i < strlen($data); $i++)
{
$char = $data[$i];
if($quoted)
{
if(($char == '\\') && ($escaped === false))
{
// Set flags
$escaped = true;
}
elseif(($char == '"') && ($escaped === false))
{
// Set flags
$quoted = false;
$escaped = false;
}
else
{
// Add char to buffer
$buffer .= $char;
// Set flags
$escaped = false;
}
}
else
{
if($char == LF) // Start a new line
{
if(strlen($buffer) > 0)
{
// Add buffer to line
$line[] = $buffer;
// Clear buffer
$buffer = '';
}
else
{
$junk = trim($junk);
// Add junk to line (possible unquoted values?)
$line[] = $junk;
}
// Clear junk
$junk = '';
// Add line to CSV
$csv[] = $line;
// Clear line
$line = array();
}
elseif($char == '"') // Start new value
{
// Set flags
$quoted = true;
}
elseif($char == ',')
{
if(strlen($buffer) > 0)
{
// Add buffer to line
$line[] = $buffer;
// Clear buffer
$buffer = '';
}
else
{
$junk = trim($junk);
// Add junk to line (possible unquoted values?)
$line[] = $junk;
}
// Clear junk
$junk = '';
}
else // Add to junk char
{
$junk .= $char;
}
}
}
// Clean up
if(strlen($buffer) > 0)
{
// Add buffer to line
$line[] = $buffer;
// Clear buffer
$buffer = '';
}
else
{
$junk = trim($junk);
// Add junk to line (possible unquoted values?)
$line[] = $junk;
}
$csv[] = $line;
return $csv;
}
?>