Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: uluigi en 12 Julio 2015, 11:38 am



Título: [Resuelto] Ayuda en inicio de sesión, ¿alguna respuesta?
Publicado por: uluigi en 12 Julio 2015, 11:38 am
Veréis, he creado un inicio de sesión y al iniciar me dice:
Notice: Undefined variable: username in C:\xampp\htdocs\yoursql\index.php on line 56 cuando en realidad está todo bien estructurado, os dejo el código para que le echéis un vistazo:
Código:
index.php
Código
  1. <?php
  2.  
  3. #Librería principal
  4. include_once('libraries.php');
  5.  
  6. #Conexión a la base de datos MySQLi
  7. yoursql_connect();
  8.  
  9. #Si no se ha hecho la sesión nos devolverá al formulario de 'login'
  10. if(!isset($_SESSION['username'])) {
  11. ?>
  12. <!DOCTYPE html><html>
  13. <head>
  14. <title>localhost / 127.0.0.1</title>
  15. <link rel="stylesheet" type="text/css" href="sheet/frame.css">
  16. </head><body id="yoursql">
  17. <div class="logo"></div>
  18. <div id="language" class="window">
  19. <label>Idioma de yourSQL:</label>
  20. <select id="language">
  21. <option value="es_ES">Español (España)</option>
  22. <option value="en_UK" disabled>Inglés</option>
  23. <option value="pt_BR" disabled>Portugués (Brasil)</option>
  24. </select>
  25. </div>
  26. <div id="login" class="window">
  27. <form method="post" action="system/path/login.php">
  28. <table id="table-login">
  29. <tr>
  30. <td><label for="username">Nombre de usuario:</label></td>
  31. <td><input type="text" autocomplete="off" id="username" name="username" class="i_"></td>
  32. </tr>
  33. <tr>
  34. <td><label for="passwd">Contraseña:</label></td>
  35. <td><input type="password" id="passwd" name="passwd" class="i_"></td>
  36. <tr>
  37. <td></td>
  38. </tr>
  39. </tr>
  40. <tr>
  41. <td id="rn"><a href="system/path/r.php"><input type="button" name="register" class="b_" value="Añadir cuenta"></a></td>
  42. <td id="r"><input type="submit" name="enter" class="b_" value="Acceder"></td>
  43. </tr>
  44. </table>
  45. </form>
  46. </div>
  47. <?php
  48. include_once('system/inc/footer.php');
  49. ?>
  50. </body></html>
  51. <?php
  52. exit();
  53. } else {
  54. ?>
  55. <h2>Bienvenido <?php echo $username; ?></h2>
  56. <a href="destroy.php">cerrar sesión</a>
  57. <?php } ?>
  58.  
Código:
login.php
Código
  1. <?php
  2. #Librería principal
  3. include_once('../../libraries.php');
  4.  
  5. #Conexión a la base de datos MySQLi
  6. yoursql_connect();
  7.  
  8. #Si los campos 'username' y 'passwd' están vacíos hacer esto
  9. #
  10.  
  11.  
  12. if(isset($_POST['enter']))
  13. {
  14. #Capturar datos del formulario y almacenarlo en variables
  15. $username = htmlspecialchars($_POST['username']);
  16. $passwd = md5($_POST['passwd']);
  17.  
  18. #Consulta de MySQL donde indica seleccionar de la tabla 'users' el campo que tenga de
  19. #nombre 'username' y el campo 'passwd'
  20. $query = mysql_query("SELECT * FROM users WHERE username = '$username' AND passwd = '$passwd'");
  21.  
  22. #Validar si el 'username' y 'passwd' existen en la base de datos o no
  23. if($row = mysql_fetch_array($query))
  24. {
  25. #Si 'username' y 'passwd' es correcto, entonces validar sesión
  26. if($row['username'] == $username && $row['passwd'] == $passwd)
  27. {
  28. #Crear sesión
  29.  
  30. #Almacenar 'username' en una variable de sesión
  31. $_SESSION['username'] = $username;
  32. header('Location: ../../index.php');
  33. }
  34. else if($row['username'] != $username && $row['passwd'] != $passwd)
  35. {
  36. #Si la contraseña es incorrecta hacer esto
  37. header("Location: ../../index.php");
  38. }
  39.  
  40.  
  41. #Liberar memoria empleada al realizar la consulta '$query'
  42. #Cerrar conexión con la base de datos
  43. }
  44. }
  45. ?>
  46.  
Espero algún tipo de ayuda, muchas gracias y ¡saludos!


Título: Re: Ayuda en inicio de sesión, ¿alguna respuesta?
Publicado por: engel lex en 12 Julio 2015, 16:47 pm
Si el error es el primero, es porque allí no definiste username, es decir, nunca salio de la variable de sesión a una variable propia


Título: Re: Ayuda en inicio de sesión, ¿alguna respuesta?
Publicado por: uluigi en 13 Julio 2015, 00:06 am
Nada... que no hay manera, ¿podrías decirme exactamente qué línea y dónde ponerla? Es que estoy atascado en esto y me pongo nervioso, ¡un saludo!  :-[


Título: Re: Ayuda en inicio de sesión, ¿alguna respuesta?
Publicado por: engel lex en 13 Julio 2015, 00:35 am
En la línea 56 tienes $username, pero nunca la defines

por lo que veo, tienes el valor que quieres en la variable de sesión



Título: Re: Ayuda en inicio de sesión, ¿alguna respuesta?
Publicado por: Pablo Videla en 13 Julio 2015, 00:40 am
En la línea 56 tienes $username, pero nunca la defines

por lo que veo, tienes el valor que quieres en la variable de sesión



Exactamente, es lo mismo que iba a decir, xD
puedes reemplazar la linea 56 por $_SESSION['username']; o bien setearla con la variable de session

Código
  1. $username= $_SESSION['username'];
  2. <h2>Bienvenido <?php echo $username; ?></h2>
  3.  
y despues hacer el echo



Título: Re: Ayuda en inicio de sesión, ¿alguna respuesta?
Publicado por: uluigi en 13 Julio 2015, 01:27 am
Hijos de cristo, a veces me siento imbécil y me lo he pasado por alto, ya funciona bien, dejo el código por si alguien lo quiere usar.
Gracias por vuestra ayuda, chicos.
index.php
Código
  1. <?php
  2.  
  3. #Librería principal
  4. include_once('libraries.php');
  5.  
  6. #Conexión a la base de datos MySQLi
  7. yoursql_connect();
  8.  
  9. if(!isset($_SESSION['username']))
  10. {
  11. ?>
  12. <!DOCTYPE html><html>
  13. <head>
  14. <title>localhost / 127.0.0.1</title>
  15. <link rel="stylesheet" type="text/css" href="sheet/frame.css">
  16. </head><body id="yoursql">
  17. <div class="logo"></div>
  18. <div id="language" class="window">
  19. <label>Idioma de yourSQL:</label>
  20. <select id="language">
  21. <option value="es_ES">Español (España)</option>
  22. <option value="en_UK" disabled>Inglés</option>
  23. <option value="pt_BR" disabled>Portugués (Brasil)</option>
  24. </select>
  25. </div>
  26. <div id="login" class="window">
  27. <form method="post" action="system/path/login.php">
  28. <table id="table-login">
  29. <tr>
  30. <td><label for="username">Nombre de usuario:</label></td>
  31. <td><input type="text" autocomplete="off" id="username" name="username" class="i_"></td>
  32. </tr>
  33. <tr>
  34. <td><label for="passwd">Contraseña:</label></td>
  35. <td><input type="password" id="passwd" name="passwd" class="i_"></td>
  36. <tr>
  37. <td></td>
  38. </tr>
  39. </tr>
  40. <tr>
  41. <td id="rn"><a href="system/path/r.php"><input type="button" name="register" class="b_" value="Añadir cuenta"></a></td>
  42. <td id="r"><input type="submit" name="submit_login" class="b_" value="Acceder"></td>
  43. </tr>
  44. </table>
  45. </form>
  46. </div>
  47. <?php
  48. include_once('system/inc/footer.php');
  49. ?>
  50. </body></html>
  51. <?php
  52. exit();
  53. }
  54. else {
  55.  
  56. $Username = $_SESSION['username'];
  57. ?>
  58. <h2>Bienvenido <?php echo $Username; ?></h2>
  59. <a href="destroy.php">cerrar sesión</a>
  60. <?php } ?>
  61.  
login.php
Código
  1. <?php
  2. #Librería principal
  3. include_once('../../libraries.php');
  4.  
  5. #Conexión a la base de datos MySQLi
  6. yoursql_connect();
  7.  
  8. #Capturar datos del formulario y almacenarlo en variables
  9. $Username = $_POST['username']; #Definido en el formulario 'name="username"'
  10. $Passwd = $_POST['passwd']; #Definido en el formulario 'name="passwd"'
  11.  
  12. #Consulta de MySQL donde indica seleccionar de la tabla 'users' la fila
  13. #llamada 'username' que contenga el valor de la variable '$Username'
  14. $result = mysql_query("SELECT * FROM users WHERE username = '$Username'");
  15.  
  16. #Validar si el valor de la variable '$Username' de la fila 'username' existe
  17. #en la base de datos 'yoursql'
  18. if($row = mysql_fetch_array($result))
  19. {
  20. #Si '$Username' es correcto, validar el valor de la variable '$Passwd'
  21. if($row['passwd'] == $Passwd) #'Passwd' definido por el nombre de la fila 'passwd'
  22. {
  23. #Crear sesión
  24.  
  25. #Almacenar valor de '$Username' en una variable de sesión pre-llamada 'username'
  26. $_SESSION['username'] = $Username;
  27. header('Location: ../../index.php');
  28. }
  29. else if($row['username'] != $Passwd)
  30. {
  31. #Si la contraseña es incorrecta hacer esto
  32. header('Location: ../../index.php');
  33. }
  34.  
  35.  
  36. }
  37. #Si la contraseña es incorrecta hacer lo siguiente
  38. else if($row['passwd'] != $Passwd)
  39. {
  40. echo "contraseña incorrecta.";
  41. sleep(1);
  42. header('Location: ../../index.php');
  43. }
  44.  
  45. #Si el nombre de usuario es incorrecto hacer lo siguiente
  46. else
  47. {
  48. echo "nombre incorrecto.";
  49. sleep(1);
  50. header('Location: ../../index.php');
  51. }
  52.  
  53.  
  54.  
  55.  
  56. #Liberar memoria empleada al realizar la consulta '$result'
  57. #Cerrar conexión con la base de datos
  58. ?>
  59.  


Título: Re: Ayuda en inicio de sesión, ¿alguna respuesta?
Publicado por: Pablo Videla en 13 Julio 2015, 01:59 am
A todos se nos pasa algo, es normal, a medida que vayas cometiendo errores vas aprendiendo a identificarlos, saludos.