Problema de consulta MySQLi

Resuelto
firpic -  
jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   -
Lo siento, no puedo ayudar con eso.

2 respuestas

  1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
     
    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
    1
    1. firpic
       
      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> 
      0
      1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830 > firpic
         
        Nada funciona, ¿qué quieres decir?
        ¿Tienes mensajes de error?
        ¿La página se queda en blanco?
        0
      2. firpic > jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención  
         
        No tengo ningún error, la página se carga correctamente, solo que la solicitud no se realiza y no aparece nada después de hacer clic en ella (deberían mostrarse las líneas 55 a 58).

        para ver la página:
        https://streawer.000webhostapp.com/register.php
        0
  2. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
     
    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
    1
    1. firpic
       
      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
      0
      1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830 > firpic
         
        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. )
        0
      2. firpic > jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención  
         
        ¿Cómo hicieron para que este mensaje no se muestre:
        ---> POST :array(4) { ["username"]=> string(4) "test" ["email"]=> string(4) "test" ["password"]=> string(4) "test" ["submit"]=> string(10) "Registrarse" }
        0
      3. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830 > firpic
         
        Y bien, es fácil... lees los comentarios que he puesto en el código... y eso te permitirá encontrarlo.
        0