Comunidad PHPeros

Lenguajes => PHP => Mensaje iniciado por: Zeuser en 17 de Octubre de 2006, 17:41:40 pm

Título: Logueo
Publicado por: Zeuser en 17 de Octubre de 2006, 17:41:40 pm
Buenas. Cuando cerró phperos, dejé el php, y ahora que ha abierto lo he retomado de nuevom, y me ha surgido el mismo problema que la última vez.

He creado un sistema de logueo simple, pero no me funciona. Aquí van los codigos.


logueo.php
<form method="POST" action="login.php">
  <input type="text" name="usuario" value="Nombre de Usuario"><br>
<input type="password" name="pass" value="******"><br><br>
<input type="submit" name="enviar" value="Entrar al panel">
</form>


login.php

<?php
if (isset($_POST[usuario]) && isset($_POST[pass]) && $_POST[enviar]) {

/* Das los valores que tu quieras */
$admin = "zeuser";
$contrasena = "test";

if ($_POST[usuario] == $admin && $_POST[pass] == $contrasena) {
header("Location: http://graficalforum.gratishost.com/index.html");
exit;
} else {
echo "Error: Nombre de usuario y/o contraseña incorrectos";
}

}
?>  

Si pongo contraseña incorrecta me funciona bine, es decir me sale: nombre de usuario y/o contraseña incorrectos.
Pero si pongo los datos correctos no me funciona, me sale un error en la linea 17, por lo tanto , aquí:

header("Location: http://graficalforum.gratishost.com/index.html");  

el error exacto es: Warning: Cannot modify header information - headers already sent by (output started at /home/virtual/sitio107740/www/login.php:9) in /home/virtual/sitio107740/www/login.php on line 17

Porfavor decidme como solucionarlo, ya que lo necesito.
Salu2 :D
Título: Re: Logueo
Publicado por: naveda en 17 de Octubre de 2006, 18:51:17 pm
Citar
Cannot modify header information - headers already sent

Esto significa que ya han sido enviadas CABECERAS y que no puedes modificarlas, la funcion header() modifica las cabeceras...

Solución: Usa una redireccion javascript, no hagas una redireccion simplemente un include del panel...
Título: Re: Logueo
Publicado por: Zeuser en 17 de Octubre de 2006, 18:58:13 pm
No domino nada el javascript, si puede ser modifica mi script para ke funcione incluyendo lo que tu dices.
Salu2 :D
Título: Re: Logueo
Publicado por: naveda en 17 de Octubre de 2006, 19:02:05 pm
logueo.php
Código: [Seleccionar]
<form method="POST" action="login.php">
  <input type="text" name="usuario" value="Nombre de Usuario"><br>
<input type="password" name="pass" value="******"><br><br>
<input type="submit" name="enviar" value="Entrar al panel">
</form>


login.php
<?php
if (isset($_POST[usuario]) && isset($_POST[pass]) && $_POST[enviar]) {

if ($_POST[usuario] == "zeuser" && $_POST[pass] == "test") {
include("./index.html"); //Esto incluirá la pagina que se veria al redireccionar..
} else {
echo "Error: Nombre de usuario y/o contraseña incorrectos";
exit; //El exit mejor cuando falla el login ;)
}

}
?>

Ahora funciona porque las cabecerás no se modifican, cabeceras podriamos decir que se modifican en el momento en que se escribe algo en la pantalla o se crea una nueva variable, que es lo que hacias al poner $admin = "zeuser";

Ahora te funciona correctamente ;) ¿Alguien no entiende por qué? Que pregunte ;)

Un Saludo.
Título: Re: Logueo
Publicado por: Zeuser en 17 de Octubre de 2006, 19:08:11 pm
Pues me sigue sin funcionar. me da error en la linea 13:
header("Location: http://graficalforum.gratishost.com/index.html");

No sirve de nada el cambio? :S pq no funciona?
Puede tener a ver, que este alojda en gratishost?


Salu2 :D

NaVeDa...: SOLUCIONADO
Título: Re: Logueo
Publicado por: Raken en 17 de Octubre de 2006, 20:27:54 pm
Quisiera añadir que para escribir variables no numéricas, escribas comillas "  "  (o simples ' ' )

Textual:

Código: [Seleccionar]
$_POST['variable'];
Numérica:

Código: [Seleccionar]
$_POST[variable];
Alfanumérica:

Código: [Seleccionar]
$_POST['variable'];

Lo mismo a la hora de definir variables:

$variable = "hola";
$variable = 1;

Título: Re: Logueo
Publicado por: CarlosRdrz en 17 de Octubre de 2006, 21:54:48 pm
Si mal no recuerdo, el problema era tu host, que no te dejaba usar la opcion "header".
Ademas, cuando uses header location, no indiques toda la ruta, solo el archivo en si:
header("Location: index.html");

Saludos!!
Título: Re: Logueo
Publicado por: naveda en 17 de Octubre de 2006, 22:17:56 pm
Segun yo se es igual la matriz:
$array['0'] = 0;
que la matriz
$array[0] = 0;

Aunque no estoy seguro me has puesto en duda xD.
Título: Re: Logueo
Publicado por: CarlosRdrz en 17 de Octubre de 2006, 22:28:42 pm
Es exactamente lo mismo, y funcionara igual si pones
$array[0] o $array['0']

Eso solo es un consejo que nos da nuestro amigo Raken para evitar posibles fallos :P
Salu2!
Título: Re: Logueo
Publicado por: Pc-Admin en 17 de Octubre de 2006, 22:31:44 pm
Yo te ago un logueo mas wapo:

Enpezamos con la tabla de la base de datos:

CREATE TABLE `admin` (
`id` INT(5) NOT NULL AUTO_INCREMENT,
`user` VARCHAR(255) NOT NULL,
`pass` VARCHAR(255) NOT NULL,
`mail` TEXT NOT NULL,
`fecha` VARCHAR(255) NOT NULL,
`ip` VARCHAR(255) NOT NULL,
   )

Seguimos con el logueo:

<?PHP
// incluimos el conectar
include('conectar.php');

if($_POST['entrar']) {

// Comprovamos user i pass en md5 (la pass)
$user = $_POST[user];
$pass = md5($_POST[pass]);
 
//comprovamos los datos
$con = mysql_query("SELECT * FROM admin where user='$user'");
$row = mysql_fetch_assoc($con);

//si la pass es correcta creamos cookie y llevamos al panel
if($pass == $row['pass']) {
setcookie(id,$row[id],time()+650000);
        setcookie(user,$user,time()+650000);
        setcookie(pass,$pass,time()+650000);
header("Location: admin/panel.php");
} else {
echo "Nick o pass incorrectos.";
}
}
?>
<center>
<form action="" method="POST">
<b>Usuario:</b><br>
<input type="text" name="user"><br>
<b>Contraseña:</b><br>
<input type="password" name="pass"><br><br>
<input type="submit" value="Entrar" name="entrar">
</form>
</center>

Bueno, e aqui un gran logueo sacando los datos del mysql :):)
Título: Re: Logueo
Publicado por: naveda en 17 de Octubre de 2006, 22:33:58 pm
Re***** que no estamos aquí para dar codigos sino para enseñar... y explicar todo lo que se dice con una claridad CRISTALINA hasta que se entiende..
Título: Re: Logueo
Publicado por: Zeuser en 17 de Octubre de 2006, 23:20:53 pm
Gracias PC-Admin por tu logueo, pero quiero aprender a hacerlos desde 0, ya que no se nada de sql y prefiero ir poco a poco con un logueo mas sencillo.

Seguidamente pongo como tengo el código actual:
<?php
if (isset($_POST["usuario"]) && isset($_POST["pass"]) && $_POST["enviar"]) {

if ($_POST["usuario"] == "zeuser" && $_POST["pass"] == "test") {
header("Location: /index.html");
} else {
echo "Error: Nombre de usuario y/o contraseña incorrectos";
exit; //El exit mejor cuando falla el login ;)
}

}
?>

Que es lo que me falla? No lo entiendo :S

He modificado lo que me haveis dicho, comillas, el header,el exit, y no da resultado.

Solo quiero conseguir que si los datos son correctos se redireccione a otra web. Intentad encontrarme el error, pero muchas gracias por lo que haveis echo aasta ahora.


Título: Re: Logueo
Publicado por: Raken en 17 de Octubre de 2006, 23:57:58 pm
header("Location: index.html");

o bien...

header("Location: carpeta/index.html");

 ;)

Veo que has puesto bien las comillas. Bien hecho. En respuesta a Naveda y TLX hablaba de las comillas en el momento de asignar y llamar variables. Efectivamente, da lo mismo llamar una matriz (array) como [ 0 ] que como [" 0 "]. No obstante, si lo ponemos sin comillas es un campo numérico ordinal, y si lo ponemos con ellas es un string "0".

Esto sirve para evitar conflictos, especialmente en códigos más complejos y en versiones más antiguas de PHP. Pero vamos, que no cuesta nada hacer las cosas bien  ;)
Título: Re: Logueo
Publicado por: Zeuser en 18 de Octubre de 2006, 14:40:25 pm
Nada, sigue sin funcionar. Vamos a ver :S
Vosotros, como haceis un logueo ( sin mysql ni bd ni nah) que poniendo la contraseña correcta i el nick, se redireccione a otra web , otro link....

Solamente es esto, y la funcion header no me funciona, siempre me da error en:
header("Location: index.html");

Como haríais vosotros el script para que funcionara? Vuelvo a repetir, solo quiero que al poner los datos correctos, se redireccione al index.html
nada mas. Salu2 :D
Título: Re: Logueo
Publicado por: naveda en 18 de Octubre de 2006, 14:43:06 pm
Pues yo simplemente, como veo que por alguna razon no te funciona la funcion header(); (Que puede ser por el servidor..), pues haría la redireccion con javascript

En la linea donde esta header(..); cambiala por:
Código: [Seleccionar]
echo '<script>window.location = "index.html";</script>';
Creo que ese es el codigo javascript que redirecciona ;)
Título: Re: Logueo
Publicado por: Zeuser en 18 de Octubre de 2006, 15:15:19 pm
Vale, muchas gracias naveda. Ya me funciona a la perfección ;)

Salu2 :D
Título: Re: Logueo
Publicado por: Raken en 18 de Octubre de 2006, 15:42:57 pm
Citar
Vosotros, como haceis un logueo ( sin mysql ni bd ni nah) que poniendo la contraseña correcta i el nick, se redireccione a otra web , otro link....

En vez de redireccionar, yo lo mostraría tras confirmar los datos de LOGIN:

<?php
if (isset($_POST["usuario"]) && isset($_POST["pass"]) && $_POST["enviar"]) {

if ($_POST["usuario"] == "zeuser" && $_POST["pass"] == "test") {

//==========================================================
// Aquí tú redireccionas, yo lo que haría sería poner directamente los contenidos
//==========================================================


} else {
echo "Error: Nombre de usuario y/o contraseña incorrectos";
exit; //El exit mejor cuando falla el login ;)
}

}


De esta forma, por ejemplo, evitas que un usuario entre directamente en index.htm sin pasar por la página de login, entre otras cosas.

Si en estos contenidos hubiesen distintas secciones y hubiese que cargar la página de nuevo, se olvidaría de los campos $_POST, por lo que podrías guardarlos en una cookie.

setcookie ("usuario", $_POST['usuario']);
setcookie ("pass", $_POST['pass']);

O podrías hacer uso de las sesiones.

www.php.net/session


salu2 ;)
Título: Re: Logueo
Publicado por: Pc-Admin en 18 de Octubre de 2006, 18:08:34 pm
Pido disculpas si e molestado, pero almenos cuando ayais avanzado recurrireis a ese code :):)
Título: Re: Logueo
Publicado por: Zeuser en 19 de Octubre de 2006, 21:51:07 pm
<?php
if (isset($_POST["usuario"]) && isset($_POST["pass"]) && $_POST["enviar"]) {

if ($_POST["usuario"] == "zeuser" && $_POST["pass"] == "test") {

echo '<script>window.location = "index.html";</script>';
} else {
echo "Error: Nombre de usuario y/o contraseña incorrectos";
exit; //El exit mejor cuando falla el login ;)
}

}
?>
Bien, este es el codigo que tengo actualmente y me funciona a la perfeccion. Pero tengo una duda y no se por donde empezar. Como hago para que no se pueda ir directamente al index.html? Osea que se tenga que pasar por el logueo, y no se pueda acceder sin poner los datos.

Tengo que poner un index.php no? Y en este index.php crear un script para esta funcion, pero nose por donde empezar.

Salu2 :D
Título: Re: Logueo
Publicado por: CarlosRdrz en 20 de Octubre de 2006, 16:14:56 pm
Hola,

Crea esta session antes de redirigir el usuario a "index.php"

$_SESSION[user] = $_POST[usuario];

Y añade esto al principio del codigo:
session_start();
El resto ya te lo imaginaras....
En el index.php pones if($_SESSION[user]) {
....

Salu2!!
Título: Re: Logueo
Publicado por: Zeuser en 20 de Octubre de 2006, 19:30:39 pm
Los dos codigos que me has dado los pongo en el login.php o al index .php?


Salu2 :D
Título: Re: Logueo
Publicado por: CarlosRdrz en 22 de Octubre de 2006, 18:35:43 pm
Al principio de login.php
Añade esto:
session_start();
Y debajo de:
if ($_POST["usuario"] == "zeuser" && $_POST["pass"] == "test") {
Añade esto:
$_SESSION[user] = $_POST[usuario];


Luego en el index.php tendrias que poner:
if($_SESSION[user]) {
/* CODIGO QUE SE EJECUTARIA SI ESTA LOGUEADO */
} else {
/* CODIGO QUE SE EJECUTARIA SI NO ESTA LOGUEADO */
}

Salu2!
Título: Re: Logueo
Publicado por: Zeuser en 23 de Octubre de 2006, 13:50:43 pm
Cuando añado al principio del login.php :

session_start();

Me da el siguiente error: Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/virtual/sitio107740/www/login.php:9) in /home/virtual/sitio107740/www/login.php on line 10

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/virtual/sitio107740/www/login.php:9) in /home/virtual/sitio107740/www/login.php on line 10

 
 a que es devido?


Por otro lado, sino añado el session_start()
Me funciona bien el loguin , pero al abrirse el index.php me muestra siempre el mensaje de else, en este caso es:

No tinees acceso a esta pagina, pero ademas de mostrarme esto, me muestra todo el index.php cosa que no quiero.

<?
if($_SESSION[user]) {
echo "Index";
} else {
echo "No tienes acceso a esta página";
}
?>

Siempre me sale el else, pese a poner los datos, el else me meustra lña web, cosa que no quiero, y como hago que al poner echo "Index", se vea el  index.php ( una vez solucionado el echo que solo lee el else)

Salu2 :D
Título: Re: Logueo
Publicado por: CarlosRdrz en 23 de Octubre de 2006, 17:23:22 pm
Eso es devido a que no inicia la session, por ese modo ni la crea ni nada, pero no devuelve errores porque el codigo en si no esta mal.

El error que te da es devido a que antes del codigo session_start(); has añadido ya sea un include, una variable o un echo. Son las causas mas comunes

Salu2!!
Título: Re: Logueo
Publicado por: Zeuser en 23 de Octubre de 2006, 17:52:19 pm
No hay nada delante del session_start();

Aqui va el codigo:

<?
session_start();

if (isset($_POST["usuario"]) && isset($_POST["pass"]) && $_POST["enviar"]) {

if ($_POST["usuario"] == "zeuser" && $_POST["pass"] == "test") {

$_SESSION[user] = $_POST["usuario"] ;

echo '<script>window.location = "index.php";</script>';
} else {
echo "Error: Nombre de usuario y/o contraseña incorrectos";
exit; //El exit mejor cuando falla el login ;)
}

}
?>
Y el index.php:

<?
if($_SESSION[user]) {
echo "Panel de Admin";
} else {
echo "No tienes acceso a esta página";
}
?>

Como hago porque si voy directo al index.php me diga: no tienes acceso a esta pagina ( y la pagina no se muestre).
Y si me logueo y pongo los datos correctos ponga: panel de admin, y ademas se muestre la pagina.


Salu2 :D
Título: Re: Logueo
Publicado por: naveda en 23 de Octubre de 2006, 20:13:05 pm
Pues segun veo tal y como esta puesto debería funcionar ;)
Título: Re: Logueo
Publicado por: Raken en 23 de Octubre de 2006, 20:16:58 pm
Y no será que el archivo que contiene éste código...

<?
session_start();

if (isset($_POST["usuario"]) && isset($_POST["pass"]) && $_POST["enviar"]) {

if ($_POST["usuario"] == "zeuser" && $_POST["pass"] == "test") {

$_SESSION[user] = $_POST["usuario"] ;

echo '<script>window.location = "index.php";</script>';
} else {
echo "Error: Nombre de usuario y/o contraseña incorrectos";
exit; //El exit mejor cuando falla el login ;)
}

}
?>


...es el que estás incluyendo en la otra página?

Título: Re: Logueo
Publicado por: Zeuser en 24 de Octubre de 2006, 23:43:53 pm
Lo estoy poniendo bien, o almenos digo yo:

<?
session_start();

if (isset($_POST["usuario"]) && isset($_POST["pass"]) && $_POST["enviar"]) {

if ($_POST["usuario"] == "zeuser" && $_POST["pass"] == "test") {

$_SESSION[user] = $_POST["usuario"] ;

echo '<script>window.location = "index.php";</script>';
} else {
echo "Error: Nombre de usuario y/o contraseña incorrectos";
exit; //El exit mejor cuando falla el login ;)
}

}
?>

Y el index.php:

<?
if($_SESSION[user]) {
echo "Panel de Admin";
} else {
echo "No tienes acceso a esta página";
}
?>
 Seguro ;)

Pero una cosa Naveda, puede  que lo veas correcto, ya que el script no da error, pero no consigo lo que quiero.
Con este codigo consigo que si pongo los datos correctos me vaya al index, se muestre, pero con el mensaje : No tienes acceso a esta página
Si no pongo los datos correctas, perfecto:Nombre de usuario y/o contraseña incorrectos

Si voy directo al index.php en lugar de no mostrarse el index, este se muestra y ademas se me ve el mensaje: No tienes acceso a esta pagina ( cosa correcta, pero el index no deveria mostrarse)

Lo que tengo que conseguir:

Si pongo los datos correctos, que se muestre el index y la frase Panel de Admin.

Si voy directo al index.php, que NO se muestre el index.php y la frase: NO tienes acceso a esta pagina.

Salu2 :D
Título: Re: Logueo
Publicado por: Raken en 25 de Octubre de 2006, 00:09:49 am
exit ("No tienes acceso a esta página");
Título: Re: Logueo
Publicado por: Zeuser en 25 de Octubre de 2006, 15:49:47 pm
He usado lo tuyo raken y ya hemos avanzado.
Ahora si voy directo al index.php no se muestra la web, pero si pongo los datos correctos en el login tampoco.
Osea, no lee que he incluido los datos en el logueo.php
Porque?

Y otra cosa, no inclutyo el session start(); que sino me da error sin motivo aparente :S
Hace falta añadirlo? Porque me da error :S


Si pongo los datos correctos y no me muestra el index.php no sera a causa que dentro del index.php no hay esa session, sino que esa esta en otro archivo? ( en este caso el login.php)
Título: Re: Logueo
Publicado por: naveda en 25 de Octubre de 2006, 20:19:08 pm
Todos los errores que recibas envialos, no digas ke te da error, muestranoslos ;)
Título: Re: Logueo
Publicado por: Zeuser en 25 de Octubre de 2006, 20:24:34 pm
Mientras no ponga el session_start() no me da ningun error, pero cmo he dicho anteriormente no termina de funcionar como quiero ( lee el anterior mensaje)

Y por lo contrario, si pongo el session_strart() el error es el sigueinte:

Si pongo los datos del logueo incorrectos:

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/virtual/sitio107740/www/login.php:9) in /home/virtual/sitio107740/www/login.php on line 11

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/virtual/sitio107740/www/login.php:9) in /home/virtual/sitio107740/www/login.php on line 11
Error: Nombre de usuario y/o contraseña incorrectos


Si pongo los datos del logueo correctos:

un error parecido al anteerior ke no puedo leer ya que me redirecciona muy rapidamente a index.php , pero iwalmente no muestra el index y me sale: no tiene acceso a la pagina, es decir lo contrario de lo quee quiero, que tendria que ser: se mostrara el index , y pusiera Bienvenido al Panel.
Título: Re: Logueo
Publicado por: naveda en 25 de Octubre de 2006, 20:29:28 pm
Bien sucede lo mismo que cuando usabas la funcion header(); no funciona porque antes de todo el codigo que estas ejecutando ya has mostrado algo en pantalla, ya sea un simple espacio o caracter el fallo seguirá presente.

Para que no siga sucediendo quita todo lo que haya antes de session_start() a parte de la etiqueta de php...
Título: Re: Logueo
Publicado por: Zeuser en 25 de Octubre de 2006, 20:31:49 pm
No hay nada delante de el session_start aparte de:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>


Pero esto se tiene que conservar nO?

Salu2 :D
Título: Re: Logueo
Publicado por: CarlosRdrz en 25 de Octubre de 2006, 20:55:34 pm
Todo eso es porqueria, quitalo todo.
Saludos :P
Título: Re: Logueo
Publicado por: callosino en 25 de Octubre de 2006, 20:58:12 pm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Que sepa yo todo esto no vale para nada
Título: Re: Logueo
Publicado por: Zeuser en 25 de Octubre de 2006, 21:20:12 pm
<?php session_start();

if (isset($_POST["usuario"]) && isset($_POST["pass"]) && $_POST["enviar"]) {

if ($_POST["usuario"] == "zeuser" && $_POST["pass"] == "test") {

$_SESSION[user] = $_POST["usuario"] && $_POST["pass"];

echo '<script>window.location = "index.php";</script>';
} else {
echo "Error: Nombre de usuario y/o contraseña incorrectos";
exit; //El exit mejor cuando falla el login ;)
}

}
?>

Lo he borrado todo, el archivo solo tiene este, y me da error de todas maneras :S
Título: Re: Logueo
Publicado por: naveda en 25 de Octubre de 2006, 21:36:08 pm
Ponnos aqui la totalidad de tu codigo, es decir todo el cotenido PHP ;). Para que podamos ayudarte en la totalidad del codigo y podamos explicarte el fallo ;)
Título: Re: Logueo
Publicado por: Zeuser en 25 de Octubre de 2006, 21:57:42 pm
Pero si ya lo he puesto en anteriores mensajes:

Logueo.php

<body><form method="POST" action="login.php">
  <input type="text" name="usuario" value="Nombre de Usuario"><br>
<input type="password" name="pass" value="******"><br><br>
<input type="submit" name="enviar" value="Entrar al panel">
</form>
</body>

Login.php

<?php session_start();

if (isset($_POST["usuario"]) && isset($_POST["pass"]) && $_POST["enviar"]) {

if ($_POST["usuario"] == "zeuser" && $_POST["pass"] == "test") {

$_SESSION[user] = $_POST["usuario"] && $_POST["pass"];

echo '<script>window.location = "index.php";</script>';
} else {
echo "Error: Nombre de usuario y/o contraseña incorrectos";
exit; //El exit mejor cuando falla el login ;)
}

}
?>

index.php

<?


if ($_SESSION[user]) {

echo "Panel de Admin";
} else {
exit ("No tienes acceso a esta página");
}
?>


Y como e dicho ya muchas veces, quier conseguir que si voy directo al index.php no se muestre la pagina y diga no tienes acceso a esta pagina (ESTO YA FUNCIONA)

Y si pongo los datos correctos en el logueo.php se muestre el index.php y ponga: panel de admin (ESTO NO FUNCIIONA, ya que me sale lo mismo que si voy directo al index.php)

Salu2 :D