Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Muestra error pero registra la cuenta...

Estas en el tema de Muestra error pero registra la cuenta... en el foro de PHP en Foros del Web. Hola gente; recientemente he conseguido crear un registro de usuarios ( ), pero ahora tengo un problema a la hora de mostrar errores cuando la ...
  #1 (permalink)  
Antiguo 19/03/2015, 13:39
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 7 meses
Puntos: 145
Muestra error pero registra la cuenta...

Hola gente;

recientemente he conseguido crear un registro de usuarios ( ), pero ahora tengo un problema a la hora de mostrar errores cuando la contraseña es menor a 6 caracteres, y es que me crea la cuenta (se crea en la DB).

¿Cómo evito que se cree la cuenta si la contraseña es < 6?
Solo me muestra el error, pero me crea la cuenta.

register.php


PHPMyAdmin


Os dejo cómo tengo estructurada la(s) páginas.

registro.php (donde está el formulario)

Código HTML:
<form method="POST" action="register.php" accept-charset="utf-8">

	<label for="signup_email">Email</label>
	<input type="email" name="signup_email" value="" id="signup_email" maxlength="50" size="30" required* />
	<label for="signup_password">Contraseña (debe contener más de 6 carácteres)</label>
	<input type="password" name="signup_password" value="" id="signup_password" maxlength="25" size="30"*required />
	<label for="signup_confirm_password">Confirmar Contraseña</label>
	<input type="password" name="confirm_password" value="" id="signup_confirm_password" maxlength="25" size="30" required />

	<input type="submit" name="signup_submit" value="Registrarse" class="btn">

</form> 
register.php (la llamada al "post" del form)

Código PHP:
<body>
<?php
// Carga la configuración
$config parse_ini_file('config.ini'); 

// Conexión con los datos del 'config.ini'
$connection mysqli_connect('localhost',$config['username'],$config['password'],$config['dbname']);

// Si la conexión falla, aparece el error
if($connection === false) {
    return 
mysqli_connect_error();
}

// Leer los datos del formulario
$email $_POST["signup_email"];
$password $_POST["signup_password"];

// Realiza la validación de la contraseña 
$error_message "";
if (
strlen($password) < 6) {
    
$error_message "La contraseña es demasiado corta. Por favor, introduzca al menos 6 caracteres";
}
else if ( 
$password != $_POST["signup_confirm_password"]) {
    
$error_message "Las contraseñas no coinciden. Por favor, inténtelo de nuevo";
};

if ( ! 
filter_var($emailFILTER_VALIDATE_EMAIL)) {
    
$error_message "Por favor, compruebe la dirección de email introducida";
};
 
// Genera una clave aleatoria
function generate_random_key() {
    
$chars "abcdefghijklmnopqrstuvwxyz0123456789";
 
    
$new_key "";
    for (
$i 0$i 32$i++) {
        
$new_key .= $chars[rand(0,35)];
    }
    return 
$new_key;
}

$random_key generate_random_key();

// Inserta los datos en la base
$stm $connection->prepare("insert into usuarios (email,password,activation_key,validated) " "values ( ? , ? , ? , 0 )");
$stm->bind_param("sss",$email,$password,$random_key);

if (!
$stm->execute()) {
    
// La inserción puede fallar si el usuario ya existía en la base de datos
    
$usuario_mal "Error, el usuario con el email ".$email." ya existe";
} else {
    
$usuario_ok "El usuario ha sido creado con el email ".$email;
}

$connection->close();

?>

<hr>

<p><?php echo $error_message ?>
<br>
<p><?php echo $usuario_ok ?></p>
<p><?php echo $usuario_mal ?></p>

</body>
Si veis algún otro error, por favor, resaltado.

Gracias muchas.
  #2 (permalink)  
Antiguo 19/03/2015, 13:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Muestra error pero registra la cuenta...

Tu error es lógico, jamás verificas los errores para proceder:

Código PHP:
Ver original
  1. if (!$error_message) {
  2.  // NO hay errores, entonces aquí hago el INSERT
  3. }
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 19/03/2015, 14:01
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 7 meses
Puntos: 145
Respuesta: Muestra error pero registra la cuenta...

Cita:
Iniciado por pateketrueke Ver Mensaje
Tu error es lógico, jamás verificas los errores para proceder:

Código PHP:
Ver original
  1. if (!$error_message) {
  2.  // NO hay errores, entonces aquí hago el INSERT
  3. }
¿Y cómo evito el INSERT?
  #4 (permalink)  
Antiguo 19/03/2015, 14:04
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Muestra error pero registra la cuenta...

Precisamente eso es lo que hace el el if() ¿o no sabes cómo funcionan?

Sólo si la condición se cumple se ejecutará el contenido, si no, pues no.

Y como es lógico, sólo harás el INSERT si NO HAY ERRORES.

Por ende, se evita automáticamente al haber errores.

Usa tu sentido común por favor.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 19/03/2015, 14:06
 
Fecha de Ingreso: marzo-2015
Ubicación: Peru
Mensajes: 34
Antigüedad: 9 años, 1 mes
Puntos: 6
Respuesta: Muestra error pero registra la cuenta...

debes crear una condicion
$error = 0;
if(strlen($pass)<6){
$error_mensaje = 'demasiado corta';
$error = 1;
}

if($error ==0){
$sql ="insert into";
}else{
<p><?php echo $error_message ?>
}
  #6 (permalink)  
Antiguo 19/03/2015, 14:11
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 7 meses
Puntos: 145
Respuesta: Muestra error pero registra la cuenta...

Cita:
Iniciado por pateketrueke Ver Mensaje
Precisamente eso es lo que hace el el if() ¿o no sabes cómo funcionan?

Sólo si la condición se cumple se ejecutará el contenido, si no, pues no.

Y como es lógico, sólo harás el INSERT si NO HAY ERRORES.

Por ende, se evita automáticamente al haber errores.

Usa tu sentido común por favor.
Claro, tiene sentido.

Sin embargo, me muestra los errores... y sigue insertando.

Código PHP:
if (!$error_message) {
 
// NO hay errores, entonces aquí hago el INSERT
 
$error_message "";
}; 
Por eso pregunto, ¿cómo 'cancelo' el INSERT?

p.s.: Me muestra el error "Las contraseñas no coinciden." aunque las contraseñas coincidan
  #7 (permalink)  
Antiguo 19/03/2015, 14:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Muestra error pero registra la cuenta...

Creo que sigues sin entender, lee bien:
Código PHP:
Ver original
  1. // MAL
  2. if (1 < 2) {
  3.   $error = 'suponiendo que paso algún error';
  4. }
  5.  
  6. // imagina que esta es tu rutina del INSERT

Ahí jamás verificas los errores para evitar el INSERT, ahora bien:
Código PHP:
Ver original
  1. // BIEN
  2. if (1 < 2) {
  3.   $error = 'suponiendo que paso algún error';
  4. }
  5.  
  6. if (!$error) {
  7.   // imagina que esta es tu rutina del INSERT
  8. }

¿De verdad es muy complicado de entender?

Cita:
Por eso pregunto, ¿cómo 'cancelo' el INSERT?
No debes "cancelar" nada, sólo debes mover el código al lugar correcto dentro del if(), caray.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 19/03/2015, 14:33
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 7 meses
Puntos: 145
Respuesta: Muestra error pero registra la cuenta...

Vale, vale, ya lo he entendido.

Código PHP:
if (!$error_message) {
    
        
// Genera una clave aleatoria 
        
function generate_random_key() { 
            
$chars "abcdefghijklmnopqrstuvwxyz0123456789"
              
$new_key ""
            for (
$i 0$i 32$i++) { 
                
$new_key .= $chars[rand(0,35)]; 
               } 
            return 
$new_key
        };
//Final de la funcion 

        
$random_key generate_random_key(); 

    
// Inserta los datos en la base 
    
$stm $connection->prepare("insert into usuarios (email,password,activation_key,validated) " "values ( ? , ? , ? , 0 )"); 
    
$stm->bind_param("sss",$email,$password,$random_key); 

    if (!
$stm->execute()) { 
        
// La inserción puede fallar si el usuario ya existía en la base de datos 
           
$usuario_mal "Error, el usuario con el email ".$email." ya existe"
    } else { 
        
$usuario_ok "El usuario ha sido creado con el email ".$email
    }

}; 
//Final de IF 
Pero ahora me sigue lanzando el error de que la contraseñas no coinciden por más que copie y pegue un texto desde bloc de notas en cada campo.

¿Por qué puede ser eso?
  #9 (permalink)  
Antiguo 19/03/2015, 14:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Muestra error pero registra la cuenta...

En tu formulario tienes esto:
Cita:
name="confirm_password"
Pero en tu código tratas de leer el valor así:
Código PHP:
Ver original
  1. $_POST["signup_confirm_password"]

¿Ya viste cual es tu error?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 19/03/2015, 14:40
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 7 meses
Puntos: 145
Respuesta: Muestra error pero registra la cuenta...

Cita:
Iniciado por pateketrueke Ver Mensaje
En tu formulario tienes esto:


Pero en tu código tratas de leer el valor así:
Código PHP:
Ver original
  1. $_POST["signup_confirm_password"]

¿Ya viste cual es tu error?
Tienes toda la razón.


Última edición por NueveReinas; 19/03/2015 a las 14:42 Razón: Correción

Etiquetas: formulario, muestra, mysql, registro, 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 21:53.