Ver Mensaje Individual
  #3 (permalink)  
Antiguo 18/11/2015, 06:56
Avatar de sergio17791
sergio17791
 
Fecha de Ingreso: noviembre-2015
Ubicación: Valencia
Mensajes: 21
Antigüedad: 8 años, 5 meses
Puntos: 1
Respuesta: Mostrar echo desde función en div de html

Gracias por tu respuesta :)

A ver si ahora me explico mejor... No quería llenar el post de código innecesario y me he quedado corto

Tengo un fichero llamado "importar.php", donde selecciono con un formulario la opción de subir todos los ficheros alojados en el servidor a la base de datos (o seleccionar varios ficheros locales, subirlos al servidor e importarlos a la base de datos). Tiene el siguiente código:

Código:
<html>
    <head>
        <meta charset="UTF-8">
        <link href ="css/estilo_importar.css" rel ="stylesheet" type="text/css"/>
        <?php include 'funciones.php'; ?>
    </head>
    <body> 
        <?php
        
        $sgbd = conexion_BD();
                           
        ?>
Selecciona los archivo locales que deseas importar a la base de datos. </br> AVISO: Este proceso puede tardar bastante tiempo. </br>

        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
            <input type="file" name="archivo[]" multiple = "multiple" id="archivo"></input>
            </br>
            <input type="submit" id = "importar_archivos"  name="importar_archivos" value="Importar ficheros locales"></input>
            </br></br>
            Importar todos los ficheros almacenados en el servidor.</br>
            <input type="submit" id = "importar_todos" name="importar_todos" value="Importar ficheros servidor"></input>
        </form>
        <button type="button" onclick="window.location.href='index.php'">Volver</button>
        </br>
        
        <?php
        //Comprobamos si se ha enviado el formulario. Si no lo ha enviado no ejecuta el código.
        if(isset($_POST['importar_archivos']))
        {                                 
            cargar_fichero($sgbd);     
        }
        
        if(isset($_POST['importar_todos']))
        {
            importar_ficheros($sgbd);
        }
        
?>
            </br>
            <div class ="correctos">
                <b>Ficheros subidos correctamente:</b> </br>    
            </div>
        
            <div class ="errores">
                <b>Se han encontrado los siguientes errores:</b> </br>   
            </div>

        </body>
</html>
Se puede invocar a "cargar_ficheros", para subir archivos locales, o "importar_ficheros", para importar los ficheros ya alojados en el servidor, el servidor está en red con más ordenadores entonces se pueden guardar los archivos en el servidor directamente si estás usando un pc en red.

Ambas funciones llaman de forma iterativa a la función "importar_datos", todas alojadas en un archivo llamado "funciones.php". Tiene el siguiente código:

Código:
function importar_datos($id_estacion,$fichero,$sgbd)
{
    //Comprueba que el fichero se encuentra accesible.
    if(is_readable("ficheros_importados/".$fichero))
    {      
        //Realizamos una consulta a la base de datos para obtener las columnas de Datos.
        $consulta = mysql_query("DESCRIBE Datos;",$sgbd);             
        $columnas_Tabla[] = array();
        while ($row = mysql_fetch_row($consulta))
        {
            array_push($columnas_Tabla, $row[0]);
        }
        //El primer elemento que se guarda es "Array". Lo eliminamos
        array_shift($columnas_Tabla);
                                
        //Leemos el fichero
        $fichero_abierto = fopen("ficheros_importados/".$fichero, "r");
        //Obtenemos la primera línea del fichero con fgets. Debería ser la cabecera
        //Con explode separamos las variables de la cabecera utilizando los espacios entre ellas.
        $cabecera = explode(" ", fgets($fichero_abierto));
        for($i = 0; $i<count($cabecera); $i++)
        {
            //Con esto eliminamos los parentesis con unidades de las variables y lo guardamos en minúscula.
            $array_auxiliar = explode("(",$cabecera[$i]);
            $cabecera[$i] = strtolower($array_auxiliar[0]);
            //Eliminamos la variable auxiliar creada.
            unset($array_auxiliar);
        }  
        //Como la cabecera puede tener nombres distintos a las variables de la BD, llamamos a la siguiente función para solucionarlo.
        $cabecera = arreglar_cabecera($cabecera);

        //Variable para controlar si existe error en que línea se produce
        $linea = 1;
        //Variable para controlar que cuando se produzca un error pare de leer el fichero
        $seguir_leyendo = true;
        //Procedemos a leer todos los datos del fichero
        while(!feof($fichero_abierto) && $seguir_leyendo)
        {
            
            //Obtenemos los datos en un array, separando cada dato por el espacio entre ellos.
            $datos = explode(" ",preg_replace('/\s+/',' ',fgets($fichero_abierto)));
            
            //El fichero guarda un último dato vacío por la transformación MS-Dos a Unix. Si está este dato vacío lo eliminamos.
            if(end($datos) == "/n/r" || end($datos) == '/n' || end($datos) == '/r' || end($datos) == '')
            {    
                array_pop($datos);
            }
                        
            $linea = $linea + 1;
                        
            //Comprobamos que el número de datos corresponden a la cabecera.
            if(count($datos) != count($cabecera) && count($datos) > 0)
            {
                $seguir_leyendo = false;
                echo("Error de importación en la línea $linea del fichero \"$fichero\". Incoherencia en datos. No se ha importado el fichero correctamente. </br>");                               
            }
            elseif(count($datos) > 0) 
            {
                //Comprobamos que el código de validación corresponda a las variables
                if(strlen(end($datos)) == (count($datos)-3))
                {  
                    if((strnatcasecmp($cabecera[0],"fecha") == 0) && (strnatcasecmp($cabecera[1],"h_solar") == 0))
                    {

                             escribir_datos_BD($id_estacion,$datos,$cabecera,$columnas_Tabla,$sgbd);
       
                    }                     
                    else
                    {
                        $seguir_leyendo = false;
                        echo "Error en la cabecera del fichero \"$fichero\". No se encuentra fecha o hora del registro. No se ha cargado el fichero correctamente</br>";  
                    }
                }
                else
                { 
                    $seguir_leyendo = false;
                    echo "Error de importación en la línea $linea del fichero \"$fichero\". Incoherencia en código de Validación. No se ha importado el fichero correctamente. </br>";
                }
            }    
        }
        
        if($seguir_leyendo)
        {    
            echo "El fichero \"$fichero\" ha sido cargado correctamente en la Base de Datos </br>";
            borrar_ficheros($fichero);
        }
    }
    else
    {
        echo"Error: No se puede leer el fichero \"$fichero\".</br>";
    }
}
Básicamente, esta función comprueba que se cumplen los requisitos, y si no lo cumple muestra por pantalla el error, o si se ha subido correctamente, también lo muestro por pantalla.

Lo que quiero es según si el echo es de "Error" o de "Archivo subido correctamente", mostrarlo en una división o otra...

Los archivos que subo tienen unas 57.000 líneas cada uno, y suelo importar de golpe unos 20. Este proceso tarda bastante, así que necesito, "tener el informe de errores y de archivos correctos" separados, para verlo a lo mejor después de 3 horas o más...

Espero que ahora se me entienda...

Gracias!