PHP - Error insertar en base de datos

 
Vista:
sin imagen de perfil
Val: 10
Ha aumentado su posición en 16 puestos en PHP (en relación al último mes)
Gráfica de PHP

Error insertar en base de datos

Publicado por unai (4 intervenciones) el 01/11/2020 22:11:19
Buenas,

Estoy haciendo un registro que se valida por correo electrónico pero a la hora de insertar los datos en dos tablas me da salta error "*Fallo al guardar el usuario!!". Los valores están bien, los nombres de las tablas también y la conexión a la base de datos también. ¿alguien me puede ayudar?

Gracias de antemano.

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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
<?php
 
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
 
require 'restablecerContrasena/PHPMailer/Exception.php';
require 'restablecerContrasena/PHPMailer/PHPMailer.php';
require 'restablecerContrasena/PHPMailer/SMTP.php';
 
if (isset($_POST['acepto'])) {
    //Carácteres para la contraseña
    $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
    $clave = "";
    //Reconstruimos la contraseña segun la longitud que se quiera
    for ($i = 0; $i <= 20; $i++) {
        //obtenemos un caracter aleatorio escogido de la cadena de caracteres
        $clave .= substr($str, rand(0, 62), 1);
    }
    // Conexión a la base de datos
    require_once 'includes/conexion.php';
    // Iniciar sesión
    if (!isset($_SESSION)) {
        session_start();
    }
 
    // Recorger los valores del formulario de registro
    $nickname = $_POST['nickname'];
    $nombre = $_POST['nombre'];
    $apellido1 = $_POST['apellido1'];
    $apellido2 = $_POST['apellido2'];
    $email = $_POST['email'];
    $password = $_POST['password'];
    $aceptoCorreo = $_POST['acepto2'];
 
 
    // Array de errores
    $errores = array();
 
    // Validar los datos antes de guardarlos en la base de datos
    // Validar campo nickname
    if (!empty($nickname)) {
        $nickname_validado = true;
    } else {
        $nickname_validado = false;
        $errores['nickname'] = "El nickname no es válido";
    }
 
    //Validar nickname repetido
    $consulta = "select nickname from usuarios";
 
    $resultado = mysqli_query($db, $consulta);
    while ($row = mysqli_fetch_array($resultado)) {
        $nick = $row['nickname'];
 
        if ($nickname != $nick) {
            $nickname_validado = true;
        } else {
            $nickname_validado = false;
            $errores['nickname'] = "*El nickname ya está registrado.";
        }
    }
 
    // Validar campo nombre
    if (!empty($nombre) && !is_numeric($nombre) && !preg_match("/[0-9]/", $nombre)) {
        $nombre_validado = true;
    } else {
        $nombre_validado = false;
        $errores['nombre'] = "*El nombre no es válido.";
    }
 
    // Validar apellido1
    if (!empty($apellido1) && !is_numeric($apellido1) && !preg_match("/[0-9]/", $apellido1)) {
        $apellido1_validado = true;
    } else {
        $apellido1_validado = false;
        $errores['apellido1'] = "*EL apellido no es válido.";
    }
 
    // Validar apellido2
    if (!is_numeric($apellido2) && !preg_match("/[0-9]/", $apellido2)) {
        $apellido2_validado = true;
    } else {
        $apellido2_validado = false;
        $errores['apellido2'] = "*El apellido no es válido.";
    }
 
 
 
    // Validar el email
    if (!empty($email) && filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $email_validado = true;
    } else {
        $email_validado = false;
        $errores['email'] = "*El email no es válido";
    }
 
    //Validar email repetido
    $consulta = "select email from usuarios";
    $resultado = mysqli_query($db, $consulta);
    while ($row = mysqli_fetch_array($resultado)) {
        $correo = $row['email'];
 
        if ($email != $correo) {
            $email_validado = true;
        } else {
            $email_validado = false;
            $errores['email'] = "*Este email ya está registrado.";
        }
    }
 
    // Newsletter
    if ($aceptoCorreo == 'on') {
        $newsletter = 'Si';
    } else {
        $newsletter = 'No';
    }
 
    // Validar la contraseña
 
    $length = strlen($password);
 
    if (!empty($password) && $length > 6) {
        $password_validado = true;
    } else {
        $password_validado = false;
        $errores['password'] = "*La contraseña tiene que ser mas larga.";
    }
 
    $guardar_usuario = false;
 
    if (count($errores) == 0) {
        $guardar_usuario = true;
 
        // Cifrar la contraseña
        $password_segura = password_hash($password, PASSWORD_BCRYPT, ['cost' => 4]);
 
 
 
        // INSERTAR USUARIO EN LA TABLA USUARIOS DE LA BBDD
        $sql1 = "INSERT INTO usuarios VALUES(null, null, null, null, null, null, '$email', '$password_segura', null,  CURDATE(), CURDATE(), null);";
        $guardar = mysqli_query($db, $sql1);
 
 
        //$sql1 = "INSERT into usuarios (email,password,fecha_alta,fech_ult_sesion) VALUES ('$email', '$password_segura', CURDATE(), CURDATE())";
        //	$guardar = mysqli_query($db, $sql1);
        // INSERTAR USUARIO EN LA TABLA USUARIOS DE LA BBDD
        $sql2 = "INSERT INTO usuarioscopia VALUES(null, '$nickname', '$nombre', '$apellido1', '$apellido2', '$email', '$password_segura', CURDATE(), CURDATE(), '$newsletter', '$clave');";
        $guardar2 = mysqli_query($db, $sql2);
 
 
        //$sql2 = "INSERT into usuarioscopia (nickname,nombre,apellido1,apellido2,email,password,fecha_alta,fech_ult_sesion,newsletter,txt_activ) VALUES ('$nickname', '$nombre', '$apellido1', '$apellido2', '$email', '$password_segura', CURDATE(), CURDATE(), '$newsletter', '$clave')";
        //$guardar2 = mysqli_query($db, $sql2);
//		var_dump(mysqli_error($db));
//		die();
 
        if ($guardar & $guardar2) {
            $_SESSION['completado'] = "<p class='correcto'>*Te hemos enviado un email para verificar tu cuenta. Si no encuentras el correo mira en spam.</p>";
 
            $url = "http://localhost/prueba/activarCuenta.php?id=" . $clave;
 
            // Instantiation and passing `true` enables exceptions
            $mail = new PHPMailer(true);
 
            try {
                //Server settings
                $mail->SMTPDebug = 0;                                       // Enable verbose debug output
                $mail->isSMTP();                                            // Set mailer to use SMTP
                $mail->Host = 'smtp.gmail.com';         // Specify main and backup SMTP servers
                $mail->SMTPAuth = true;                                   // Enable SMTP authentication
                $mail->Username = 'ejemplo@gmail.com';                     // SMTP username
                $mail->Password = 'ejemplo';                               // SMTP password
                $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;         // Enable TLS encryption, `PHPMailer::ENCRYPTION_SMTPS` also accepted
                $mail->Port = 587;                                    // TCP port to connect to
                //Recipients
                $mail->setFrom('ejemplo@gmail.com', 'PRUEBA');
                $mail->addAddress($email);     // Add a recipient
                // Content
                $mail->isHTML(true);                                  // Set email format to HTML
                $mail->Subject = 'Registro usuario';
                $mail->Body = $url;
                $mail->send();
                echo "<p class='correcto'>Te hemos enviado un email a tu correo. Si no lo ves mira tambien en spam</p>";
                $cont++;
            } catch (Exception $e) {
                echo "<p class='error'>*Message could not be sent. Mailer Error: {$mail->ErrorInfo}</p>";
            }
        } else {
            $_SESSION['errores']['general'] = "*Fallo al guardar el usuario!!";
        }
    } else {
        $_SESSION['errores'] = $errores;
    }
} else {
 
 
    // Iniciar sesión
    if (!isset($_SESSION)) {
        session_start();
    }
 
    $acepto = isset($_POST['acepto']);
    $errores['acepto'] = "*Debes aceptar los terminos y condiciones.";
 
    $_SESSION['errores'] = $errores;
}
header('Location: includes/registro.php');
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 joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Error insertar en base de datos

Publicado por joel (1269 intervenciones) el 02/11/2020 08:21:23
Hola, en la linea 150 puedes poner un:
1
2
echo $sql1;
echo $sql2;

para ver el código que genera con las variables??

Y si ese código lo ejecutas directamente sobre la base de datos te hace los insert?


NOTA; Esto de usar tantos null... lo veo un poco extraño!!! son campos con un default establecido?
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
sin imagen de perfil
Val: 10
Ha aumentado su posición en 16 puestos en PHP (en relación al último mes)
Gráfica de PHP

Error insertar en base de datos

Publicado por unai (4 intervenciones) el 02/11/2020 12:52:14
Si hago eso no sale nada, esas variables están vacias.
El insert con los nulls lo he puesto parar probar, suelo hacerlo como el insert que está comentado justo debajo. Esos campos se rellenan más adelante y en la base de datos están como null.
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

Error insertar en base de datos

Publicado por joel (1269 intervenciones) el 02/11/2020 19:25:20
No pueden estar vacías esas variables, si las defines en la linea 140 y 147 y en la 150 muestras su contenido, debería de mostrártelo!!!
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
sin imagen de perfil
Val: 10
Ha aumentado su posición en 16 puestos en PHP (en relación al último mes)
Gráfica de PHP

Error insertar en base de datos

Publicado por unai (4 intervenciones) el 02/11/2020 21:46:57
Perdón, escribí mal el código.
Saldria esto:

1
2
3
INSERT into usuarios (email,password,fecha_alta,fech_ult_sesion) VALUES ('juan@gmail.com', '$2y$04$kUX9SlYR0nbabF0zeLj7F.alYejIfAok8COw1NW611xcCu3v0ppeW', CURDATE(), CURDATE())
 
INSERT into usuarioscopia (nickname,nombre,apellido1,apellido2,email,password,fecha_alta,fech_ult_sesion,newsletter,txt_activ) VALUES ('juan89', 'juan', 'rodriguez', 'garcia', 'juan@gmail.com', '$2y$04$kUX9SlYR0nbabF0zeLj7F.alYejIfAok8COw1NW611xcCu3v0ppeW', CURDATE(), CURDATE(), 'Si', 'vwxTZh77QNl24543I1vm')
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

Error insertar en base de datos

Publicado por joel (1269 intervenciones) el 03/11/2020 08:10:49
Ok, y has ejecutado esto directamente en la base de datos? haber si te da algún error?
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 Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Error insertar en base de datos

Publicado por Mauro (1036 intervenciones) el 03/11/2020 14:29:45
¿Usas algún IDE? ¿Probaste con xdebug?
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