Foros del Web » Programando para Internet » PHP »

hasta las narices de problemas con las sesiones.

Estas en el tema de hasta las narices de problemas con las sesiones. en el foro de PHP en Foros del Web. Buenas, ante todo me presento porque soy nuevo en este foro :), ahora comentaros mi problema: Tengo que hacer un proyecto donde a través de ...
  #1 (permalink)  
Antiguo 06/05/2007, 08:02
 
Fecha de Ingreso: mayo-2007
Mensajes: 237
Antigüedad: 16 años, 11 meses
Puntos: 3
hasta las narices de problemas con las sesiones.

Buenas, ante todo me presento porque soy nuevo en este foro :), ahora comentaros mi problema:

Tengo que hacer un proyecto donde a través de un formulario de usuaruio y contraseña, pueda saber según el nivel, si el usuario es administrador o cliente... y una vez lo sepa, entrar a una parte u otra a través de sesiones.

Tenemos la primera que es ingreso.php
Código PHP:
<?
session_start
();
?>
<form name="form1" method="post" action="comprueba.php">
  <strong>Usuario:</strong>
  <label>
  <input name="login" type="text" id="login">
  </label>
  <p><strong>Contrase&ntilde;a:</strong> 
    <label>
    <input name="pass" type="text" id="pass">
    </label>
  </p>
  <p>
    <label>
    <input type="submit" name="Submit" value="comprobar">
    </label>
  </p>
</form>
Esta nos lleva a comprueba.php que comprobará si el usuario y contraseña están en la base de datos, y según el level que tenga irá a la página menuadmin.php o menureg.php. Este es el comprueba.php

Código PHP:
<?
session_start
();

$db="servtein";
$tabla="registro";

$sql="SELECT * FROM $tabla WHERE login='$login' AND pass='$pass'";

$conexion mysql_connect("localhost""root""02051250");

mysql_select_db($db$conexion);

$resultado=mysql_query($sql$conexion);

while (
$registromysql_fetch_row($resultado))
{
$lv $registro[3];

if (
$lv != && 1)
{
$ok "falso";
header ("location: error.php");
}
else
{
if (
$lv == 0)
{
$ok "correcto";
header ("location: menuadmin.php");
}
else
{
if (
$lv == 1)
{
$ok "correcto";
header ("location: menureg.php");
}}}}
?>
  
<p>El usuario o contraseña que está intentando utilizar, no está registrada en nuestra base de datos, por favor:</p>
<p> <a href="ingreso.php">inténtelo de nuevo</a> o registrese
Introduciremos un usuario con level 0 que son los adminsitradores, para que vaya a menuadmin.php que es esta:
Código PHP:
<?
session_start
();

if (
$ok!="correcto")
{
header("location: error.php");
}
else 
{
?>
<p align="center"><strong>Bienvenido al &aacute;rea administrativa</strong></p>
<p align="center"><strong>Desde aqu&iacute; puedes hacer las siguientes operaciones </strong></p>
<p align="center">&nbsp;</p>
<table width="100%" border="0">
  <tr>
    <td width="33%"><ul>
      <li><em><strong>Noticias</strong></em>
        <ul>
          <li><a href="noticias/altanot.php">Dar de alta una noticia</a></li>
          <li><a href="noticias/bajanot.php">Dar de baja una noticia</a></li>
          <li><a href="noticias/modifnot.php">Modificar una noticia</a></li>
          <li><a href="noticias/consunot.php">Consultar una noticia </a></li>
        </ul>
      </li>
    </ul></td>
    <td width="34%"><ul>
        <li><em><strong>Usuarios / Clientes</strong></em>      
          <ul>
            <li>Dar de alta clientes</li>
            <li>Dar de baja clientes</li>
            <li>Modificar clientes</li>
            <li>Consultar clientes </li>
          </ul>
        </li>
    </ul></td>
    <td width="33%"><ul>
      <li><strong>Usuarios / Administradores
        </strong>
        <ul>
          <li><a href="usuarios/altaadmin.php">Dar de alta administrador  </a></li>
          <li><a href="usuarios/bajaadmin.php">Dar de baja administrador</a></li>
          <li><a href="usuarios/modifiadmin.php">Modificar administrador</a></li>
          <li><a href="usuarios/consuladmin.php">Consultar administrador  </a></li>
        </ul>
      </li>
    </ul></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td><p>&nbsp;</p>
    </td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
<p align="center">&nbsp;</p>
<? ?>
Si pongo el usuario mal, osea que no esté en la base de datos, me sale en el comprueba.php que no está registrado y tal, osea funciona... El problema es cuando meto un usuario correcto, ya que no entra en menuadmin.php y me devuelve este error:

Cita:
Notice: Undefined variable: ok in d:\utilidades\internet\servidor\easyphp1-8\www\proyecto\menuadmin.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at d:\utilidades\internet\servidor\easyphp1-8\www\proyecto\menuadmin.php:4) in d:\utilidades\internet\servidor\easyphp1-8\www\proyecto\menuadmin.php on line 6
He leido que puede ser problemas de los espacios o del php.ini... pero es que no doy con la tecla

A ver si alguien me ayuda a revisar el código o arroja luz.

Gracias
  #2 (permalink)  
Antiguo 06/05/2007, 11:09
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: hasta las narices de problemas con las sesiones. Ayuda!

Tienes un lindo problema ahí. El error te esta diciendo que la variable $ok no esta definida aún en la linea 4 de menuadmin.php. Osea, cuando haces el if intentas comprobar una variable que no existe y nunca definiste (salvo en otro archivo que no tiene nada que ver). Para poder "compartir" las variables entra varios archivos necesitas "meter" esas variables en el array superglobal $_SESSION.
Por ejemplo para tener disponible la variable $ok en menuadmin.php necesitas declarar $ok dentro de $_SESSION en el archivo comprueba.php quedando de la siguiente manera:
Código PHP:
//comprueba.php
session_start();

$_SESSION['ok'] = 'correcto';

//menuadmin.php
session_start();

if(
$_SESSION['ok'] != 'correcto')
{
     
//Tu código aca

Saludos.
  #3 (permalink)  
Antiguo 06/05/2007, 12:30
 
Fecha de Ingreso: mayo-2007
Mensajes: 237
Antigüedad: 16 años, 11 meses
Puntos: 3
Re: hasta las narices de problemas con las sesiones. Ayuda!

buenas, algo se ha solucionado, pero sigo teniendo problemas, te cuento:

- Si pongo el usuario correcto, entro a menuadmin.php sin problemas
- Si dejo los campos de usuario y contraseña sin rellenar también entro a menuadmin.php (cosa que no debería)
- Si entro directamente a menuadmin.php me da este error

Cita:
Notice: Undefined index: ok in d:\utilidades\internet\servidor\easyphp1-8\www\proyecto\menuadmin.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at d:\utilidades\internet\servidor\easyphp1-8\www\proyecto\menuadmin.php:4) in d:\utilidades\internet\servidor\easyphp1-8\www\proyecto\menuadmin.php on line 6
y tendría que ir a la página error.php...

el código quedó asi:
comprueba.php
Código PHP:
<?
session_start
();
$ok $_SESSION['ok'] = 'correcto';

$db="servtein";
$tabla="registro";

$sql="SELECT * FROM $tabla WHERE login='$login' AND pass='$pass'";

$conexion mysql_connect("localhost""root""02051250");

mysql_select_db($db$conexion);

$resultado=mysql_query($sql$conexion);

while (
$registromysql_fetch_row($resultado))
{
$lv $registro[3];

if (
$lv != && 1)
{
$ok "falso";
header ("location: error.php");
}
else
{
if (
$lv == 0)
{
$ok "correcto";
header ("location: menuadmin.php");
}
else
{
if (
$lv == 1)
{
$ok "correcto";
header ("location: menureg.php");
}}}}
?>
  
<p>El usuario o contrase&ntilde;a que est&aacute; intentando utilizar, no est&aacute; registrada en nuestra base de datos, por favor:</p>
<p> <a href="ingreso.php">int&eacute;ntalo de nuevo</a> o registrese
menuadmin.php
Código PHP:
<?
session_start
();

if(
$_SESSION['ok'] != 'correcto')
{
header("location: error.php");
}
else 
{
?>
<p align="center"><strong>Bienvenido al &aacute;rea administrativa</strong></p>
<p align="center"><strong>Desde aqu&iacute; puedes hacer las siguientes operaciones </strong></p>
<p align="center">&nbsp;</p>
<table width="100%" border="0">
  <tr>
    <td width="33%"><ul>
      <li><em><strong>Noticias</strong></em>
        <ul>
          <li><a href="noticias/altanot.php">Dar de alta una noticia</a></li>
          <li><a href="noticias/bajanot.php">Dar de baja una noticia</a></li>
          <li><a href="noticias/modifnot.php">Modificar una noticia</a></li>
          <li><a href="noticias/consunot.php">Consultar una noticia </a></li>
        </ul>
      </li>
    </ul></td>
    <td width="34%"><ul>
        <li><em><strong>Usuarios / Clientes</strong></em>      
          <ul>
            <li>Dar de alta clientes</li>
            <li>Dar de baja clientes</li>
            <li>Modificar clientes</li>
            <li>Consultar clientes </li>
          </ul>
        </li>
    </ul></td>
    <td width="33%"><ul>
      <li><strong>Usuarios / Administradores
        </strong>
        <ul>
          <li><a href="usuarios/altaadmin.php">Dar de alta administrador  </a></li>
          <li><a href="usuarios/bajaadmin.php">Dar de baja administrador</a></li>
          <li><a href="usuarios/modifiadmin.php">Modificar administrador</a></li>
          <li><a href="usuarios/consuladmin.php">Consultar administrador  </a></li>
        </ul>
      </li>
    </ul></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td><p>&nbsp;</p>
    </td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
<p align="center">&nbsp;</p>
<? ?>
EDITO: yo me voy a cagar en la madre que parió a M$

- Con Firefox 2.03 funciona perfectamente
- Con IE 6.x funciona perfectamente
- Con IE 7 (que es con el que estoy probando) es con el que da esos errores... ¿Será cosa del navegador?

Última edición por GoldFran; 06/05/2007 a las 12:53
  #4 (permalink)  
Antiguo 06/05/2007, 12:53
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: hasta las narices de problemas con las sesiones. Ayuda!

Dos cosas, sigues sin implementar lo que te explique. Por que en comprueba.php sigues declarando $ok en vez de $_SESSION['ok']?
Otra cosa no entiendo que quieres hacer en esta linea:
Código PHP:
if ($lv != && 1
Pero el && 1 es ilegal, mejor dicho siempre entrara en el if si el primero es true. Tienes que tenes dos comparaciones por ejemplo ahí se evalúa $lv != 0 y después se evalúa 1 que se toma como true entonces siempre entrara... supongo que lo que quieres hacer es volver evaluar $lv contra uno entonces debería ser:
Código PHP:
if ($lv != && $lv != 1
Saludos.

PD: Para evacuar la gran parte de tus dudas lee esta sección del manual oficial.
  #5 (permalink)  
Antiguo 06/05/2007, 13:00
 
Fecha de Ingreso: mayo-2007
Mensajes: 237
Antigüedad: 16 años, 11 meses
Puntos: 3
Re: hasta las narices de problemas con las sesiones. Ayuda!

Hola, si te fijas, he declarado en comprueba.php debajo de la session_start(), que $ok = $_session ['ok'] = 'correcto' y así, poder seguir usando la variable $ok con $_session... ¿No tiene que ser así?, como sería entonces?

Por otra parte, lo que quiero hacer con if ($lv != 0 && $lv != 1) es que si el usuario es distinto del nivel 0 o 1, salga la página de error... De todas formas, esta linea se pueden suprimir ya que yo solo tendré usuarios administradores de nivel 0 y usuarios de nivel 1. Si en un futuro quisiera añadir más niveles, pondría más ifs...

Para solucionar el tema de que entre sin poner ni usuario ni contraseña, lo que puedo hacer directamente es poner un javascript que no permita dejar campos vacios

PD: has leido lo que he puesto de los navegadores?
  #6 (permalink)  
Antiguo 06/05/2007, 13:12
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: hasta las narices de problemas con las sesiones. Ayuda!

Cita:
Iniciado por GoldFran Ver Mensaje
Hola, si te fijas, he declarado en comprueba.php debajo de la session_start(), que $ok = $_session ['ok'] = 'correcto' y así, poder seguir usando la variable $ok con $_session... ¿No tiene que ser así?, como sería entonces?
No, no tiene que quedar así ya que solo se declara "correcto" en la variable de session y en los demás archivos cuando verifiques esta variable solo va a contener "correcto" aún que en el archivo después se declare como "falso". Deberías cambiar todos los $ok por $_SESSION['ok'].

Cita:
Iniciado por GoldFran Ver Mensaje
Para solucionar el tema de que entre sin poner ni usuario ni contraseña, lo que puedo hacer directamente es poner un javascript que no permita dejar campos vacios

PD: has leido lo que he puesto de los navegadores?
No es necesario lo de JS, y no había leído lo de los navegadores. Puede ser que tengas dramas con la cabecera HTTP que estas enviando (el header es una cabecera). Prueba escribiendo Location (con ele mayúscula ya que eso puede no gustarle al IE).

Saludos.
  #7 (permalink)  
Antiguo 06/05/2007, 14:09
 
Fecha de Ingreso: mayo-2007
Mensajes: 237
Antigüedad: 16 años, 11 meses
Puntos: 3
Re: hasta las narices de problemas con las sesiones. Ayuda!

Cita:
Iniciado por DarioDario Ver Mensaje
No, no tiene que quedar así ya que solo se declara "correcto" en la variable de session y en los demás archivos cuando verifiques esta variable solo va a contener "correcto" aún que en el archivo después se declare como "falso". Deberías cambiar todos los $ok por $_SESSION['ok'].
Ya he corregido esto, y he dejado todo como $_SESSION['ok'] = 'correcto';, pero el efecto sigue siendo el mismo :)


Cita:
No es necesario lo de JS, y no había leído lo de los navegadores. Puede ser que tengas dramas con la cabecera HTTP que estas enviando (el header es una cabecera). Prueba escribiendo Location (con ele mayúscula ya que eso puede no gustarle al IE)
Si no es necesario JS, como lo hago, con un if para que cuando los campos estén vacíos, me diga que lo reintente de nuevo? como sería eso?

En cuanto a Location o location, sigue pasando del tema... Es que el IE7 tiene mucha mierda, y vete tu a saber que filtro aplica para que de esos problemas...

Afortunadamente yo presento el proyecto en IE6/Firefox y esos si funcionan correctamente.

PD: me entraba si no ponía ni usuario ni contraseña proque tenía un usuario de nivel 0 con campos vacios xDDDDDDD

Última edición por GoldFran; 06/05/2007 a las 15:07
  #8 (permalink)  
Antiguo 09/05/2007, 02:30
 
Fecha de Ingreso: mayo-2007
Mensajes: 237
Antigüedad: 16 años, 11 meses
Puntos: 3
Re: hasta las narices de problemas con las sesiones.

Buenas, ahora tengo un problema con el cierre de sesion...

Mirad, en la pagina de menuadmin.php quiero poner un enlace para que me cierre la session.

yo he echo esto:

Código HTML:
 <a href="ingreso.php"> <? session_destroy(); ?> Cerrar sesi&oacute;n</a> 
El caso es que si paso de menuadmin.php a cualquier otro enlace, (dar de altas usuario por ejemplo), y vuelvo para atars con el retroceso, me manda a la pagian de error.php. en otras palabras que la sesion se cierra xD

Alguna sugerencia?
  #9 (permalink)  
Antiguo 09/05/2007, 05:07
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: hasta las narices de problemas con las sesiones.

Si... cuando ejecutas esa función (session_destroy() ) destruyes la session... no entiendo que quieres hacer ahí pero me parece que te confundistes bastante.
La forma de hacerlo sería que crees un script solo con ese contenido (la función y alguna re-dirección o algo) y el enlace apunte allí.

Saludos
  #10 (permalink)  
Antiguo 09/05/2007, 05:23
 
Fecha de Ingreso: mayo-2007
Mensajes: 237
Antigüedad: 16 años, 11 meses
Puntos: 3
Re: hasta las narices de problemas con las sesiones.

Cita:
Iniciado por DarioDario Ver Mensaje
Si... cuando ejecutas esa función (session_destroy() ) destruyes la session... no entiendo que quieres hacer ahí pero me parece que te confundistes bastante.
La forma de hacerlo sería que crees un script solo con ese contenido (la función y alguna re-dirección o algo) y el enlace apunte allí.

Saludos
Lo que yo quiero exactamente es tener un hypervinculo que cierre la sesion y me lleve de nuevo a la pagina de introducir usuario y contraseña.

Para hacerlo o bien hago una funcion como dices, o crear un php con sesion destroy...

Con una funcion creo que quedaria mejor y me ahorro una pagina pero no se como seria exactamente...
  #11 (permalink)  
Antiguo 09/05/2007, 10:53
 
Fecha de Ingreso: octubre-2006
Ubicación: México D.F
Mensajes: 210
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: hasta las narices de problemas con las sesiones.

Hola... lo más sencillo de esto ultimo es que tu "link" de "Cerrar sesió" apunte a un archivo "logout.php" como el que sigue:
Código PHP:
<?php
    session_start
();


    
session_unset();
    
session_destroy();    


    
header('Location: login.php');
    exit();
?>
Esto hace que se cierre y se destruya la sesión y cuando acabe te redirecciona al script donde el usuario vuelve a "firmarse" (login.php).

Un saludo
  #12 (permalink)  
Antiguo 09/05/2007, 11:28
 
Fecha de Ingreso: mayo-2007
Mensajes: 237
Antigüedad: 16 años, 11 meses
Puntos: 3
Re: hasta las narices de problemas con las sesiones.

Cita:
Iniciado por gvargas Ver Mensaje
Hola... lo más sencillo de esto ultimo es que tu "link" de "Cerrar sesió" apunte a un archivo "logout.php" como el que sigue:
Código PHP:
<?php
    session_start
();


    
session_unset();
    
session_destroy();    


    
header('Location: login.php');
    exit();
?>
Esto hace que se cierre y se destruya la sesión y cuando acabe te redirecciona al script donde el usuario vuelve a "firmarse" (login.php).

Un saludo
Pués esto va a ser :)
  #13 (permalink)  
Antiguo 21/05/2007, 03:22
 
Fecha de Ingreso: mayo-2007
Mensajes: 237
Antigüedad: 16 años, 11 meses
Puntos: 3
Re: hasta las narices de problemas con las sesiones.

Ahora me surge una dudilla, y es que antes lo hice bien, pero lo borre y ahora no me sale...

Lo que quiero es pasar una variable de registros ($registro[1]) del "comprueba.php" a otra pagiana para que me diga algo asi como: "bienvenido usuario XXX (que pertenezca al registro[1]...

en el comprueba.php tengo:
$_SESSION['login'] = $registro[1];

y el la otra paagina para llamarlo hago un echo $_SESSION['login'] = $registro[1]
; pero me dice que no e definido la variable registro...

En ambas paginas esta iniciado la session_start()
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 14:34.