PHP - Salida de resultados en PHP - Duda

 
Vista:
Imágen de perfil de Albert
Val: 165
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Salida de resultados en PHP - Duda

Publicado por Albert (49 intervenciones) el 03/01/2021 14:44:14
Buenos días: Tengo el siguiente PHP que me valida datos del formulario de registro:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php header('Content-Type: text/html; charset=utf-8');
/* Formulari.php - Validador de formulario */
 
// Incluimos el colector de funciones
  require_once('db_fns.php');
  include ('Register_OK.php');
 
  $msj_require = "";
  $msj_email = "";
  $msj_user_exist = "";
  $msj_email_exist = "";
 
# Se ha enviado el formulario?
if($_SERVER["REQUEST_METHOD"] == "POST") {
    # Aqui se validan los datos
 
    // Test para datos requeridos
    if(empty($_POST['usuario']) || empty($_POST['password']) || empty($_POST['email'])
        || empty($_POST['re_password']) || empty($_POST['nombreLeft']) || empty($_POST['nombreRight'])
        || empty($_POST['sexoLeft']) || empty($_POST['sexoRight'])) {
        $msj_require = "Debes rellenar todos los campos del formulario";
        $errors = true;
        }
 
    $username = trim($_POST['usuario']);
    $email = trim($_POST['email']);
    $passwd = trim($_POST['password']);
    $passwd2 = trim($_POST['re_password']);
    $nameLeft = trim($_POST['nombreLeft']);
    $sexLeft = $_POST['sexoLeft'];
    $nameRight = trim($_POST['nombreRight']);
    $sexRight = $_POST['sexoRight'];
 
    //Validamos el formato de email
    if (!filter_var(($email), FILTER_VALIDATE_EMAIL)){
        $msj_email = "El formato de email introducido no es valido";
        $errors = true;
        }
 
     // Conexión con DB
     $con = db_connect();
 
     $sql_user = "SELECT * FROM usuarios WHERE usuario = '$username'";
     $user = mysqli_query($con, $sql_user);
     $total_user = mysqli_num_rows($user);
 
     if(mysqli_num_rows($user)>0) {
         // Si es mayor a cero ya existe el usuario
         $msj_user_exist = "El Nombre de pareja ya existe.";
         $errors = true;
     }
 
     $sql_mail = "SELECT * FROM usuarios WHERE email = '$email'";
     $mail = mysqli_query($con, $sql_mail);
     $total_mail = mysqli_num_rows($mail);
 
    if(mysqli_num_rows($mail)>0) {
        // Si es mayor a cero ya existe el email
        $msj_email_exist = "Este Email ya existe.";
        $errors = true;
        }
 
    # Se procesa el formulario o tiene errores?
    if($errors = false) {
 
        $add = "INSERT INTO usuarios (usuario, email, password, nom_left, sexo_left, nom_right, sexo_right)
                values ('$username','$email','$passwd','$nameLeft','$sexLeft','$nameRight','$sexRight')";
        mysqli_query($con, $add);
        if (mysqli_affected_rows()>0) {
            //Si se agrego el registro sin errores llevar a pagina Register_OK
            header ('Location: Register_OK.php');
        }
        //Liberamos recorset de ejecución del query y cerramos conexión
        mysqli_close();
 
        # Acabo la aplicación
        exit;
 
    }
    else
        $msj_require;
        $msj_email;
        $msj_user_exist;
        $msj_email_exist;
}
 
# Cargo la página para que muestre los errores
 include ('Register_KO.php');
 
?>

Bién, el problema es el siguiente: Me muestra los errores correctamente abriéndose Register_KO.php, pero cuando cierro la ventana, me aparece por debajo "Registro_OK.php", y no lo entiendo, porque el INSERT no se efectua, y por lo tanto, no tendría que cargarme dicha página, ya que esta dentro del If "si no hay errores" ?¿? (Alguien sabe porque sucede esto??)

Gracias de antemano, y un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Albert
Val: 165
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Salida de resultados en PHP - Duda

Publicado por Albert (49 intervenciones) el 03/01/2021 15:40:28
Al parecer, también he detectado que aunque ponga un usuario nuevo sin errores, no me lo inserta y salta directamente a la página Register_KO sin listar errores ?¿? ... vaya ... no se que puede estar pasando (?¿?)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Albert
Val: 165
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Salida de resultados en PHP - Duda

Publicado por Albert (49 intervenciones) el 04/01/2021 00:47:04
Bueno, parece que así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php header('Content-Type: text/html; charset=utf-8');
/* Formulari.php - Validador de formulario */
 
// Incluimos el colector de funciones
  require_once('db_fns.php');
  include ('Register_OK.php');
 
  $msj_require = "";
  $msj_email = "";
  $msj_user_exist = "";
  $msj_email_exist = "";
  $errors = false;
 
# Se ha enviado el formulario?
if($_SERVER["REQUEST_METHOD"] == "POST") {
    # Aqui se validan los datos
 
    // Test para datos requeridos
    if(empty($_POST['usuario']) || empty($_POST['password']) || empty($_POST['email'])
        || empty($_POST['re_password']) || empty($_POST['nombreLeft']) || empty($_POST['nombreRight'])
        || empty($_POST['sexoLeft']) || empty($_POST['sexoRight'])) {
        $msj_require = "Debes rellenar todos los campos del formulario";
        $errors = true;
        }
 
    $username = trim($_POST['usuario']);
    $email = trim($_POST['email']);
    $passwd = trim($_POST['password']);
    $passwd2 = trim($_POST['re_password']);
    $nameLeft = trim($_POST['nombreLeft']);
    $sexLeft = $_POST['sexoLeft'];
    $nameRight = trim($_POST['nombreRight']);
    $sexRight = $_POST['sexoRight'];
 
    //Validamos el formato de email
    if (!filter_var(($email), FILTER_VALIDATE_EMAIL)){
        $msj_email = "El formato de email introducido no es valido";
        $errors = true;
        }
 
     // Conexión con DB
     $con = db_connect();
 
     $sql_user = "SELECT * FROM usuarios WHERE usuario = '$username'";
     $user = mysqli_query($con, $sql_user);
     $total_user = mysqli_num_rows($user);
 
     if(mysqli_num_rows($user)>0) {
         // Si es mayor a cero ya existe el usuario
         $msj_user_exist = "El Nombre de pareja ya existe.";
         $errors = true;
     }
 
     $sql_mail = "SELECT * FROM usuarios WHERE email = '$email'";
     $mail = mysqli_query($con, $sql_mail);
     $total_mail = mysqli_num_rows($mail);
    // echo "\n La Consulta tiene: $total_mail registros <br>";
 
    if(mysqli_num_rows($mail)>0) {
        // Si es mayor a cero ya existe el email
        $msj_email_exist = "Este Email ya existe.";
        $errors = true;
        }
 
    # Se procesa el formulario o tiene errores?
    if($errors == false) {
 
        $add = "INSERT INTO usuarios (usuario, email, password, nom_left, sexo_left, nom_right, sexo_right)
                values ('$username','$email','$passwd','$nameLeft','$sexLeft','$nameRight','$sexRight')";
        mysqli_query($con, $add);
        if (mysqli_affected_rows()>0) {
            //Si se agrego el registro sin errores llevar a pagina Register_OK
            header ('Location: Register_OK.php');
        }
        //Liberamos recorset de ejecución del query y cerramos conexión
        mysqli_close();
 
        # Acabo la aplicación
        exit;
 
    }
    else
        $msj_require;
        $msj_email;
        $msj_user_exist;
        $msj_email_exist;
        header ('Location: Register_KO.php');
}
 
# Cargo la Home para que vuelva a la página principal
include ('Register_KO.php');

He conseguido que el INSERT funcione si no hay errores, y cuando hay errores me muestra "Register_KO.php", pero esta ventana tiene un link para abrir de nuevo el formulario a la vez que se cierra la ventana con los mensajes de error, pero me muestra la ventana "Register_OK.php", que no sé porque diablos sale, si no se han insertado datos!! :-(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Salida de resultados en PHP - Duda

Publicado por joel (1269 intervenciones) el 04/01/2021 08:25:35
Hola Albert, cuando haces un header("location.... el sistema abre la pagina indicada, pero continua con la ejecución de la pagina... por lo que es recomendable poner un return después del header() para que no continué la ejecución.

Puede ser ese el problema?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Albert
Val: 165
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Salida de resultados en PHP - Duda

Publicado por Albert (49 intervenciones) el 04/01/2021 11:07:33
Pero un "return;" o return true: o return false; ?? y seria en los dos header ?? y justo después del header o fuera de la instrucción IF ??

Porque me sigue haciendo lo mismo. O tendría que poner un "break" ??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Salida de resultados en PHP - Duda

Publicado por joel (1269 intervenciones) el 04/01/2021 11:16:07
Yo siempre pongo simplemente un
1
return;
depues del header() para que no continue el código...

Por lo que comentas, me da la sensación que abre el ok y luego el ko.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Albert
Val: 165
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Salida de resultados en PHP - Duda

Publicado por Albert (49 intervenciones) el 04/01/2021 11:42:17
No, primero hago la prueba forzando a errores y me muestra la ventana de KO, pero cuando cierro la ventana de KO que me abre automáticamente el formulario de registro, me aparece en medio la ventana OK.

Si lo hago a la inversa, es decir, si inserto datos nuevos, me hace la secuencia correcta y ahí se queda (ya que hay un exit después de cerrar la conexión con DB
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Salida de resultados en PHP - Duda

Publicado por joel (1269 intervenciones) el 04/01/2021 11:47:46
cuando dices que te abre, te refieres a una nueva pestaña?
Si es así, no es abierto mediante header("location"...., ya que no abre una nueva pestaña!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Albert
Val: 165
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Salida de resultados en PHP - Duda

Publicado por Albert (49 intervenciones) el 04/01/2021 11:44:48
La opción del poner un return; no me funciona
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Albert
Val: 165
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Salida de resultados en PHP - Duda

Publicado por Albert (49 intervenciones) el 04/01/2021 12:09:09
Por fiiiin, jajaja, solucionado. Era por el include, que si lo ponía al principio, siempre lo carga. Así es como me ha quedado el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php header('Content-Type: text/html; charset=utf-8');
/* Formulari.php - Validador de formulario */
 
// Incluimos el colector de funciones
  require_once('db_fns.php');
 
  $msj_require = "";
  $msj_email = "";
  $msj_user_exist = "";
  $msj_email_exist = "";
  $errors = false;
 
# Se ha enviado el formulario?
if($_SERVER["REQUEST_METHOD"] == "POST") {
    # Aqui se validan los datos
 
    // Test para datos requeridos
    if(empty($_POST['usuario']) || empty($_POST['password']) || empty($_POST['email'])
        || empty($_POST['re_password']) || empty($_POST['nombreLeft']) || empty($_POST['nombreRight'])
        || empty($_POST['sexoLeft']) || empty($_POST['sexoRight'])) {
        $msj_require = "Debes rellenar todos los campos del formulario";
        $errors = true;
        }
 
    $username = trim($_POST['usuario']);
    $email = trim($_POST['email']);
    $passwd = trim($_POST['password']);
    $passwd2 = trim($_POST['re_password']);
    $nameLeft = trim($_POST['nombreLeft']);
    $sexLeft = $_POST['sexoLeft'];
    $nameRight = trim($_POST['nombreRight']);
    $sexRight = $_POST['sexoRight'];
 
    //Validamos el formato de email
    if (!filter_var(($email), FILTER_VALIDATE_EMAIL)){
        $msj_email = "El formato de email introducido no es valido";
        $errors = true;
        }
 
     // Conexión con DB
     $con = db_connect();
 
     $sql_user = "SELECT * FROM usuarios WHERE usuario = '$username'";
     $user = mysqli_query($con, $sql_user);
     $total_user = mysqli_num_rows($user);
 
     if(mysqli_num_rows($user)>0) {
         // Si es mayor a cero ya existe el usuario
         $msj_user_exist = "El Nombre de pareja ya existe.";
         $errors = true;
     }
 
     $sql_mail = "SELECT * FROM usuarios WHERE email = '$email'";
     $mail = mysqli_query($con, $sql_mail);
     $total_mail = mysqli_num_rows($mail);
 
    if(mysqli_num_rows($mail)>0) {
        // Si es mayor a cero ya existe el email
        $msj_email_exist = "Este Email ya existe.";
        $errors = true;
        }
 
    # Se procesa el formulario o tiene errores?
    if($errors == false) {
 
        // Incluimos la ventana de Register_OK
        include ('Register_OK.php');
 
        $add = "INSERT INTO usuarios (usuario, email, password, nom_left, sexo_left, nom_right, sexo_right)
                values ('$username','$email','$passwd','$nameLeft','$sexLeft','$nameRight','$sexRight')";
        mysqli_query($con, $add);
        if (mysqli_affected_rows()>0) {
            //Si se agrego el registro sin errores llevar a pagina Register_OK
            header ('Location: Register_OK.php');
        }
        //Liberamos recorset de ejecución del query y cerramos conexión
        mysqli_close();
 
        # Acabo la aplicación
        exit;
 
    }
    else
        $msj_require;
        $msj_email;
        $msj_user_exist;
        $msj_email_exist;
        include ('Register_KO.php');
        header ('Location: Register_KO.php');
}
 
?>

Gracias por tu ayuda Joel ;-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Salida de resultados en PHP - Duda

Publicado por joel (1269 intervenciones) el 04/01/2021 15:06:02
Gracias a ti por comentarlo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar