Problema de consulta MySQLi
Resuelto
firpic
-
jordane45 Mensajes publicados 30426 Fecha de registro Estado Moderador Última intervención -
jordane45 Mensajes publicados 30426 Fecha de registro Estado Moderador Última intervención -
Lo siento, no puedo ayudar con eso.
2 respuestas
-
Hola,
Muestra los errores de PHP
(pon este código al principio de tu script php)error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);
y en cada consulta, gestiona la visualización eventual de los errores mysqli en caso de error en tus consultas
en la forma:if (!mysqli_query($conn, " Tu consulta sql ...")) { printf("Mensaje de error : %s\n", mysqli_error($link)); }
vuelve a nosotros con el código modificado y los posibles mensajes de error si el problema persiste
--
.
Atentamente,
Jordane-
He puesto el código con mi solicitud y aún no funciona.
Aquí está el nuevo código:<!DOCTYPE html> <html> <head> <meta name="googlebot" content="noindex"> <link rel="icon" type="images/png" sizes="512x512" href="android-chrome-512x512.png"> <link rel="stylesheet" href="serie/allstyle.css"> <link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="style1.css"> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Streawer</title> </head> <body style="background-color: #444444;"> <!-- Encabezado de la página--> <script> $(document).keydown(function(e){ if(e.which === 123){ return false; } }); </script> <div class="entete" onclick="window.location.reload()"> <img src="img/logo.png" id="logo" alt="Logo Streawer"/> <a href="main.php" id="nm" style="color: #4DB89A;"><h1 id="nom">Streawer</h1></a> </div> <?php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); require('config.php'); if (isset($_REQUEST['username'], $_REQUEST['email'], $_REQUEST['password'])){ // verificar si el nombre de usuario existe $select = mysqli_query($conn, "SELECT * FROM `users` WHERE username='".$_POST['username']."'"); // recuperar el nombre de usuario y eliminar los slashes añadidos por el formulario $username = stripslashes($_REQUEST['username']); $username = mysqli_real_escape_string($conn, $username); if(mysqli_num_rows($select)){ // recuperar el correo electrónico y eliminar los slashes añadidos por el formulario $email = stripslashes($_REQUEST['email']); $email = mysqli_real_escape_string($conn, $email); // recuperar la contraseña y eliminar los slashes añadidos por el formulario $password = stripslashes($_REQUEST['password']); $password = mysqli_real_escape_string($conn, $password); //consulta SQL + contraseña encriptada //$query = "INSERT into `users` (username, email, password) VALUES ('$username', '$email', '".hash('sha256', $password)."')"; if (!mysqli_query($conn, "INSERT into `users` (username, email, password) VALUES ('$username', '$email', '".hash('sha256', $password)."')")) { printf("Mensaje de error: %s\n", mysqli_error($link)); } // Ejecutar la consulta en la base de datos $res = mysqli_query($conn, $query); if($res){ echo " <div class='sucess'> <h3>Te has inscrito correctamente.</h3> <p>Haz clic aquí para <a href='https://streawer.000webhostapp.com/'>iniciar sesión</a></p> </div>"; } }else{ $message = "El nombre de usuario ya está en uso."; } }else{ ?> <form class="box" action="" method="post"> <h1 class="box-logo box-title"><a href="https://streawer.000webhostapp.com/">Streawer</a></h1> <h1 class="box-title">Registrarse</h1> <input type="text" class="box-input" name="username" placeholder="Nombre de usuario" required /> <input type="text" class="box-input" name="email" placeholder="Correo electrónico" required /> <input type="password" class="box-input" name="password" placeholder="Contraseña" required /> <input type="submit" name="submit" value="Registrarse" class="box-button" /> <?php if (! empty($message)) { ?> <p class="errorMessage"><?php echo $message; ?></p> <?php }?> <p class="box-register">¿Ya estás registrado? <a href="https://streawer.000webhostapp.com/">Inicia sesión aquí</a></p> </form> <?php } ?> </body> <?php include('footer.php'); ?> </html>
-
-
Varios aspectos.
Primero, intentamos colocar la mayor cantidad de código PHP fuera del HTML (generalmente antes del código HTML).
También se debe evitar usar $_POST. En tu caso estás haciendo un post... así que hay que utilizar $_POST.
Colocamos el Javascript al final de la página, justo antes del </body> preferiblemente.
No se coloca nada fuera de las etiquetas <body></body><?php //visualización de errores PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //conexión a la bdd require_once('config.php'); //Divido el código en "funciones" (que podrías colocar en un archivo aparte si // alguna vez lo utilizas en otras páginas) /** * Recupera la información de un usuario a través de su nombre de usuario */ function getUserByName($username){ global $conn; $username = mysqli_real_escape_string($conn, $username); $sql = "SELECT * FROM `users` WHERE username='$username'"; if(!$select = mysqli_query($conn, $sql)){ printf("Mensaje de error: %s\n", mysqli_error($conn)); return false; }else{ return $select; } } /** * verificar si el nombre de usuario existe */ function checkIfUserExist($username){ $select = getUserByName($username); return mysqli_num_rows($select) ? true : false; // devuelve true si existe, de lo contrario false } function addUser($username,$email,$password){ global $conn; $username = mysqli_real_escape_string($conn, $username); $email = mysqli_real_escape_string($conn, $email); $password = mysqli_real_escape_string($conn, $password); $sql = "INSERT into `users` (username, email, password) VALUES ('$username', '$email', '".hash('sha256', $password)."')"; if (!mysqli_query($conn, $sql)) { printf("Mensaje de error: %s\n", mysqli_error($link)); return false; }else{ return true; } } //solo durante las pruebas, para ver si tu formulario se envía correctamente echo "<br> ---> POST :"; var_dump($_POST); // Recuperación LIMPIA de las variables ANTES de utilizarlas // para esto, utilizo la escritura ternaria (una especie de IF/ELSE) $username = !empty( $_POST['username']) ? $_POST['username'] : NULL; $email = !empty( $_POST['email']) ? $_POST['email'] : NULL; $password = !empty( $_POST['password']) ? $_POST['password'] : NULL; //proceso del formulario if($username && $email && $password ){ if( checkIfUserExist($username) ){ $message = "El nombre de usuario ya está en uso."; }else{ if(addUser($username,$email,$password))){ $message = "<div class='sucess'> <h3>Te has inscrito con éxito.</h3> <p>Haz clic aquí para <a href='https://streawer.000webhostapp.com/'>iniciar sesión</a></p> </div>"; }else{ $message = " Error al insertar en BDD"; } } } ?> <!DOCTYPE html> <html> <head> <meta name="googlebot" content="noindex"> <link rel="icon" type="images/png" sizes="512x512" href="android-chrome-512x512.png"> <link rel="stylesheet" href="serie/allstyle.css"> <link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="style1.css"> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Streawer</title> </head> <body style="background-color: #444444;"> <!-- Encabezado de la página--> <div class="entete" onclick="window.location.reload()"> <img src="img/logo.png" id="logo" alt="Logo Streawer"/> <a href="main.php" id="nm" style="color: #4DB89A;"><h1 id="nom">Streawer</h1></a> </div> <form class="box" action="" method="post"> <h1 class="box-logo box-title"><a href="https://streawer.000webhostapp.com/">Streawer</a></h1> <h1 class="box-title">Registrarse</h1> <input type="text" class="box-input" name="username" placeholder="Nombre de usuario" required /> <input type="text" class="box-input" name="email" placeholder="Email" required /> <input type="password" class="box-input" name="password" placeholder="Contraseña" required /> <input type="submit" name="submit" value="Registrarse" class="box-button" /> <?php if (!empty($message)) { ?> <p class="errorMessage"><?php echo $message; ?></p> <?php }?> <p class="box-register">¿Ya registrado? <a href="https://streawer.000webhostapp.com/">Inicia sesión aquí</a></p> </form> <?php } ?> <?php include('footer.php'); ?> <script> $(document).keydown(function(e){ if(e.which === 123){ return false; } }); </script> </body> </html>
--
.
Cordialmente,
Jordane-
Tan pronto como accedo a la página, aparece este error:
---> POST :array(0) { }
Luego, una vez que el formulario se llena y se envía, aparece este error:
---> POST :array(4) { ["username"]=> string(4) "test" ["email"]=> string(4) "test" ["password"]=> string(4) "test" ["submit"]=> string(10) "Registrarse" }
Notice: Undefined variable: link en /storage/ssd3/384/16626384/public_html/register.php on line 44
Warning: mysqli_error() espera el parámetro 1 de tipo mysqli, null dado en /storage/ssd3/384/16626384/public_html/register.php en la línea 44
Mensaje de error :
He modificado la línea 44 porque no era la misma variable, así que he puesto $conn en lugar de $link. Entonces, me muestra este error:---> POST :array(4) { ["username"]=> string(4) "test" ["email"]=> string(4) "test" ["password"]=> string(4) "test" ["submit"]=> string(10) "Registrarse" } Mensaje de error : Field 'last_login' doesn't have a default value- ah pues aquí está....
Entonces:Mensaje de error: El campo 'last_login' no tiene un valor por defecto
Esto significa que:
O bien agregas esta columna en tu consulta INSERT dándole un valor
O bien, en la configuración de tu tabla, defines este campo con un valor por defecto.
( Por lo tanto, no es un problema de php .. sino de mysql. )
-