[Resuelto] Ayuda en inicio de sesión, ¿alguna respuesta?

Iniciado por uluigi, 12 Julio 2015, 11:38 AM

0 Miembros y 1 Visitante están viendo este tema.

uluigi

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!

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

uluigi

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!  :-[

engel lex

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

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Pablo Videla

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


uluigi

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();
?>


Pablo Videla

A todos se nos pasa algo, es normal, a medida que vayas cometiendo errores vas aprendiendo a identificarlos, saludos.