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.
Je moet eerst een database tabel aanmaken, waarbij de kolommen overeen komen met kolommen in je CSV.

Daarna kun je via tools als PHPMyAdmin zo'n CSV prima importeren volgens mij.
Of je schrijft het zelf, stelt niet al teveel voor. Maar zoals pol al zegt, eerst je tabel aanmaken

geyl 5000
Voorbeeldje.. (iets als....)

<?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());
	}

?>



Functies:
<?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;
    }

?>
Bij dit bovenstaande script wordt uitgegaan van de file adresgegevens.csv maar hoe kan ik het zo maken dat ik gewoon een bestand kan importeren in de boven genoemde functie?
Een bestand importeren in een functie? Je kunt toch gewoon je csv bestand uploaden en de naam in het script even aanpassen?
Dat wil ik niet, ik wil dat gebruikers dat zelf kunnen doen.
Dat wordt lastig. Je zou een uploadscript moeten hebben, maar bovendien: de veldnamen in het CSV zouden precies moeten kloppen, en het aantal velden ook.
Blijf je het zelfde probleem houden.

Reageren