Foros del Web » Programando para Internet » PHP »

sistema de usuarios y "header ("")

Estas en el tema de sistema de usuarios y "header ("") en el foro de PHP en Foros del Web. hola. He instalado un sistema de ususarios en mi web y estoy encantado de el. Pero tengo un serio problema. esto va en niveles, el ...
  #1 (permalink)  
Antiguo 16/08/2003, 03:07
BLACK RIVER
Invitado
 
Mensajes: n/a
Puntos:
sistema de usuarios y "header ("")

hola.

He instalado un sistema de ususarios en mi web y estoy encantado de el. Pero tengo un serio problema.

esto va en niveles, el 1 es el admin. yo tengo el 1 y puedo entrar en la página privada. el problema es que si no estás logeado tambmién puedes entrar porque da error en la línea "9" que es donde se situa el header()

este es el código:
Código PHP:
<?
include('config.php'); //incluimos el config.php que contiene los datos de la conexión a la db y la sesión

if($_SESSION[level] == 1)
{
echo 
'Tienes level 1 y puedes ver esta página';

}else{
Header("Location: index.php"); 
}

?>
qué le veis mal al header? será porque no tiene un espacio entre la "r" y el "(" ???

Me he estado fijando en otros códigos y todos son iguales, osea que debe de estar bien. tengo otra pregunta. es lo mismo...
header ("index.php") y <meta http-equiv="refresh" content="2;URL=index.php">
???

me fastidia mucho esto. por favor ayudarme

Última edición por BLACK RIVER; 16/08/2003 a las 03:38
  #2 (permalink)  
Antiguo 16/08/2003, 03:51
Avatar de ||Dj||  
Fecha de Ingreso: enero-2002
Mensajes: 2.349
Antigüedad: 15 años, 11 meses
Puntos: 1
Por que no empiezas por pastear el msg de error?
  #3 (permalink)  
Antiguo 16/08/2003, 04:13
BLACK RIVER
Invitado
 
Mensajes: n/a
Puntos:
buena idea. voy a dar muxos datos y errores que me suele dar:

config.php
Código PHP:
<?
$dbhost
="pub-db.m2kcore.com"//Host del mysql
$dbuser="cmblackriver"//Usuario del mysql
$dbpass="****"//Password del mysql
$db="cmblackriver"//db donde se creará la tabla users

//conectamos y seleccionamos db
mysql_connect("$dbhost","$dbuser","$dbpass");
mysql_select_db("$db"); 

//Comenzamos la sesión, esto se explica despues en el Sistema de Login
session_start(); 
?>
logout.php
Código PHP:
<?
include('config.php'); //incluimos el config.php que contiene los datos de la conexión a la db y la sesión

session_destroy(); //destruimos la sesion
Header("login.php"); //volvemos al login.php
?>
error:
Warning: Cannot add header information - headers already sent by (output started at /home/cmblackriver/htdocs/config.php:13) in /home/cmblackriver/htdocs/logout.php on line 5




login.php
Código PHP:
<?
include('config.php'); //incluimos el config.php que contiene los datos de la conexión a la db

if(!isset($_SESSION[usuario]) ) //comprobamos que no existe la session, es decir, que no se ha logeado, y mostramos el form
{

//Creamos el form k irá a autentificar.php para comprobar los datos con la tabla users
echo '<form action="http://www.cmblackriver.metropoliglobal.com/autentificar.php" method="POST">
Nick: <input type="text" name="nick" size="30" class="texto"><br>
Password: <input type="password" name="pass" size="30" class="texto"><br>
<input type="submit" name="submit" value="Enviar" class="boton"></form>'
;

}else{

//SI se ha logeado, mostramos el nick y la opción de deslogearse
//Este sería el menú que saldría a la gente que esta logeada, se puede modificar y añadir cosas
echo 'Bienvenido '.$_SESSION[usuario]; //ej Bienvenido Juan
echo '<br>Tu nivel es '.$_SESSION[level]; //mostramos el level del user
if($_SESSION[level] == 1
{
//mostramos el link para ir a la pagina privada porque el user tiene level 1 (*Nota: el level por defecto es 2, por lo tanto no se le mostrará)
//*Nota2: para cambiar el level a 1, se tiene k hacer manualmente por phpmyadmin
echo '<br><a href=http://www.cmblackriver.metropoliglobal.com/pagprivi.php>Página Admin</a>'
}

echo 
'<br><a href="http://www.cmblackriver.metropoliglobal.com/perfil.php">Tu perfil</a>';
echo 
'<br><a href=http://www.cmblackriver.metropoliglobal.com/logout.php>Salir</a>'//link para deslogearse, iría a logout.php

}

?>
error: al clicar en enviar:
Warning: Cannot add header information - headers already sent by (output started at /home/cmblackriver/htdocs/config.php:13) in /home/cmblackriver/htdocs/autentificar.php on line 21


autentificar.php
Código PHP:
<?
include('config.php'); //incluimos el config.php que contiene los datos de la conexión a la db

if( ($_POST[nick] == ' ') or ($_POST[pass] == ' ') )//comprobamos que las variables enviadas por el form de login.php tienen contenido
{
Header("Location: login.php"); //estan vacías, volvemos al index
}else{

//comprobamos en la db si existe ese nick con esa pass
$usuarios=mysql_query("SELECT * FROM users WHERE nick='$_POST[nick]' and pass='$_POST[pass]' ");
if(
$user_ok mysql_fetch_array($usuarios)) //si existe comenzamos con la sesion, si no, al index
{

session_register("usuario"); //registramos la variable usuario que contendrá el nick del user
session_register("idusuario"); //registramos la variable idusuario que contendrá la id del user
session_register("level"); //registramos la variable level que contendrá el level del user
//damos valores a las variables de la sesión
$_SESSION[usuario] = $user_ok["nick"]; //damos el nick a la variable usuario
$_SESSION[idusuario] = $user_ok["id"]; //damos la id del user a la variable idusuario
$_SESSION[level] = $user_ok["level"]; //damos el level del user a la variable level
Header("Location: [url]http://www.cmblackriver.metropoliglobal.com/login.php[/url]"); //volvemos al login donde nos saldrá nuestro menú de usuario

}else{
echo 
'Nick y pass incorrectos';
}


?>

pagprivi.php
Código PHP:
<?
include('config.php'); //incluimos el config.php que contiene los datos de la conexión a la db y la sesión

if($_SESSION[level] == 1)
{
echo 
'Tienes level 1 y puedes ver esta página';

}else{
Header("Location: index.php"); 
}

?>
error: Warning: Cannot add header information - headers already sent by (output started at /home/cmblackriver/htdocs/config.php:13) in /home/cmblackriver/htdocs/privado.php on line 9





2.php [aquí he puesto un include a login.php para que aparezca en el menú]
Código PHP:
<? include ('login.php'?>
error: Warning: Cannot send session cache limiter - headers already sent (output started at /home/cmblackriver/htdocs/2.php:8) in /home/cmblackriver/htdocs/config.php on line 12

(podéis verlo: http://www.cmblackriver.metropoliglobal.com/2.php )

estos son todos los errores creo :0

gracias si podéis ayudarme
  #4 (permalink)  
Antiguo 16/08/2003, 07:17
Avatar de sith  
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 333
Antigüedad: 14 años, 4 meses
Puntos: 0
en logout.php el header es Header("login.php"); y deberia ser Header("location:login.php");
Y por el mensage de error parece ser q mandas informacion al navegador, cuando se usa un header no se puede escribir nada en el navegador, prueba a poner la variable output_buffering a on
  #5 (permalink)  
Antiguo 16/08/2003, 08:12
BLACK RIVER
Invitado
 
Mensajes: n/a
Puntos:
Cita:
prueba a poner la variable output_buffering a on
mis conocimientos no llegan hasta ese nivel :|

P.D: lo que más me interesa es lo del include. Si no arreglo eso, de nada va a servir lo que arregle en lo demás

Última edición por BLACK RIVER; 16/08/2003 a las 08:23
  #6 (permalink)  
Antiguo 16/08/2003, 08:45
Avatar de sdf23  
Fecha de Ingreso: diciembre-2002
Mensajes: 297
Antigüedad: 15 años
Puntos: 0
eso e spor el header que no debe tener ningun espacio en blanco... peor en las faqs dice como poner cualquier header en cualquier parte despues de un echo y eso agrega esto al princippio de toda tu pagina, antes del session_start():

Código PHP:
<?php
ob_start
();
?>
y esto al final de la pagina:

Código PHP:
<?php
ob_end_flush
();
?>
__________________

la vida es bella cuando no es culera
  #7 (permalink)  
Antiguo 16/08/2003, 08:55
BLACK RIVER
Invitado
 
Mensajes: n/a
Puntos:
ouuuuuuuu! sdf23! que amo!!!

ya me funciona, pero.. ahora da muchos errores de ejecución... :s

a ver si sabéis porque pasa. (uso templates)

porrr cierto... gracias otra vez XD ahora tengo que solucionar lo demás
  #8 (permalink)  
Antiguo 16/08/2003, 09:32
Avatar de sdf23  
Fecha de Ingreso: diciembre-2002
Mensajes: 297
Antigüedad: 15 años
Puntos: 0
que errores te da?
__________________

la vida es bella cuando no es culera
  #9 (permalink)  
Antiguo 16/08/2003, 09:53
BLACK RIVER
Invitado
 
Mensajes: n/a
Puntos:
se produjo un error en tiempo de ejecución.
¿Desea depurarlo?

línea:1
error: error de sintaxis

también suele dar en la 256...
________________________

tengo otro problema. cuando alguien se identifica y clica en perfil, sale www.cmblackriver.metropoliglobal.com/perfil.php

y tiene que acabar en ?id=2 o la que sea. pero no sé como hacer para que cada usuario le salga su enlace
  #10 (permalink)  
Antiguo 16/08/2003, 13:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
BLACK RIVER
.. los errores de javascript dirigelos a dicho foro ...

Los errores como estos de cabeceras:
Cita:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/filer1/web/cmblackriver/htdocs/2.php:8) in /mnt/filer1/web/cmblackriver/htdocs/config.php on line 15
te está diciendo que en la línea 8 de tu 2.php tienes algún espacio, HTML (echo "algo") o salto de línea .. Eso es considerado como envio de cabeceras HTML al navegador ..

Y .. por la zona que sale en tu web es "normal" que esto aparezca pues lo llamas bajo algún include() en una celda de una tabla HTML ..

Tienes dos opciones:
1) el sistema de autentificación lo "subes" arriba de tu código HTML que usas para armar el "template" (plantilla) que usas ..

2) usas el control del buffer como te comentaron con ob_start() y funciones afines ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 16/08/2003, 13:34
BLACK RIVER
Invitado
 
Mensajes: n/a
Puntos:
gracias cluster ya me va too bien. pero ahora tengo problemas con el perfil.php (esto va en cadena :| )

bueno, es que cuando ya estoy logeado tengo que poner un enlace del tipo perfil.php?id=2 cada uno con su id. y no me sale he probado de muchas maneras una de ellas: <a href="http://www.cmblackriver.metropoliglobal.com/perfil.php?id=<? echo '.$_SESSION[id]'; ?> pero no me funciona ninguna de las que pruebo. ya estoy al límite de rendirme. llevo toda la tarde intntando hacer esto y nada. diréis que es imposible pero esque soy un viciado. las webs me encantan... a ver cómo hago un enlace para que cada usuario entre a su perfil con su id...

ahora voy al foro de javascript a poner el error.

P.D: el header() es igual que el <meta http-equiv="refresh" content="2;URL=index.php"> osea un redireccionador??

espero las dos respuestas.

gracias por vuestra coperación
  #12 (permalink)  
Antiguo 16/08/2003, 13:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
header() es la función de PHP que te "permite" enviar cabeceras HTTP .. al navegador.

La cabecera que estabas usando es la del HTTP: Location: ...

La cabecera que comentas vía META tag de HTML es en la base lo mismo "redirecciona" con la salvedad que le puedes indicar "tiempo" en segundos que lo haga ..

De todas formas .. toda cabecera enviada con header() directo suele ser más seguro/rápido y efectivo que redireccionamientos vía META o javascript (window.location .. por ejemplo) .. ya que, genereas y envias una página con ese tag para que lo interprete el navegador (si te fijas en el tiempo que redirecciona si "detienes" la ejecución de la página en tu navegador . .ahí veras ese <meta ...> .. Mientras que con header("location: tal.tal") se ejecuta antes del HTML de la própia página por parte del navegador ..

Sobre lo otro que comentas .. suponiendo que el tu variable de sesion id tienes ese dato sería el link tipo:

Código PHP:
<a href="http://www.cmblackriver.metropoliglobal.com/perfil.php?id=<? echo $_SESSION['id']; ?>">nose</a>
Si pones una variable entre ' comillas simples ' ... El contenido no se evalua por parte de PHP .. así que si te fijas en tu link generado debería mostrarte eso mismo tal cual ($_SESION[id] .. ) y no su valor ...)

Un saludo,

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 16/08/2003, 16:49
BLACK RIVER
Invitado
 
Mensajes: n/a
Puntos:
Gracias cluster, lo primero entendido, pero lo segundo... :(

no me funciona lo del perfil. aparece como perfil.php?=

pero no me pone la id :( qué puede ser? qué datos te puedo poner para que me ayudes?
  #14 (permalink)  
Antiguo 17/08/2003, 02:41
BLACK RIVER
Invitado
 
Mensajes: n/a
Puntos:
ooooooooooooooooh,

cluster, ya está en vez de ser [id] era [idusuario] me había fijado en otro archivo que tenía :) y ya funciona todo. ahora sólo me queda el error maldito ese.

me gustaría hacer una última pregunta.

quiero que en el perfil puedan editar sus datos. es decir,
que aparezca un formulario con sus datos. Tengo estos datos:
Nick:
Password:
Repitela:
email:
Rollo:

y que aparezcan unos inputs con sus datos, por ejemplo dentro del input de nick que ponga mi nick "Black_River"... y se puedan editar todos menos el del nick.

no sé si me explico. he probado de esta manera pero no me muestra los datos :o :

Código PHP:
<form name="form1" method="post" action="">
  <font size="2" face="Verdana, Arial, Helvetica, sans-serif">Usuario: 
  <input name="textfield" type="text" value="<? echo $_SESSION[nick]; ?>">
  <br>
  Email: 
  <input name="textfield2" type="text" value="<? $_SESSION[email]; ?>">
  </font> 
</form>
bueno, a ver si salgo ya de esta y terminamos con todo este lio
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:38.