Ver Mensaje Individual
  #6 (permalink)  
Antiguo 23/06/2009, 08:12
Avatar de Tx
Tx
 
Fecha de Ingreso: enero-2002
Ubicación: Cba - Arg
Mensajes: 188
Antigüedad: 22 años, 3 meses
Puntos: 1
Busqueda Respuesta: Importar desde Excel a Mysql.

Hola nuevamente,
te paso un ejemplo como guia solamente, ya que no conosco tu caso particular.
Supongamos que tenes una tabla de personas te quedaria algo asi:

Código:
+++++++++++++++++++
ID + NOMBRE + DNI +
+++++++++++++++++++
1  + MARCOS + 123 +
2  + MARIA  + 234 +
3  + JOSE   + 345 +
Tu archivo CSV seria igual, a excepcion del ID que supongamos es autonumerico.

Código:
++++++++++++++
NOMBRE + DNI +
++++++++++++++
MARCOS + 123 +
MARIA  + 234 +
JOSE   + 345 +
Yo haria algo asi:
1 - Upload simple a un directorio llamado "temp" con permiso de lectura y escritura
2 - Apertura del archivo subido
3 - Cadena SQL para la insercion en la DB
4 - Confirmacion exitosa o no de la operacion

Archivo "carga_csv.php"
Código PHP:
<?php
if(isset($_POST['up'])){
    
$result 'mal';
    if(
$_FILE['csv']['name']!=''){ // VERIFICAMOS SI TRAE ALGO
        
if(is_uploaded_file($_FILE['csv']['tmp_name'])){ // SE REALIZO EL UPLOAD?
            
$nombre_temporal 'CSV_'.time().'.csv'// CREAMOS UN NOMBRE CON LA MARCA DE TIEMPO
            
if(copy($_FILE['csv']['tmp_name'],'temp/'.$nombre_temporal)){ // LO COPIAMOS AL DIRECTORIO TEMP
                
$tmpSQL = array(); // DECLARAMOS UN ARRAY EN DONDE ESTARAN LOS DATOS PARA DESPUES COMPLETAR EL SQL
                
$fp fopen('temp/'.$nombre_temporal,'r'); // ABRIMOS EL ARCHIVO
                
while(($linea fgetcsv($fp,1000,';','"'))!==FALSE){ // RECORREMOS EL ARCHIVO HASTA EL FIN DE LINEA, SE ESPECIFICA SEPARADOR DE CAMPOS
                    
if($linea[0]!='' && $linea[1]!=''){ // QUE NO SEA UNA LINEA EN BLANCO
                        
$tmpSQL[] = "('".$linea[0]."','".$linea[1]."')";
                    }
                }
                
fclose($fp); // CERRAMOS EL ARCHIVO, NO SE NECESITA MAS
                
if(count($tmpSQL)>0){ // SI TIENE AL MENOS UN ELEMENTO HAREMOS EL INSERT
                    
$SQL "INSERT INTO personas(NOMBRE,DNI) VALUES".implode(',',$tmpSQL); // ACOMODO EL ARRAY CREADO ANTERIORMENTE EN LA CADENA SQL FINAL
                    
$r mysql_query($SQL);
                    if(
$r$result 'ok';
                }
            }
        }
    }
    
// REDIRECCIONAMOS HACIA ESTA MISMA PAGINA CON LA VARIABLE DE RESULTADO
    
header('Location: '.$_SERVER['PHP_SELF'].'?result='.$result);exit();
}
?>
Código HTML:
<form name="frm" action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST" enctype="multipart/form-data">
<label><input name="csv" type="file" /> Archivo CSV</label>
<input type="hidden" name="up" />
<input type="submit" value="Cargar..." />
</form> 
Tanto el codigo PHP como el HTML estarian en la misma pagina, como es corto....

Es solo un ejemplo, tal cual puede no funcionar, pero mas o menos es la logica de como lo haria, antes del insert habria que tener una conexion abierta al servidor MySQL, verificar que realmente es un CSV, que la cantidad de campos es la correcta, etc, pero creo que como referencia te podria servir.

Saludos!