Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Mostrar echo desde función en div de html

Estas en el tema de Mostrar echo desde función en div de html en el foro de PHP en Foros del Web. Buenas a todos! A ver si me explico... Tengo dos ficheros .php, uno donde escribo las funciones .php, y otro donde muestro la web, el ...
  #1 (permalink)  
Antiguo 18/11/2015, 06:23
Avatar de sergio17791  
Fecha de Ingreso: noviembre-2015
Ubicación: Valencia
Mensajes: 21
Antigüedad: 8 años, 5 meses
Puntos: 1
Pregunta Mostrar echo desde función en div de html

Buenas a todos!

A ver si me explico... Tengo dos ficheros .php, uno donde escribo las funciones .php, y otro donde muestro la web, el html para darle forma a la web y el php con el que llamo a las funciones, están ligados ambos ficheros y funcionando perfectamente.

Lo que hacen es cargar los datos de unos ficheros almacenados en el servidor en una base de datos. Con las funciones hago muchas comprobaciones de que "los ficheros cumplen los requisitos" para que los datos entren bien a la base de datos, y si hay error no lo carga.

Básicamente, muestro por pantalla los ficheros que se han cargado correctamente y los errores que se han producido. Esto es un trozo de código de una de las funciones:

Código:
                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);
        }
Para que no salgan los errores y los ficheros subidos correctamente juntos, tengo dos div, una para mostrar los errores y otra para mostrar los subidos que se han subido bien, de la siguiente forma:

Código:
<div class ="correctos">
         <b>Ficheros subidos correctamente:</b> </br>    
</div>        
 <div class ="errores">
         <b>Se han encontrado los siguientes errores:</b> </br>   
</div>
Lo que me gustaría saber es como mostrar cada echo en su correspondiente división desde la función...

Gracias!
  #2 (permalink)  
Antiguo 18/11/2015, 06:29
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: Mostrar echo desde función en div de html

no soy muy diestro en funciones a parte de que no das info de la estructura de la funcion y de donde obtiene los valores,pero esta seria la idea
Código PHP:
Ver original
  1. function mostrar($muestra){
  2.  
  3. $salida = "Esta es una muestra de ".$muestra;
  4.  
  5. return $salida;
  6. }

y donde quieras que se vea elñ resultado de esa funcion especifica:

Código PHP:
Ver original
  1. <b><?php echo mostrar("salida"); ?></b>
__________________
[email protected]
HITCEL
  #3 (permalink)  
Antiguo 18/11/2015, 06:56
Avatar de 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!
  #4 (permalink)  
Antiguo 18/11/2015, 11:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Mostrar echo desde función en div de html

Cita:
Lo que quiero es según si el echo es de "Error" o de "Archivo subido correctamente", mostrarlo en una división o otra...
El tema es que tus funciones imprimirán exactamente donde las invoques, el problema es que usan echo y así es imposible redireccionar la salida.

Como te han dicho debes usar "return" para devolver un valor o mensaje, y a partir de ahí lo puedes imprimir donde desees.

Debes reestructurar la lógica de tu función para que devuelva un error, o bien, un mensaje de éxito.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 18/11/2015, 15:55
Avatar de 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

Cita:
Iniciado por pateketrueke Ver Mensaje
El tema es que tus funciones imprimirán exactamente donde las invoques, el problema es que usan echo y así es imposible redireccionar la salida.

Como te han dicho debes usar "return" para devolver un valor o mensaje, y a partir de ahí lo puedes imprimir donde desees.

Debes reestructurar la lógica de tu función para que devuelva un error, o bien, un mensaje de éxito.
Me imaginaba que con echo no podía redireccionar la salida, pero... ¿como hago para imprimir donde desee con un return? ¿como le indico la división? ¿Se puede con PHP o hay que usar algo más como Ajax? La función no puede ser llamada desde una de las dos divisiones ya que no se sabe si devolverá Error o Mensaje de éxito

Gracias por contestar!
  #6 (permalink)  
Antiguo 18/11/2015, 18:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Mostrar echo desde función en div de html

Si la función puede devolver ambas cosas podría ser así:
Código PHP:
Ver original
  1. function foo() {
  2.   if (/* algo sale mal */) {
  3.     return ['error' => 'mensaje de error'];
  4.   }
  5.   return ['ok' => 'mensaje de éxito'];
  6. }

Así la puede invocar antes de imprimir y verificando qué existe en el valor de retorno imprimes en un lugar u otro:
Código PHP:
Ver original
  1. $x = foo();
  2.  
  3. if (isset($x['error'])) {
  4.   echo $x['error'];
  5. }
  6.  
  7. if (isset($x['ok'])) {
  8.   echo $x['ok'];
  9. }

¿Se entiende la idea?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 19/11/2015, 01:25
Avatar de 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

Sí, entendí la idea, ya tengo claro como hacerlo, muchas gracias!

Etiquetas: echo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:42.