Foros del Web » Programando para Internet » PHP »

mostrar error php en misma página

Estas en el tema de mostrar error php en misma página en el foro de PHP en Foros del Web. Hola!!! Tengo un mini formulario donde el usuario, si ha olvidado su contraseña, ponga su nombre de usuario y se le envíe a su correo, ...
  #1 (permalink)  
Antiguo 21/10/2012, 06:37
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 12 años, 5 meses
Puntos: 2
Pregunta mostrar error php en misma página

Hola!!!

Tengo un mini formulario donde el usuario, si ha olvidado su contraseña, ponga su nombre de usuario y se le envíe a su correo, otra contraseña diferente. La cuestión es que si hay error, se muestra por un echo en la misma página, aunque claro, esta se muestra en blanco, sólo con el mensaje del echo. Lo que me gustaría es que dicho mensaje apareciera en la pantalla anterior (donde está el formulario), debajo del mismo en color rojo o algo parecido.No quiero mostrarlo como alert, eso sé hacerlo. ¿Cómo se podría hacer?, ¿tengo que recurrir obligatoriamente a AJAX? Lo digo porque no tengo ni idea de Ajax... Este sería básicamente mi código:
Código PHP:
 <?php
    
include("conexion.php"); $link Conectarse (); // incluímos los datos de acceso a la BD
    
if(isset($_POST['enviar'])) { // comprobamos que se han enviado los datos del formulario
        
if(empty($_POST['usuario'])) {
            echo 
"No ha ingresado el usuario.";
        }else {
            
$usuario mysql_real_escape_string($_POST['usuario']);
            
$usuario trim($usuario);
            
$sql mysql_query("SELECT usuario, contrasenna, email FROM usuarios WHERE usuario='".$usuario."'");
            if(
mysql_num_rows($sql)) {
                
$row mysql_fetch_assoc($sql);
                
$num_caracteres "10"// asignamos el número de caracteres que va a tener la nueva contraseña
                
$nueva_clave substr(md5(rand()),0,$num_caracteres); // generamos una nueva contraseña de forma aleatoria
                
$usuario $row['usuario'];
                
$contrasenna $nueva_clave// la nueva contraseña que se enviará por correo al usuario
                
$usuario_clave2 md5($contrasenna); // encriptamos la nueva contraseña para guardarla en la BD
                
$email $row['email'];
                
// actualizamos los datos (contraseña) del usuario que solicitó su contraseña
                
mysql_query("UPDATE usuarios SET contrasenna='".$usuario_clave2."' WHERE usuario='".$usuario."'");
                
// Enviamos por email la nueva contraseña
                
$remite_nombre "tuweb.com"// Tu nombre o el de tu página
                
$remite_email "tuweb.com"// tu correo
                
$asunto utf8_decode("Recuperación de contraseña"); // Asunto (se puede cambiar)
                
$mensaje "Se ha generado una nueva contraseña para el usuario <strong>".$usuario."</strong>. <br>La nueva contraseña es: <strong>".$contrasenna."</strong>";
                 
$cabeceras "From: tuweb.com \r\n";
                 
$cabeceras .= "Reply-To: tuweb.com \r\n";
                 
$cabeceras $cabeceras."Content-Type: text/html; charset=utf-8\r\n"
                
$enviar_email mail($email,$asunto,$mensaje,$cabeceras);
                if(
$enviar_email) {
                    echo 
"La nueva contraseña ha sido enviada al email asociado al usuario ".$usuario.".";
                }else {
                    echo  
"No se ha podido enviar el email."
                }
            }else {
                echo 
"El usuario <strong>".$usuario."</strong> no está registrado."
            }
        }
    }else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="X-UA-Compatible" content="IE=9" /> 
<title>Documento sin título</title>
<style type="text/css">
#apDiv1 {
    position:absolute;
    width:1024px;
    height:768px;
    overflow: hidden;
    z-index:2;
    }
#apDiv2 {
    position:absolute;
    width:1024px;
    height:190px;
    background-color:#FFF;
    z-index:1;
    }
#apDiv3 {
    position:absolute;
    left:9px;
    top:190px;
    width:238px;
    height:577px;

    z-index:1;
}
#apDiv4 {
    position:absolute;
    left:239px;
    top:190px;
    width:541px;
    height:400px;
    background-color:#FFF;
    z-index:1;
}
#apDiv5 {
    position:absolute;
    top:190px;
    width:200px;
    height:200px;
    background-color:#FFF;
    z-index:3;
    }
#apDiv6 {
    position:absolute;
    left:794px;
    top:190px;
    width:238px;
    height:577px;
    z-index:1;
}
</style>
<link href="cuerpo.css" rel="stylesheet" type="text/css" />
</head>
<body class="fondo">
   
   
    

    <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
    <div id="apDiv1">
    <div id="apDiv2"><img src=""; /></div>
    
      <div id="apDiv3"></div>
      <div id="apDiv4">
      <br>
      <p style="text-align:center";>Introduce tu nombre de usuario y te enviaremos una nueva contraseña a tu email.</p>
      <div id="apDiv5" class="centradiv">
      <label>Usuario:</label><br />
        <input type="text" name="usuario" id="usuario" /><br />
        <input type="submit" name="enviar" value="Enviar" enctype="multipart/form-data"  />
        </div>
      </div>
      <div id="apDiv6"></div>
        </div>
</form>
</body>
</html>
<?php
    
}
?>
  #2 (permalink)  
Antiguo 21/10/2012, 08:02
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 9 meses
Puntos: 181
Respuesta: mostrar error php en misma página

Si lo quieres hacer como quieres, si te toca aprender ajax. La verdad no es nada complicado. En su momento yo pensaba que eso era algo marciano y para que me iba a complicar a estudiar algo diferente.

Este es el lugar donde aprendi las bases y ya en muy poco tiempo lo estaba trabajando sin dificultades

http://www.w3schools.com/ajax/default.asp
__________________
Blog de humor http://elcuasatar.net63.net/
  #3 (permalink)  
Antiguo 21/10/2012, 09:59
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: mostrar error php en misma página

No es necesario usa ajax, aunque es mejor, ya que tendrías el código separado (el formulario del que valida al usuario), pero puedes juntar los códigos y mostrar el error donde es necesario, ejemplo...

Código PHP:
Ver original
  1. <?php
  2. //ver si hay error, si no se envia el formulario, no hay obviamente error alguno
  3. $error = false;
  4.  
  5. //verificamos que se envie el formulario
  6. if (isset($_POST['user'])) {
  7.      //si se envio verificamos el usuario o contraseña
  8.      if ($_POST['user'] != 'usuario' || $_POST['pass'] != 123) {
  9.           $error = true;
  10.      }
  11. }
  12. ?>
  13. <html>
  14.      <head>
  15.           <title>Prueba</title>
  16.      </head>
  17.      <body>
  18.           <?php
  19.           //Verificamos si hay algún error
  20.           if ($error) {
  21.                echo '<p>Error, el usuario o contrase&ntilde;a es erroneo</p>';
  22.           }
  23.           ?>
  24.           <form method="post" action="<?php echo $_SERVER['PHP_SELFT']; ?>">
  25.                <input type="text" name="user" />
  26.                <input type="password" name="pass" />
  27.                <input type="submit" value="Login" />
  28.           </form>
  29.      </body>
  30. </html>

Como puedes ver, el error se muestra en el mismo formulario cuando se envia, por lo tanto no es necesario usar Ajax, ajax no es obligatorio, es solo "necesario" cuando no quieres hacer un "cambio" de página, o cargar datos dinamicamente...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #4 (permalink)  
Antiguo 21/10/2012, 14:11
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 12 años, 5 meses
Puntos: 2
Respuesta: mostrar error php en misma página

No sé si es porque tengo diferentes tipos de mensaje, que no me sale bien. Sigue apareciendo la pantalla en blanco, aunque en este caso sin mensaje ninguno...
  #5 (permalink)  
Antiguo 21/10/2012, 14:58
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: mostrar error php en misma página

Prueba el código que eh dejado, aparte, como pretendes que te ayude si ni siquiera muestras tu código modificado, adivino no soy >.<
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #6 (permalink)  
Antiguo 21/10/2012, 15:52
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 12 años, 5 meses
Puntos: 2
Respuesta: mostrar error php en misma página

Perdona Nemutagk, he tenido que solucionar un asunto personal y me he quedado a mitad del mensaje, por eso , no incluí el código, no me ha dado tiempo. Aquí va:
Código PHP:
<?php
    
include("conexion.php"); $link Conectarse (); // incluímos los datos de acceso a la BD
    
if(isset($_POST['enviar'])) { // comprobamos que se han enviado los datos del formulario
        
if(empty($_POST['usuario'])) {
            
$error =false
        }else {
            
$usuario mysql_real_escape_string($_POST['usuario']);
            
$usuario trim($usuario);
            
$sql mysql_query("SELECT usuario, contrasenna, email FROM usuarios WHERE usuario='".$usuario."'");
            if(
mysql_num_rows($sql)) {
                
$row mysql_fetch_assoc($sql);
                
$num_caracteres "10"// asignamos el número de caracteres que va a tener la nueva contraseña
                
$nueva_clave substr(md5(rand()),0,$num_caracteres); // generamos una nueva contraseña de forma aleatoria
                
$usuario $row['usuario'];
                
$contrasenna $nueva_clave// la nueva contraseña que se enviará por correo al usuario
                
$usuario_clave2 md5($contrasenna); // encriptamos la nueva contraseña para guardarla en la BD
                
$email $row['email'];
                
// actualizamos los datos (contraseña) del usuario que solicitó su contraseña
                
mysql_query("UPDATE usuarios SET contrasenna='".$usuario_clave2."' WHERE usuario='".$usuario."'");
                
// Enviamos por email la nueva contraseña
                
$remite_nombre "tuweb.com"// Tu nombre o el de tu página
                
$remite_email "tuweb.com"// tu correo
                
$asunto utf8_decode("Recuperación de contraseña"); // Asunto (se puede cambiar)
                
$mensaje "Se ha generado una nueva contraseña para el usuario <strong>".$usuario."</strong>. <br>La nueva contraseña es: <strong>".$contrasenna."</strong>";
                 
$cabeceras "From: tuweb.com \r\n";
                 
$cabeceras .= "Reply-To: tuweb.com \r\n";
                 
$cabeceras $cabeceras."Content-Type: text/html; charset=utf-8\r\n"
                
$enviar_email mail($email,$asunto,$mensaje,$cabeceras);
                if(
$enviar_email) {
                    
$error =true
                }else {
                   
$error =false
                }
            }else {
                
$error =false
            }
        }
    }else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="X-UA-Compatible" content="IE=9" /> 
<title>Documento sin título</title>
<style type="text/css">
#apDiv1 {
    position:absolute;
    width:1024px;
    height:768px;
    overflow: hidden;
    z-index:2;
    }
#apDiv2 {
    position:absolute;
    width:1024px;
    height:190px;
    background-color:#FFF;
    z-index:1;
    }
#apDiv3 {
    position:absolute;
    left:9px;
    top:190px;
    width:238px;
    height:577px;

    z-index:1;
}
#apDiv4 {
    position:absolute;
    left:239px;
    top:190px;
    width:541px;
    height:400px;
    background-color:#FFF;
    z-index:1;
}
#apDiv5 {
    position:absolute;
    top:190px;
    width:200px;
    height:200px;
    background-color:#FFF;
    z-index:3;
    }
#apDiv6 {
    position:absolute;
    left:794px;
    top:190px;
    width:238px;
    height:577px;
    z-index:1;
}
</style>
<link href="cuerpo.css" rel="stylesheet" type="text/css" />
</head>
<body class="fondo">
   
    <?php
          
//Verificamos si hay algún error
          
if ($error) {
               echo 
'<p>Error, el usuario o contrase&ntilde;a es erroneo</p>';
          }
          
?>
    

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <div id="apDiv1">
    <div id="apDiv2"><img src=""; /></div>
    
      <div id="apDiv3"></div>
      <div id="apDiv4">
      <br>
      <p style="text-align:center";>Introduce tu nombre de usuario y te enviaremos una nueva contraseña a tu email.</p>
      <div id="apDiv5" class="centradiv">
      <label>Usuario:</label><br />
        <input type="text" name="usuario" id="usuario" /><br />
        <input type="submit" name="enviar" value="Enviar" enctype="multipart/form-data"  />
        </div>
      </div>
      <div id="apDiv6"></div>
        </div>
</form>
</body>
</html>
<?php
    
}
?>
  #7 (permalink)  
Antiguo 21/10/2012, 15:59
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: mostrar error php en misma página

Para comenzar tienes 2 problemas, primero, no debes meter el código HTML en el else, este debe ir fuera del if/else, ya que de esta manera se ejecuta uno u otro, la idea es que se muestre siempre el formulario, aparte, la variable error debe ir afuera del if, en concreto abajo del include para que este seteado cuando cargas el formulario por primera vez, por ultimo, no necesitas setear de nuevo la variable error con false, unicamente es necesario cuando se produzca un error
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #8 (permalink)  
Antiguo 22/10/2012, 03:19
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 12 años, 5 meses
Puntos: 2
Respuesta: mostrar error php en misma página

Vale, entonces, según lo que entiendo, el $error = false; sólo después del include. Y después de los else sólo tengo que poner $error; en vez de los echo del principio. Exceptuando cuando sea $error = true; , que ahí sí que tengo que ponerlo entero. Lo que no sé bien es cómo sacar el html del else, no lo tengo muy claro. Últimamente estoy un poco espesa y no pillo nada... lo he dejado así:
Código PHP:
 <?php
    
include("conexion.php"); $link Conectarse (); // incluímos los datos de acceso a la BD
    
$error =false;
    if(isset(
$_POST['enviar'])) { // comprobamos que se han enviado los datos del formulario
        
if(empty($_POST['usuario'])) {
            
$error
        }else {
            
$usuario mysql_real_escape_string($_POST['usuario']);
            
$usuario trim($usuario);
            
$sql mysql_query("SELECT usuario, contrasenna, email FROM usuarios WHERE usuario='".$usuario."'");
            if(
mysql_num_rows($sql)) {
                
$row mysql_fetch_assoc($sql);
                
$num_caracteres "10"// asignamos el número de caracteres que va a tener la nueva contraseña
                
$nueva_clave substr(md5(rand()),0,$num_caracteres); // generamos una nueva contraseña de forma aleatoria
                
$usuario $row['usuario'];
                
$contrasenna $nueva_clave// la nueva contraseña que se enviará por correo al usuario
                
$usuario_clave2 md5($contrasenna); // encriptamos la nueva contraseña para guardarla en la BD
                
$email $row['email'];
                
// actualizamos los datos (contraseña) del usuario que solicitó su contraseña
                
mysql_query("UPDATE usuarios SET contrasenna='".$usuario_clave2."' WHERE usuario='".$usuario."'");
                
// Enviamos por email la nueva contraseña
                
$remite_nombre "tuweb.com"// Tu nombre o el de tu página
                
$remite_email "tuweb.com"// tu correo
                
$asunto utf8_decode("Recuperación de contraseña"); // Asunto (se puede cambiar)
                
$mensaje "Se ha generado una nueva contraseña para el usuario <strong>".$usuario."</strong>. <br>La nueva contraseña es: <strong>".$contrasenna."</strong>";
                 
$cabeceras "From: tuweb.com \r\n";
                 
$cabeceras .= "Reply-To: tuweb.com \r\n";
                 
$cabeceras $cabeceras."Content-Type: text/html; charset=utf-8\r\n"
                
$enviar_email mail($email,$asunto,$mensaje,$cabeceras);
                if(
$enviar_email) {
                    
$error =true
                }else {
                   
$error
                }
            }else {
                
$error
            }
        }
    }else {
$error =true;}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="X-UA-Compatible" content="IE=9" /> 
<title>Documento sin título</title>
<style type="text/css">
#apDiv1 {
    position:absolute;
    width:1024px;
    height:768px;
    overflow: hidden;
    z-index:2;
    }
#apDiv2 {
    position:absolute;
    width:1024px;
    height:190px;
    background-color:#FFF;
    z-index:1;
    }
#apDiv3 {
    position:absolute;
    left:9px;
    top:190px;
    width:238px;
    height:577px;

    z-index:1;
}
#apDiv4 {
    position:absolute;
    left:239px;
    top:190px;
    width:541px;
    height:400px;
    background-color:#FFF;
    z-index:1;
}
#apDiv5 {
    position:absolute;
    top:190px;
    width:200px;
    height:200px;
    background-color:#FFF;
    z-index:3;
    }
#apDiv6 {
    position:absolute;
    left:794px;
    top:190px;
    width:238px;
    height:577px;
    z-index:1;
}
</style>
<link href="cuerpo.css" rel="stylesheet" type="text/css" />
</head>
<body class="fondo">
   
    <?php
          
//Verificamos si hay algún error
          
if ($error) {
               echo 
'<p>Error, el usuario o contrase&ntilde;a es erroneo</p>';
          }
          
?>
    

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <div id="apDiv1">
    <div id="apDiv2"><img src=""; /></div>
    
      <div id="apDiv3"></div>
      <div id="apDiv4">
      <br>
      <p style="text-align:center";>Introduce tu nombre de usuario y te enviaremos una nueva contraseña a tu email.</p>
      <div id="apDiv5" class="centradiv">
      <label>Usuario:</label><br />
        <input type="text" name="usuario" id="usuario" /><br />
        <input type="submit" name="enviar" value="Enviar" enctype="multipart/form-data"  />
        </div>
      </div>
      <div id="apDiv6"></div>
        </div>
</form>
</body>
</html>
En este caso, no envía los datos. Perdona por los grandes fallos de programación, ya me da hasta vergüenza preguntar, pero espero que entiendas mi ignorancia...
  #9 (permalink)  
Antiguo 23/10/2012, 10:59
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 12 años, 5 meses
Puntos: 2
Respuesta: mostrar error php en misma página

A ver, con el código anterior pasa algo raro.

Nada más cargar la página por primera vez, aparece el formulario y el mensaje del $error ("Error, el usuario o contraseña es erroneo") donde yo lo coloqué.

Pero al darle el botón de envío, con el input vacío, dicho mensaje de error desaparece y ya no hace nada, cuando debería dar error.

Por otra parte, sí es verdad, que si ingreso un nombre de usuario, después envía el correo dando una nueva contraseña y aparece el mensaje (de momento sólo tengo un mensaje para todo).

Y, sin embargo, si ingreso un nombre de usuario falso, no hace nada, es decir, sigue el formulario y el input se vacía. ¿Por qué es esto?
  #10 (permalink)  
Antiguo 23/10/2012, 15:25
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 12 años, 5 meses
Puntos: 2
Respuesta: mostrar error php en misma página

Hola. Por fin he averiguado mis errores. Seguramente por el cansancio acumulado me lié tanto con algo tan sencillo. Cambiaba los valores de los errores, donde tenía que poner $error, ponía $error = true. Vamos, un follón, y como nadie excepto Nemutagk me contestó, pues no sabía si era fallo del php, del html, del echo o yo que sé. Por supuesto, no estáis obligados ni a contestar, ni a ayudar, no lo doy por hecho. Por si a alguien le sirve, este ejemplo me orientó a solucionar los problemas que tuve y a darme cuenta de la inversión de los valores: http://www.taringa.net/posts/hazlo-t...r-con-PHP.html Un saludo.

Etiquetas: error+php, formulario
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 03:25.