Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => 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:
index.php
Código (php) [Seleccionar]

<?php
session_start();

#Librería principal
include_once('libraries.php');

#Conexión a la base de datos MySQLi
yoursql_connect();

#Si no se ha hecho la sesión nos devolverá al formulario de 'login'
if(!isset($_SESSION['username'])) {
?>

<!DOCTYPE html><html>
<head>
<title>localhost / 127.0.0.1</title>
<link rel="stylesheet" type="text/css" href="sheet/frame.css">
</head><body id="yoursql">
<div class="logo"></div>
<div id="language" class="window">
<label>Idioma de yourSQL:</label>
<select id="language">
<option value="es_ES">Español (España)</option>
<option value="en_UK" disabled>Inglés</option>
<option value="pt_BR" disabled>Portugués (Brasil)</option>
</select>
</div>
<div id="login" class="window">
<form method="post" action="system/path/login.php">
<table id="table-login">
<tr>
<td><label for="username">Nombre de usuario:</label></td>
<td><input type="text" autocomplete="off" id="username" name="username" class="i_"></td>
</tr>
<tr>
<td><label for="passwd">Contraseña:</label></td>
<td><input type="password" id="passwd" name="passwd" class="i_"></td>
<tr>
<td></td>
</tr>
</tr>
<tr>
<td id="rn"><a href="system/path/r.php"><input type="button" name="register" class="b_" value="Añadir cuenta"></a></td>
<td id="r"><input type="submit" name="enter" class="b_" value="Acceder"></td>
</tr>
</table>
</form>
</div>
<?php
include_once(
'system/inc/footer.php');
?>

</body></html>
<?php
exit();
} else {
?>

<h2>Bienvenido <?php echo $username?></h2>
<a href="destroy.php">cerrar sesión</a>
<?php ?>

login.php
Código (php) [Seleccionar]

<?php
#Librería principal
include_once('../../libraries.php');

#Conexión a la base de datos MySQLi
yoursql_connect();

#Si los campos 'username' y 'passwd' están vacíos hacer esto
#


if(isset($_POST['enter']))
{
#Capturar datos del formulario y almacenarlo en variables
$username htmlspecialchars($_POST['username']);
$passwd md5($_POST['passwd']);

#Consulta de MySQL donde indica seleccionar de la tabla 'users' el campo que tenga de
#nombre 'username' y el campo 'passwd'
$query mysql_query("SELECT * FROM users WHERE username = '$username' AND passwd = '$passwd'");

#Validar si el 'username' y 'passwd' existen en la base de datos o no
if($row mysql_fetch_array($query))
{
#Si 'username' y 'passwd' es correcto, entonces validar sesión
if($row['username'] == $username && $row['passwd'] == $passwd)
{
#Crear sesión
session_start();

#Almacenar 'username' en una variable de sesión
$_SESSION['username'] = $username;
header('Location: ../../index.php');
}
else if($row['username'] != $username && $row['passwd'] != $passwd)
{
#Si la contraseña es incorrecta hacer esto
header("Location: ../../index.php");
}


#Liberar memoria empleada al realizar la consulta '$query'
mysql_free_result($query);
#Cerrar conexión con la base de datos
mysql_close();
}
}
?>


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
Cita de: 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



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 (php) [Seleccionar]
$username= $_SESSION['username'];
<h2>Bienvenido <?php echo $username?></h2>

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 (php) [Seleccionar]

<?php
session_start();

#Librería principal
include_once('libraries.php');

#Conexión a la base de datos MySQLi
yoursql_connect();

if(!isset($_SESSION['username']))
{
?>

<!DOCTYPE html><html>
<head>
<title>localhost / 127.0.0.1</title>
<link rel="stylesheet" type="text/css" href="sheet/frame.css">
</head><body id="yoursql">
<div class="logo"></div>
<div id="language" class="window">
<label>Idioma de yourSQL:</label>
<select id="language">
<option value="es_ES">Español (España)</option>
<option value="en_UK" disabled>Inglés</option>
<option value="pt_BR" disabled>Portugués (Brasil)</option>
</select>
</div>
<div id="login" class="window">
<form method="post" action="system/path/login.php">
<table id="table-login">
<tr>
<td><label for="username">Nombre de usuario:</label></td>
<td><input type="text" autocomplete="off" id="username" name="username" class="i_"></td>
</tr>
<tr>
<td><label for="passwd">Contraseña:</label></td>
<td><input type="password" id="passwd" name="passwd" class="i_"></td>
<tr>
<td></td>
</tr>
</tr>
<tr>
<td id="rn"><a href="system/path/r.php"><input type="button" name="register" class="b_" value="Añadir cuenta"></a></td>
<td id="r"><input type="submit" name="submit_login" class="b_" value="Acceder"></td>
</tr>
</table>
</form>
</div>
<?php
include_once(
'system/inc/footer.php');
?>

</body></html>
<?php
exit();
}
else {

$Username $_SESSION['username'];
?>

<h2>Bienvenido <?php echo $Username?></h2>
<a href="destroy.php">cerrar sesión</a>
<?php ?>

login.php
Código (php) [Seleccionar]

<?php
#Librería principal
include_once('../../libraries.php');

#Conexión a la base de datos MySQLi
yoursql_connect();

#Capturar datos del formulario y almacenarlo en variables
$Username $_POST['username']; #Definido en el formulario 'name="username"'
$Passwd $_POST['passwd']; #Definido en el formulario 'name="passwd"'

#Consulta de MySQL donde indica seleccionar de la tabla 'users' la fila
#llamada 'username' que contenga el valor de la variable '$Username'
$result mysql_query("SELECT * FROM users WHERE username = '$Username'");

#Validar si el valor de la variable '$Username' de la fila 'username' existe
#en la base de datos 'yoursql'
if($row mysql_fetch_array($result))
{
#Si '$Username' es correcto, validar el valor de la variable '$Passwd'
if($row['passwd'] == $Passwd#'Passwd' definido por el nombre de la fila 'passwd'
{
#Crear sesión
session_start();

#Almacenar valor de '$Username' en una variable de sesión pre-llamada 'username'
$_SESSION['username'] = $Username;
header('Location: ../../index.php');
}
else if($row['username'] != $Passwd)
{
#Si la contraseña es incorrecta hacer esto
header('Location: ../../index.php');
}


}
#Si la contraseña es incorrecta hacer lo siguiente
else if($row['passwd'] != $Passwd)
{
echo "contraseña incorrecta.";
sleep(1);
header('Location: ../../index.php');
}

#Si el nombre de usuario es incorrecto hacer lo siguiente
else
{
echo "nombre incorrecto.";
sleep(1);
header('Location: ../../index.php');
}




#Liberar memoria empleada al realizar la consulta '$result'
mysql_free_result($result);
#Cerrar conexión con la base de datos
mysql_close();
?>

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.