Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/08/2014, 04:44
charliedj7
 
Fecha de Ingreso: mayo-2012
Ubicación: Madrid
Mensajes: 20
Antigüedad: 12 años
Puntos: 1
Pregunta Cargar archivo CSV e insertarlo en tabla.

Hola, estoy con un desarrollo y he llegado al siguiente problema.

Tengo un formulario en el que el usuario sube un archivo CSV con una serie de campos predefinidos.

El problema llega a la hora de guardar esos campos en una tabla MySQL, no consigo hacerlo. Tengo el siguiente codigo:

Código PHP:
//Si el archivo NO esta vacio, y NO da error -->
if(!empty($archivo) && !$archivo['error']){
    
$ext = (string)end(explode('.'$archivo['name']));
    (
$archivo['name'] != $ext) ? strtolower($ext) : '';
    
// La ruta debe cambiar los slash. Si esto corriese en Linux habría que revisarlo
    // Se verifica que el archivo enviado es un CSV
    
if($ext == 'csv'){


        
//Abre el archivo en modo de solo lectura con el cursos al principio, y lo setea a --rpoint--
        
$rpoint fopen($archivo['tmp_name'],'r');
        
        
//Obtiene una linea desde el handle --rpoint-- con parametro a 5000 longitud de la linea mas larga. y lo setea a --data--
        
$data fgetcsv($rpoint5000";");
        /
        
//Coge la ruta de TEMP y le concatena el nombre de archivo hasseado en md5 . y lo setea a --tfile--
        
$tfile TEMP md5($archivo['name']);
        
        
chmod($tfile0755);
        
chmod($archivo['tmp_name'], 0755);    
        
//Realiza una copia de archivo en destino (tfile)
        
if (!copy($archivo['tmp_name'],$tfile)) {
            echo 
"Error al copiar $archivo...\n";
        }
        
//Abre el fichero en la ruta destino (tfile) y lo setea a wpoint
        
$wpoint fopen($tfile,'w','r');
        
//remplaza \\ en tfile y lo setea a  --ruta--
        
$ruta str_replace('\\','/',$tfile);
        
//coloca el csv (devuelve FALSE si error)
        
fputcsv($wpoint,$data,";"); 
        
                
//Aqui voy controlando los errores posibles en cada posicion del CSV
        
        
$row 2;
            while ((
$data fgetcsv($rpoint1000";")) !== FALSE) {
                
$num count($data);
                echo 
"cuenta --> " $num "<br/>";
                
$skipl true;
                for(
$i 0$i $num$i++){
                    
$skipl $skipl && ($data[$i] == '');
                }
                if(!
$skipl){
                    
//idTipoSuelo
                    
if ($data[0] == '' || $data[0] > '16' || $data[0] == '1') {
                        
$sMensaje 'Existen erores en el archivo de carga de activos. <a href="#ListadoErrores">Consúltelos al final de la página.</a>';
                        
$errores['idTipoSuelo'][] = $row;
                        }
                    
//C_Latitud    
                    
if ($data[1] != '') {
                        for (
$i=0$i<strlen($data[1]); $i++){ 
                              if (
strpos($permitidosLatLongsubstr($data[1],$i,1))===false){ 
                                    
$errores['C_Latitud'][] = $row;
                                    
$sMensaje 'Existen erores en el archivo de carga de activos. <a href="#ListadoErrores">Consúltelos al final de la página.</a>';
                              } 
                           } 
                    }...
//Asi hasta 51 que es el numero de posiciones
fputcsv($wpoint,$data,";"); 
Y por ultimo una vez comprobado que no hay errores realizo la consulta pasandole la ruta.
Código PHP:
$sSQL " LOAD DATA INFILE '" $ruta "'" .
                    
" INTO TABLE ga_tmpActivosDocumentos " .
                    
" FIELDS TERMINATED BY ';'" .
                    
" LINES TERMINATED BY '\\n' " .
                    
" IGNORE 1 LINES (idTipoSuelo,C_Latitud,C_Longitud,Referencia,Zona,idProvincia,Poblacion,TituloActivo,Descripcion,Superficie,Gastos,Equipamiento,EquipamientoEN,GestionDocumental,PrecioVenta,CampoLibre1_Texto,CampoLibre1_Titulo,CampoLibre1_TextoEN,CampoLibre1_TituloEN,Activo," .
                    
" IMG1,IMG_Desc1,IMG_Desc1EN,IMG2,IMG_Desc2,IMG_Desc2EN,IMG3,IMG_Desc3,IMG_Desc3EN,IMG4,IMG_Desc4,IMG_Desc4EN,DOC1,DOC_Desc1,DOC_Desc1EN,DOC2,DOC_Desc2,DOC_Desc2EN,DOC3,DOC_Desc3,DOC_Desc3EN,DOC4,DOC_Desc4,DOC_Desc4EN,URL1,URL_Desc1,URL_Desc1EN,URL2,URL_Desc2,URL_Desc2EN)" .
                    
" SET idCliente = " $sActivoCliente "" ;
            echo 
$sSQL;        
            if(
$oBD->fnModifica($sSQL)){ 
No consigo que se suba el archivo al servidor, ni que se inserte ningun dato en la tabla correspondiente
He mirado otros topic muy parecidos y bastante antiguos, pero no doy con ello.

Un SALUDO