Cita: Buen proyectito para hacer
A ver como pinta esto.
Código PHP:
<?php
/**
* Datos de MySQL
*/
$hostbd = "localhost"; /* Host MySQL */
$userbd = "user"; /* Nombre de usurio MySQL */
$passbd = "pass"; /* Password de MySQL */
$bd = "basededatos"; /* Base de Datos MySQL */
$nuevatabla = "datosdelcsv"; /* Nombre de la nueva tabla MySQL
que se creará o guardarán los datos del
archivo .csv */
$ID = "id"; /* Nombre del campo autoincremental
que se usara en la tabla creada
(o existente). Si se establece a
un valor vario no se usaran
campos tipo ID */
$droptabla = 1; /* Si se establece a un valor
no-vacio si existe la tabla
especificada en $nuevatabla esta
se vaciará */
/**
* Datos del archivo .csv
*/
$csv = "c:\\windows\\escritorio\\Horario Fran 2001.csv";
/* Path correspondiente al archivo .csv */
$csvconcampos = 1; /* Un valor no-vacio indica que
la primera linea del archivo .csv
contiene los nombres del las columnas. */
$delimitador = ";"; /* Delimitador que usa el archivo para
separar los campos - generalmente es ","
pero los .csv de Excel utilizan ";" */
/**
* Comienza el codigo
*/
$l = mysql_connect($hostbd, $userbd, $passbd)
or die("<h4>No se pudo conectar a la base de datos.</h4>");
mysql_select_db($bd, $l)
or die("<h4>No se pudo seleccionar la base de datos.</h4>");
$csv = fopen ($csv, "r")
or die("<h4>No se pudo abrir <b>$csv</b></h4>");
if (!empty($droptabla)) {
$drop = "DROP TABLE IF EXISTS `$nuevatabla`;";
}
$create = "CREATE TABLE `$nuevatabla` (";
if (!empty($ID)) {
$create .= "\n`id` INT NOT NULL auto_increment,";
}
while ($datos = fgetcsv ($csv, 1024*5, $delimitador)) {
$datocsv[] = $datos;
}
fclose ($csv);
if (!empty($csvconcampos)) {
for ($i=0; $i<count($datocsv[0]); $i++) {
if (is_numeric($datocsv[1][$i])) {
if (substr_count($datocsv[1][$i], ".") == 1) {
$tipo = "DOUBLE";
$datocsv[1][$i] = floatval($datocsv[1][$i]);
} else {
$tipo = "INT";
$datocsv[1][$i] = intval($datocsv[1][$i]);
}
} else {
$tipo = "TEXT";
}
$create .= "\n`".$datocsv[0][$i]."` $tipo NOT NULL";
if (isset($datocsv[0][$i+1])) {
$create .= ",";
}
}
$autoinc = count($datocsv);
} else {
for ($i=0; $i<count($datocsv[0]); $i++) {
if (is_numeric($datocsv[1][$i])) {
if (substr_count($datocsv[1][$i], ".") == 1) {
$tipo = "DOUBLE";
$datocsv[1][$i] = floatval($datocsv[1][$i]);
} else {
$tipo = "INT";
$datocsv[1][$i] = intval($datocsv[1][$i]);
}
} else {
$tipo = "TEXT";
}
$create .= "\n`Campo$i` $tipo NOT NULL";
if (isset($datocsv[0][$i+1])) {
$create .= ",";
}
}
$autoinc = count($datocsv)+1;
}
if (!empty($ID)) {
$create .= ",\nPRIMARY KEY (`id`)";
}
$create .= "\n) TYPE=MyISAM AUTO_INCREMENT=$autoinc ;";
foreach ($datocsv as $data) {
if (!empty($csvconcampos) && $check++==0) {
continue;
}
$data = array_map("mysql_real_escape_string", $data);
if (!empty($ID)) {
$inserts[] = "INSERT INTO `$nuevatabla` VALUES (".++$w.",'".implode("','", $data)."');";
} else {
$inserts[] = "INSERT INTO `$nuevatabla` VALUES ('".implode("','", $data)."');";
}
}
echo "<h4>Ejecutando las siguientes consultas...</h4>\n";
echo "<pre>\n";
if (isset($drop)) {
echo "$drop<br>\n";
}
echo "$create<br>\n";
foreach ($inserts as $cu) {
echo "$cu\n";
}
echo "</pre>\n";
flush();
if (isset($drop)) {
if (!mysql_query($drop, $l))
echo("<b>Error:</b> al ejecutar la consulta \"$drop\".Mysql dijo:<pre>".mysql_error()."</pre><br>");
}
if (!mysql_query($create, $l))
echo("<b>Error:</b> al ejecutar la consulta \"$create\".Mysql dijo:<pre>".mysql_error()."</pre><br>");
foreach ($inserts as $cu) {
if (!mysql_query($cu, $l))
echo("<b>Error:</b> al ejecutar la consulta \"$cu\".Mysql dijo:<pre>".mysql_error()."</pre><br>");
}
echo "<h3>FINAL<h3>"
?>
Por ahora hace lo que teniamos en mente, pero no acepta que el csv tenga columnas de numero variable (con los de M$ excel no hay ploblema).
Cualquier sugerecia es muuuy bienvenida.
Saludos!