Foros del Web » Programando para Internet » PHP »

Mensaje de Cargando

Estas en el tema de Mensaje de Cargando en el foro de PHP en Foros del Web. Buenas gente, Tengo una aplicación de prerregistro en mi web para validar el mail tal que así. 1- EL usuario se registra. 2- Almaceno sus ...
  #1 (permalink)  
Antiguo 22/10/2011, 03:08
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Mensaje de Cargando

Buenas gente,

Tengo una aplicación de prerregistro en mi web para validar el mail tal que así.

1- EL usuario se registra.
2- Almaceno sus datos en una base de datos temporal y le mando un mail con un token de validación.
3- El usuario pincha en el link y su cuenta se activa, osea, copio los valores de la tabla provisional en la definitiva haciendo una serie de validaciones antes.

El caso, es que, el paso 3 tarda unos segundos en cargar (no sé por qué, la verdad, no debería tardar más de 5-6 segundos, pero lo hace). Si el usuario cancela la carga, el registro de hace a medias, y es una jodienda, la verdad.

Quisiera saber si hay alguna forma de poner un mensaje de Cargando o algo para hacerle saber al usuario que no ha habido error, sino que la página está cargando.

Para más info tengo:

Formulario de registro en html.
Prerregistro en PHP que lleva a un html con un mensaje de confirmación.
Cuando el usuario pincha el link va a un activar.php que cuando termina redirige a un html con el mensaje de ok.

Alguna idea?

Gracias!!
  #2 (permalink)  
Antiguo 22/10/2011, 04:40
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Mensaje de Cargando

Deberias evaluar en mejorar el almacenamiento en la base de datos. Porque en realidad un registro no debe tomar mas de 3 o 4 segundos en cargarse. Pero, se supone (aunque la realidad es otra), que colocando un echo antes de todo el proceso de registrar en la base de datos muestre la información que quieras enseñar de loading o cargando o lo que quieras. Una forma de obligar al navegador que muestre la información mientras se registra la información es haciendo un output de muchos caracteres, por ejemplo algo como
Código PHP:
Ver original
  1. <?php
  2. echo 'Loading...' . str_repeat(' ', 1000);
  3.  
  4. // continuar con el código
El navegador al ver que hay mucho dato que sobrepasa el buffering que tiene establecido, trata de enviar la información y la muestra. Ten cuenta que no es 100% seguro y tienes que hacer pruebas en diferentes navegadores ya que todos se pueden comportar de manera diferente.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 22/10/2011, 05:24
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Mensaje de Cargando

Muchas gracias por tu respuesta, la verdad es que era bastante simple pero no caí

El problema es que no es un registro simple, por a parte del registro, se le configura su cuenta personal añadiendo varias funcionalidades dependiendo del tipo de cuenta.

Voy a probar lo que comentas y te digo, muchas gracias!
  #4 (permalink)  
Antiguo 22/10/2011, 06:13
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Mensaje de Cargando

Hola de nuevo,

He probado lo que me comentaste, y el resultado es el siguiente:

Pincho en el link que me manda al e-mail.
La página sale en blanco y se puede ver el icono de cargando dando vueltas en la pestaña de Firefox.
Justo antes de redirigirme a la página con el mensaje de ok, me aparece el echo.

Decir que el echo está al principio del código, no hay nada antes que él :S.

Sabes por qué puede pasar ésto? No debería imprimirse primero el echo y luego quedarse cargando mientras realiza las operaciones? Por qué tarda en salir el echo si es lo primero del código?

Mil gracias por tu tiempo.
  #5 (permalink)  
Antiguo 22/10/2011, 06:56
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 16 años, 5 meses
Puntos: 51
Respuesta: Mensaje de Cargando

utiliza javascript para activar la ventana de login en cuanto el usuario haga click en el botón de envió del formulario o lo que tengas
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #6 (permalink)  
Antiguo 22/10/2011, 07:25
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Mensaje de Cargando

Hola Lynxcraft,

Gracias por tu respuesta, pero no entiendo muy bien. Dónde debo colocar el javascript? Ya que el php que tarda en cargar y en el que quiero mostrar el mensaje es activado a través de un link mandado por correo. Cuando el usuario se registra, le aparece un mensaje de ok advirtiéndole de que mire su e-mail para activar su cuenta.

Un saludo.
  #7 (permalink)  
Antiguo 22/10/2011, 13:16
Avatar de mcun  
Fecha de Ingreso: octubre-2010
Ubicación: tras la pantalla
Mensajes: 466
Antigüedad: 13 años, 6 meses
Puntos: 55
Respuesta: Mensaje de Cargando

y por que no revisas el código del upload a ver por que tarda mas de los debido ???


postealo por aquí ;)
  #8 (permalink)  
Antiguo 23/10/2011, 04:06
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Mensaje de Cargando

Hola mcun,

Gracias por tu respuesta, te pongo el código:

Código PHP:
<?php
    
    
echo 'Cargando...el proceso puede tardar unos segundos, por favor espera.';
    
    include_once (
'funciones.php');
    
    
/*Recogemos los datos introducidos en el formulario anterior*/
        
    
$token $_GET["token"];
            
    
/*Conectamos con la base de datos*/
        
    
$conexion bd ();
        
    
$sql "SELECT *
            FROM usuariosprovisionales
            WHERE token = '"
.$token."'";
            
    
$res mysql_query($sql);
    
$row mysql_fetch_array($res);
    
$n mysql_num_rows($res);
    
    if(
$n == 0)
    {
    
        echo 
'Fallo en la activación de la cuenta. Es probable que hayan pasado más de 48 desde tu registro. Vuelve a registrarte (puedes usar los mismos datos que usaste en el registro previo). Gracias.';
        
    }else
    {
        
        
$user $row["user"];
        
$pass $row["pass"];
        
$nombre $row["nombre"];
        
$apellido $row["apellido"];
        
$mail $row["mail"];
        
$equipo $row["equipo"];
        
        
/*Borramos a ese usuario de la tabla usuariosprovisionales porque ya ha validado su registro.*/
            
        
$del "DELETE FROM usuariosprovisionales
                WHERE token = '"
.$token."'";
                
        
mysql_query($del);
                
        
$query "SELECT nombreLiga, plazasOcupadas
                  FROM ligas
                  WHERE creadorLiga = 'computer'
                  AND plazasOcupadas < 12
                  ORDER BY plazasOcupadas DESC"
;
                              
        
$res mysql_query($query);
        
$row mysql_fetch_array($res);    
                                    
        
$nuevaLiga $row["nombreLiga"];
                        
        
$n mysql_num_rows($res);
                        
        
/*Esto quiere decir que no hay ninguna Liga creada por el ordenador o que las que estn creadas ya están completas, por tanto creamos 1 nueva*/
                        
        
if($n == 0
        {
                        
            
$nuevaLiga nuevaLigaComputer(); /*Llamamos a la función para crear una nueva liga*/
                
            
$nuevoUsuario registrarUsuario($user$pass$nombre$apellido$mail$equipo$nuevaLiga); /*Registramos el nuevo usuario*/
            
nuevaPlantilla1 ($user$equipo$nuevaLiga);
                            
        }else 
/*Quiere decir que ya hay una liga creada por el computer con plazas disponibles, por lo que actualizamos*/
        
{
                        
            
/*Registramos el nuevo usuario*/
                            
            
$nuevoUsuario registrarUsuario($user$pass$nombre$apellido$mail$equipo$nuevaLiga);
                            
            
/*Creamos su plantilla*/
                             
            
nuevaPlantilla ($user$equipo$nuevaLiga);
                            
            
/*Actualizamos las plazas ocupadas en esa liga*/
                        
            
$query "UPDATE ligas 
                      SET plazasOcupadas = '"
.$row["plazasOcupadas"]."' + 1
                      WHERE nombreLiga = '"
.$nuevaLiga."'";
                                    
            
mysql_query($query);
                        
        }
                                    
            echo 
'<meta http-equiv="refresh" content = "0; url = registrarOK.php">';    
            
    }            

        
?>
El token lo paso cuando, desde el mail con un link, llamo a este php tal que así:

http://www.miweb.com/activar.php?token="token"

Espero puedas ayudarme.

Un saludo y gracias!
  #9 (permalink)  
Antiguo 23/10/2011, 09:44
Avatar de mcun  
Fecha de Ingreso: octubre-2010
Ubicación: tras la pantalla
Mensajes: 466
Antigüedad: 13 años, 6 meses
Puntos: 55
Respuesta: Mensaje de Cargando

ponle al inicio del script

Código PHP:
Ver original
  1. ini_set('display_errors', 1);
  2. echo '<br />'.error_reporting(E_ALL);

también veo que usas include en lugar de require include no arroja errores trata de cambiarlo

revisa el fichero que incluyes a ver si tiene errores ..
  #10 (permalink)  
Antiguo 23/10/2011, 10:01
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Mensaje de Cargando

Hola de nuevo, he incluido el código que me diste y me imprime esto:

6135

Sabes lo que quiere decir?

También cambié el include por require como sugeriste.

Gracias.
  #11 (permalink)  
Antiguo 23/10/2011, 10:25
Avatar de mcun  
Fecha de Ingreso: octubre-2010
Ubicación: tras la pantalla
Mensajes: 466
Antigüedad: 13 años, 6 meses
Puntos: 55
Respuesta: Mensaje de Cargando

según le manual http://www.php.net/manual/en/errorfunc.constants.php

Cita:
All errors and warnings, as supported, except of level E_STRICT prior to PHP 5.4.0.
Todo en orden indica el nivel de reporte de errores en tu caso ALL si hubiera errores en el código los lanza directamente según la nomenclatura acostumbrada en php

Lo unico que se me ocurre es el grueso de datos que pasas por get , la creación de la tabla temporal que no liberas los recursos mysql_free_result .... y bueno lo demás podrá deberse a la carga del servidor y sus recursos ...
  #12 (permalink)  
Antiguo 23/10/2011, 10:41
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Mensaje de Cargando

El dato que le paso es el nombre de usuario más un número al azar tal que así: bienpiyao12345

Por ejemplo.

El caso es que, sin el paso previo de mandar el link al correo, el registro funciona bien y en 4-5 segundos está todo listo, que es como lo tenía al principio.

La tabla temporal no es tal, es decir, es una tabla permanente más en la base de datos que la uso para almacenar los datos de una manera temporal antes de que el usuario valide el correo y la inserción en la misma se hace una vez que el usuario envía el formulario.

Dicho esto...se te ocurre qué puede ser?

Muchas gracias por tu tiempo.
  #13 (permalink)  
Antiguo 23/10/2011, 10:50
Avatar de mcun  
Fecha de Ingreso: octubre-2010
Ubicación: tras la pantalla
Mensajes: 466
Antigüedad: 13 años, 6 meses
Puntos: 55
Respuesta: Mensaje de Cargando

revisa el enviar mail el fichero que incluyes osea fíjate que es lo que cargas en funciones.php

evita cargar cosas innecesarias revisa que no esta algo mal formado libera los recursos mysql_free_result

postea el funciones.php
  #14 (permalink)  
Antiguo 23/10/2011, 10:59
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Mensaje de Cargando

El archivo funciones.php es enorme, tengo todas las funciones de mi aplicación, que son muchísimas.

Y la función de enviar mail es:

Código PHP:
function verificaCuenta ($mail$usuario$token)
{

    
//Componemos el mensaje
                    
    
$headers "From: [email protected] \r\n";
    
$headers .= "Reply-To: [email protected] \r\n";
    
$headers .= "X-Mailer: PHP/" phpversion();
    
    
$subject utf8_decode("Confirma tu registro en miweb.es");
    
$message "Muy buenas, " .$usuario"<br>";
    
$message .= "<br>";
    
           
$message .= utf8_decode("Acabas de registrarte en <b>miweb.es</b>, pero aún tienes que confirmar tu cuenta para poder activarla. Por favor, <a href=\"http://www.miweb.es/activar1.php?token=".$token."\">activa tu cuenta pinchando aquí</a>. Una vez realizado este sencillo paso, podrás loguearte con total normalidad en tu cuenta y disfrutar de miweb.es. Sólo tienes 48 horas para activar tu cuenta, pasado este tiempo, tu registro será cancelado y tendrás que volver a registrarte. Si tú no te has registrado en miweb.es, háznoslo saber escribiendo a [email protected]. Si no funciona el link (algunos gestores de correo deshabilitan esta opción por seguridad), copia y pega esto en tu navegador: http://www.miweb.es/activar1.php?token=".$token.". Este es un mensaje automático, así que por favor, no respondas a él. Gracias por registrarte y mucha suerte.<br><br>Atentamente,<br>El equipo de miweb.es");
    
    
$headers .= "MIME-Version: 1.0 \r\n";
    
$headers .= "Content-type: text/html; charset=iso-8859-1 \r\n";                
    
    
mail($mail$subject$message$headers);
    

Mil gracias.

Un saludo.
  #15 (permalink)  
Antiguo 23/10/2011, 11:01
Avatar de mcun  
Fecha de Ingreso: octubre-2010
Ubicación: tras la pantalla
Mensajes: 466
Antigüedad: 13 años, 6 meses
Puntos: 55
Respuesta: Mensaje de Cargando

y ese es el problema ... carga solo lo que necesites ... no te olvides que php lee el fichero completo aunque no ejecute nada de el ..
  #16 (permalink)  
Antiguo 23/10/2011, 11:10
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Mensaje de Cargando

Pero entonces...qué sentido tiene tener un archivo de funciones? Quiero decir, la mayoría de las funciones las utilizo más de una vez en distintos archivos...es mejor poner el código de las funciones en cada archivo? De siempre he creído que era mejor tener todas las funciones en un archivo a parte...:S

Muchas gracias por tu ayuda.

Un saludo.
  #17 (permalink)  
Antiguo 23/10/2011, 11:17
Avatar de mcun  
Fecha de Ingreso: octubre-2010
Ubicación: tras la pantalla
Mensajes: 466
Antigüedad: 13 años, 6 meses
Puntos: 55
Respuesta: Mensaje de Cargando

si es la mejor forma tener la funciones organizadas en un fichero pero no traerlas innecesariamente ... pensándolo desde ese punto si en un script usas solo 1 función para que vas a incorporar a 50 ...

yo uswo este sistema

Cita:
funciones/
func_all.php
func1
func2
func3
func4
en func_all cargo todas en caso de requerir incluir muchas llamo a ese fichero en caso de requerir una sola llamo a func1 por ejemplo
  #18 (permalink)  
Antiguo 23/10/2011, 11:21
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Mensaje de Cargando

Mmmmm, tiene sentido...Voy a crear un nuevo archivo sólo para las funciones que uso en esa parte, voy a probar y te comento...ok?

Me parece una gran idea y nunca se me ocurrió hacerlo así, gracias!

Ahora te comento.
  #19 (permalink)  
Antiguo 23/10/2011, 11:39
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Mensaje de Cargando

Hola de nuevo, lo he probado como me comentaste, creando un nuevo php solo con las funciones que necesito ahí y sigue tardando lo mismo :S...había pensado que podía ser por el gestor de correo, pero si copio y pego el link tarda lo mismo :S...la verdad es que no sé qué puede ser...

Alguna otra idea?
  #20 (permalink)  
Antiguo 23/10/2011, 11:40
Avatar de mcun  
Fecha de Ingreso: octubre-2010
Ubicación: tras la pantalla
Mensajes: 466
Antigüedad: 13 años, 6 meses
Puntos: 55
Respuesta: Mensaje de Cargando

no la verdad que no... creo ya tiene que ver con los recursos del servidor ...
  #21 (permalink)  
Antiguo 23/10/2011, 12:01
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Mensaje de Cargando

Pues nada, te agradezco enormemente tu ayuda, a ver si algún compi da con la tecla y nos puede echar una mano.

Muchas gracias.

Un saludo.
  #22 (permalink)  
Antiguo 21/03/2012, 12:26
Avatar de lambar  
Fecha de Ingreso: marzo-2005
Ubicación: Murcia Fumeta
Mensajes: 55
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Mensaje de Cargando

siento revivir este tema aunque no sea tan viejo pero es que no me lo puedo callar, ¿no le va a decir nadie a este pobre chaval que hacer esto:

$token = $_GET["token"];

es una de las mayores locuras?

informate sobre la inyeccion sql

http://php.net/manual/es/security.database.sql-injection.php
http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL


adaptate esta funcion de oscommerce y úsala

function tep_db_input($string, $link = 'db_link') {
global $$link;

if (function_exists('mysql_real_escape_string')) {
return mysql_real_escape_string($string, $$link);
} elseif (function_exists('mysql_escape_string')) {
return mysql_escape_string($string);
}

return addslashes($string);
}



ahora solo tienes que hacer lo siguiente:

$token = tep_db_input ( $_GET["token"] );

y ya tienes la web un poco más asegurada, ahora seguro que no te limpian la base de datos sin que te enteres. suerte.

Etiquetas: cargando, formulario, html, mensaje, registro, tabla, usuarios
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 06:00.