Foros del Web » Programando para Internet » PHP »

Problema con variable de sesion

Estas en el tema de Problema con variable de sesion en el foro de PHP en Foros del Web. hola a todos, estoy haciendo una tienda online, y necesito que se registre un usuario para que realice el paso final en la compra, por ...
  #1 (permalink)  
Antiguo 01/06/2010, 11:30
 
Fecha de Ingreso: junio-2009
Mensajes: 103
Antigüedad: 15 años, 5 meses
Puntos: 0
Problema con variable de sesion

hola a todos,

estoy haciendo una tienda online, y necesito que se registre un usuario para que realice el paso final en la compra, por lo que le doy al usuario la posibilidad de loguearse y cuando se loguea lo que hago es pasarle las variables de sesion donde guardo toda la informacion del carrito y la cantidad total de dinero a varias variables, pero no entiendo porque no se me pasan , aqui os dejo un trozo del codigo:

//Cuando ha verificado en la base de datos que es un usuario registrado hace lo siguiente:

@session_start();


//PASAMOS LAS VARIABLES DEL CARRITO DE LA COMPRA DEL 'INVITADO', A LA SESION DEL USUARIO
$itemsencesta = $_SESSION['itemsEnCesta'];
$total_compra = $_SESSION['total'];
//DESTRUIMOS LA SESION
@session_destroy();
@session_start();

//PASAMOS NUESTRO CARRITO A LA NUEVA SESION
$_SESSION['name'] = $usuario;
$_SESSION['user'] = "usuario";

$_SESSION['itemsEnCesta'] = $itemsencesta;
$_SESSION['total'] = $total_compra;
@header("Location: ../usuario/index.php?page=compra");



mientras hago todo esto sigo viendo el carrito de la compra lleno a mi derecha, es decir que las variables de sesion siguen funcionando pero cuando ya me redirige el codigo a la pagina de usuario alli no existen las variables 'itemsEnCesta' ni 'total', sin embargo las de name y user si :S, alguien sabe porque??


saludso y gracias de antemano!!
  #2 (permalink)  
Antiguo 01/06/2010, 12:20
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problema con variable de sesion

Si quitas la @ de session_start() y session_destroy() te da algun mensaje de error o advertencia?

No veo sentido a destruir la sesion y "volver a crearla" para restaurar los datos originales y solo agregar info del usuario, de hecho, no deberias usar session_destroy() hasta que necesites limpiar todos los datos de la sesion, ya sea al completar la compra o cuando el usuario hace click en "finalizar sesion" (logout).

En todo caso, para limpiar variables puedes usar unset():

unset($_SESSION['total']);
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 01/06/2010, 13:54
 
Fecha de Ingreso: junio-2009
Mensajes: 103
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema con variable de sesion

hola triby, gracias por tu respuesta.

Destruyo la sesion porque realmente no quiero que la gente pueda comprar nada siendo un invitado, es decir, sin registrarse y sin estar autenticado, por eso le doy a la opcion al invitado de loguearse y cuando se loguea ahi es cuando viene la parte de codigo que he incluido... lo k hago es destruir la sesion invitado, pero antes de destruirla paso la informacion que necesito que es el carrito de la compra, y despues inicio la sesion con usuario registrado y ahi le vuelvo a pasar los datos del carrito para que ahora si pueda comprar...

y realmente destruyo la sesion porque tengo mas variables en la sesion invitado aparte de los valores del carrito + el total del precio...


edito: por cierto nose si tendra que ver, pero digamos k al redireccionarme me cambia tanto de carpeta como de archivo, quizas la sesion no continua por eso :? pero esk es rarisimo pork tanto el nombre de usuario, como el tipo que los guardo en ese archivo me los guarda bien y se visualizan en el otro archivo bien :S

Última edición por veronica21; 01/06/2010 a las 14:12
  #4 (permalink)  
Antiguo 01/06/2010, 14:39
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problema con variable de sesion

Insisto, NO uses session_destroy(), excepto para finalizar sesion de usuario (LOGOUT), si quieres limpiar todos los datos de la sesion y poder seguir manipulandola sin redirigir / actualizar la pagina, entonces usa:

$_SESSION = array();

De cualquier forma, creo que si el planteamiento de tu programacion te obliga a respaldar, destruir y restaurar sesion, definitivamente debes hacer una revision / replanteamiento general.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 01/06/2010, 15:19
 
Fecha de Ingreso: junio-2009
Mensajes: 103
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema con variable de sesion

Cita:
Iniciado por Triby Ver Mensaje
Insisto, NO uses session_destroy(), excepto para finalizar sesion de usuario (LOGOUT), si quieres limpiar todos los datos de la sesion y poder seguir manipulandola sin redirigir / actualizar la pagina, entonces usa:

$_SESSION = array();

De cualquier forma, creo que si el planteamiento de tu programacion te obliga a respaldar, destruir y restaurar sesion, definitivamente debes hacer una revision / replanteamiento general.
no weno realmente no estoy obligada a destruir nada, ahora mismo he reemplazado las variables y simplemente he conservado la sesion, pero sigo sin poder ver la informacion del carrito en la pagina del usuario registrado... no tengo ni idea que puede estar pasando
  #6 (permalink)  
Antiguo 01/06/2010, 15:30
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problema con variable de sesion

Muestra tu codigo actual para tratar de averiguar donde esta el problema.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 01/06/2010, 15:42
 
Fecha de Ingreso: junio-2009
Mensajes: 103
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema con variable de sesion

bueno, es bastante largo pero os pondre algo:


Esta pagina es lo que tengo despues de darle al boton de 'pasar por caja' para realizar la compra final

if( !empty($_POST['enviat']) )
{
//si es usuario invitado le daremos la oportunidad de loguearse o registrarse
if($_SESSION['user'] == 'invitado' || $_SESSION['user'] == 'administrador')
{

//Te envia a la pagina donde mostrara tanto un formulario para loguearte, o en caso de que el usuario no este registrado dicha posibilidad
header("Location: index.php?page=compralogin");

}


Esta pagina es donde te redirecciona para loguearte o registrarte, una vez has metido los datos en el formulario y le das a loguear te sale esto:

while( $fila = $result->fetch_row() )
{
//aqui entrara si el usuario esta en la base de datos y si es usuario normal
if($usuario == $fila[0] && $pass == $fila[1] && $fila[9] == 'no')
{
$contador++;

$_SESSION['name'] = $usuario;
$_SESSION['user'] = "usuario";

@header("Location: ../usuario/index.php?page=compra");
}

por tanto si es usuario registrado en la base de datos te cambia las variables de sesion de name y user y te redirecciona ahora si a la pagina del usuario registrado donde es aqui donde se difunde tanto $_SESSION['name']
como $_SESSION['user'], pero la variable con el carrito de la compra no se difunde... y eso que antes de que me redireccione imprimo el carrito y me sale todo...

weno aqui esta la ultima pagina a la que te redirige donde saca los datos de la variable del carrito de la compra:

session_start();
echo "<DIV CLASS='titulo'> TU CARRITO DE LA COMPRA</DIV>";
echo "<DIV CLASS='contenido'>";


//TABLA CON LOS DATOS DE LA COMPRA
echo "<TABLE BORDER=1 ALIGN='CENTER'>";
echo "<TR>";
echo "<TH>CANTIDAD</TH>";
echo "<TH>FOTO</TH>";
echo "<TH>MODELO</TH>";
echo "<TH>PRECIO</TH>";
echo "<TH>SUBTOTAL</TH>";
echo "</TR>";
foreach($_SESSION['itemsEnCesta'] as $ind1=>$valor1)
{
echo "<TR>";
foreach($valor1 as $ind2=>$valorReal)
{
if($ind2 == 0)
{
echo "<TD align='center'>x ".$valorReal,"</TD>";
$cantidad = $valorReal;
}
if($ind2 == 1)
echo "<TD ALIGN='center'><A HREF='../imagenes/$valorReal' target='_blank'><IMG SRC='../imagenes/$valorReal' width= 30px height=30px></TD>";
if($ind2 == 2)
echo "<TD ALIGN='center'>".$valorReal,"</TD>";
if($ind2 == 3)
{
echo "<TD ALIGN='CENTER'>".$valorReal."€</TD><BR><BR>";
$subtotal = $valorReal * $cantidad;
echo "<TD ALIGN='CENTER'>".$subtotal."€</TD><BR><BR>";
}
}
echo "</TR>";
}
echo "</TABLE>";
  #8 (permalink)  
Antiguo 01/06/2010, 15:48
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problema con variable de sesion

Algo estas haciendo mal donde asignas name y user en $_SESSION o donde haces la redireccion, pero no muestras esa parte del codigo.
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 01/06/2010, 15:48
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 15 años, 3 meses
Puntos: 66
Respuesta: Problema con variable de sesion

Una pregunta:
usas session_start() al principio de todos los archivos en los cuales se supone que ha de estar activa la sesión??

por otro lado coincido con Triby en:

Cita:
Iniciado por Triby Ver Mensaje
De cualquier forma, creo que si el planteamiento de tu programacion te obliga a respaldar, destruir y restaurar sesion, definitivamente debes hacer una revision / replanteamiento general.
__________________
Tu álbum de cromos online!!

Última edición por santris; 01/06/2010 a las 15:57
  #10 (permalink)  
Antiguo 01/06/2010, 16:22
 
Fecha de Ingreso: noviembre-2007
Mensajes: 208
Antigüedad: 17 años
Puntos: 2
Respuesta: Problema con variable de sesion

mira aver si estas eliminando ocn unset o algo la variable del carrito porque es muy raro........
  #11 (permalink)  
Antiguo 01/06/2010, 16:31
 
Fecha de Ingreso: junio-2009
Mensajes: 103
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema con variable de sesion

Lo unico que tengo donde asigno las variables es lo que te he pegado, simplemente me machaca la variable $_session['user'] y $_session['name'] que antes valian 'invitado' y 'invitado' sucesivamente y que pasaran a valer 'usuario' y el nombre del usuario cuando se registro en la base de datos, en mi caso 'pepe' y despues de esto redirecciona sin haber mas modificacion alguna en las sesiones...

con respecto a la pagina donde te redirecciona te la copio entera:


<style>
a img
{
border:none;
}
</style>

<?php
session_start();
echo "<DIV CLASS='titulo'> TU CARRITO DE LA COMPRA</DIV>";
echo "<DIV CLASS='contenido'>";


//TABLA CON LOS DATOS DE LA COMPRA
echo "<TABLE BORDER=1 ALIGN='CENTER'>";
echo "<TR>";
echo "<TH>CANTIDAD</TH>";
echo "<TH>FOTO</TH>";
echo "<TH>MODELO</TH>";
echo "<TH>PRECIO</TH>";
echo "<TH>SUBTOTAL</TH>";
echo "</TR>";
foreach($_SESSION['itemsEnCesta'] as $ind1=>$valor1)
{
echo "<TR>";
foreach($valor1 as $ind2=>$valorReal)
{
if($ind2 == 0)
{
echo "<TD align='center'>x ".$valorReal,"</TD>";
$cantidad = $valorReal;
}
if($ind2 == 1)
echo "<TD ALIGN='center'><A HREF='../imagenes/$valorReal' target='_blank'><IMG SRC='../imagenes/$valorReal' width= 30px height=30px></TD>";
if($ind2 == 2)
echo "<TD ALIGN='center'>".$valorReal,"</TD>";
if($ind2 == 3)
{
echo "<TD ALIGN='CENTER'>".$valorReal."€</TD><BR><BR>";
$subtotal = $valorReal * $cantidad;
echo "<TD ALIGN='CENTER'>".$subtotal."€</TD><BR><BR>";
}
}
echo "</TR>";
}
echo "</TABLE>";


//BOTON PASAR POR CAJA
echo "<BR><BR><BR><B>Total: ",$_SESSION['total'],"€</B>";
echo "<FORM METHOD='POST'>";
echo "<INPUT TYPE='hidden' value='compralogin'>";
echo "<INPUT TYPE='submit' NAME='enviat' VALUE='Pasar por Caja'>";
echo "</FORM>";


//Comprobacion de logueo
if( !empty($_POST['enviat']) )
{
//si es usuario invitado le daremos la oportunidad de loguearse o registrarse
if($_SESSION['user'] == 'invitado' || $_SESSION['user'] == 'administrador')
{
//Te envia a la pagina donde mostrara tanto un formulario para loguearte, o en caso de que el usuario no este registrado dicha posibilidad
header("Location: index.php?page=compralogin");

}
else
{
//realizamos la insercion en la base de datos de la compra

}
}
//CIERRA DIV CONTENIDO
echo "</DIV>";
  #12 (permalink)  
Antiguo 01/06/2010, 16:44
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problema con variable de sesion

Y ese codigo te genera algun error o advertencia como de "Warning: Cannot modify headers information..." o similar?

1- No debes enviar ni un caracter, ni un espacio, ni saltos de linea, mucho menos etiquetas HTML, CSS, etc. antes de session_start() o header() porque ambas instrucciones fallaran.

2- Inmediatamente despues de un header('Location: ...'); debes agregar exit; para finalizar la ejecucion del script y evitar acciones impredecibles.

Tu codigo deberia ser mas o menos asi:
Código PHP:
Ver original
  1. <?php
  2.  
  3. // Verificas el inicio de sesion
  4. if($_SESSION['user'] == 'invitado' || $_SESSION['user'] == 'administrador') {
  5.     header("Location: index.php?page=compralogin");
  6.     exit;
  7. }
  8.  
  9. // Verificas si ya se proceso el formulario
  10. if(isset($_POST['enviat'])) {
  11.     // Verificas la informacion del formulario
  12.     // La ingresas a base de datos
  13.     // Eliminas la informacion de compra en la sesion (si es que ya no la necesitas)
  14.     // Muestras un mensaje de que todo salio bien y/o rediriges a otra pagina
  15.     exit;
  16. }
  17.  
  18. // Aqui muestras tu formulario
  19. ?>
  20. <html>
  21. <head>
  22. <title>bla bla bla</title>
  23. <style type="text/css">body { background:#fff; }</style>
  24. </head>
  25. <body>
  26. <form .............>
  27. </form>
  28. </body>
  29. </html>
__________________
- León, Guanajuato
- GV-Foto
  #13 (permalink)  
Antiguo 04/06/2010, 15:57
 
Fecha de Ingreso: junio-2009
Mensajes: 103
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema con variable de sesion

hola, perdona por tardar tanto en responder pero esque voy tan justa de tiempo que deje un poco el tema este y segui con el proyecto y ahora que estoy un pokito mas descargada lo retomo;

he comprobado un poco lo que me has dicho de lo de los espacios, tampoco me salen errores del header, nose si tendra que ver pero por ejemplo los alert no me los lee cuando hay despues un header que redirige en la misma condicion o bucle...

Las dos paginas que recepcionan que son la de administracion o la de usuario registrado (recordemos que el problema viene cuando un usuario invitado (que no registrado) mete cosas en la cesta de la compra y a la hora de darle a pasar por caja, mi aplicacion detecta que el usuario no esta registrado y te envia a una pantalla o bien para registrarte o bien para loguearte) en ninguna de las dos me recoge algunas variables de sesion, y digo algunas porque despues otras como $_SESSION['user'] y $_SESSION['name'] que recogen el tipo de usuario y el nombre si que me las recuerda... De todas formas os voy a poner todo el codigo de la pagina que envia (desde la que logueo) y la pagina desde la cual recepciono (administracion o usuario registrado);


pagina login o registrate:

<STYLE>
.wrapper
{
margin: 1em;
}
.contenedor_login
{
width: 43%;
border: 1px solid black;
border-radius: 5px;
-moz-border-radius: 4.5px;
float:right;
padding: 1em;
}
.tituloo
{
font-weight:bold;
border-bottom: 1px solid black;
margin-bottom: 1em;
}
.contenedor_registrate
{
width: 45%;
border: 1px solid black;
border-radius: 5px;
-moz-border-radius: 4.5px;
float:right;
margin-right: 0.5em;
padding: 1em;
}

</STYLE>



<!-- LOGIN -->
<DIV class='titulo'> LOGIN </DIV>
<DIV CLASS='wrapper'>
<DIV CLASS='contenedor_login'>
<DIV CLASS='tituloo'> YA ERES USUARI@ REGISTRAD@? </DIV>

<FORM METHOD='POST'>
LOGIN: <BR><INPUT TYPE='TEXT' NAME='login' SIZE='14'><BR>
CONTRASEÑA: <BR><INPUT TYPE='password' NAME='password' SIZE='14'><BR>
<IMG SRC=../photoshop/registro.jpg width=50px height=50px alt='registrate'><INPUT TYPE='SUBMIT' NAME='logueo' VALUE='Enviar'><BR>
</FORM>

</DIV>




<!-- REGISTRATE -->
<DIV CLASS='contenedor_registrate'>
<DIV CLASS='tituloo'> CREA TU CUENTA </DIV>
Soy nuev@ client@ y quiero crear mi nueva cuenta.

Al crear una cuenta en <B>Doitfast</B> podrás realizar tus compras cómodamente y de forma fácil<br>
<FONT COLOR='red'><A HREF='index.php?page=registrate' style={border:none;}>Pulsa aquí para crear tu cuenta</A> </FONT>

</DIV>


<!-- CIERRA WRAPPER -->
</DIV>
<?php

if( !empty($_POST['logueo']) )
{
if(!empty($_POST['logueo']) && !empty($_POST['login']) && !empty($_POST['password']))
{
//conexion bd
@include(conexionbd);

$usuario = $_POST['login'];
$pass = $_POST['password'];

//Consultamos dentro de la base de datos para comprobar si existe el usuario
$login = "SELECT * FROM USUARIO WHERE login='$usuario' and password='$pass'";
$result = $mysqli->query($login);

$contador = 0;
while( $fila = $result->fetch_row() )
{
//aqui entrara si el usuario esta en la base de datos y si es usuario normal
if($usuario == $fila[0] && $pass == $fila[1] && $fila[9] == '0' && $fila[10] == '1')
{
$contador++;

$_SESSION['name'] = $usuario;
$_SESSION['user'] = "usuario";
$_SESSION['privilegio'] = 0;
header("Location: ../usuario/index.php");
exit;
}

//entra si esta en la base de datos y si es administrador
else if($usuario == $fila[0] && $pass == $fila[1] && $fila[9] == '1' && $fila[10] == '1')
{
$contador++;

//la variable admincantbuy se utilizara en el index de administracion para decirle al usuario que no puede comprar siendo administrador
$_SESSION['admincantbuy'] ="admincantbuy";
$_SESSION['name'] = $usuario;
$_SESSION['privilegio'] = 1;
$_SESSION['user'] = "administrador";
header("Location: ../management/index.php");
exit;
}
//si no esta en la base de datos muestra el siguiente mensaje
}
//si no esta en la base de datos muestra el siguiente mensaje
if( $contador == 0 )
{
if( $fila[10] == '0' )
{
?> <SCRIPT LANGUAGE='javascript'> alert('TU CUENTA SE ENCUENTRA SUSPENDIDA, PORFAVOR, CONTACTE CON EL ADMINISTRADOR'); </SCRIPT> <?php
}
else
{
?> <SCRIPT LANGUAGE='javascript'> alert('El usuario o password introducidos son incorrectos'); </SCRIPT> <?php
}
}
$mysqli->close();
}//cierra if empty
else
{
if(!empty($_POST['logueo']))
{
echo "<SCRIPT LANGUAGE='javascript'> alert('Porfavor, no deje en blanco ninguno de los campos'); </SCRIPT>";
}
}
}
?>



pagina management:


<?php
//definimos la ruta donde se encuentra el archiv conexion con el conectaremos con la bd para reducir codigo
define('conexionbd','../conexion/conexion.php');
?>

<HTML>

<HEAD><TITLE> Administracion </TITLE></HEAD>
<link rel='stylesheet' type='text/css' href='../css/recursos.css'>

<BODY>
<?php
session_set_cookie_params('300');
session_start();

if(!empty($_SESSION['admincantbuy']))
{
unset($_SESSION['admincantbuy']);
?> <SCRIPT LANGUAGE='javascript'> alert('NO PUEDES COMPRAR SIENDO ADMINISTRADOR, PORFAVOR HAZTE UN USUARIO NORMAL'); </SCRIPT> <?php
}

if(!empty($_SESSION['user']) && !empty($_SESSION['name']))
{
if($_SESSION['user'] == 'administrador')
{
?>

<!-- CUERPO -->
<DIV class='contenedor'>

<!-- LOGO PRINCIPAL -->
<?php
@include("includes/baner.php");
?>


<!-- SECCION IZQUIERDA -->
<?php
@include("includes/seccion_izquierda.php");
?>


<!-- SECCION CENTRO -->
<DIV CLASS='centro'>
<DIV CLASS='menu'>

<?php

if(empty($_GET['page']))
{
@include("includes/centro/newarticulo.php");
}
else
{
$page = $_GET['page'];
@include("includes/centro/".$page.".php");
}

?>
</DIV>
</DIV>

<!-- SECCION DERECHA -->
<?php
@include("includes/seccion_derecha.php");
?>

</DIV>

<?php

}
else
{
header("Location: ../errores/error.php?error=2");
}

}
else
{
header("Location: ../errores/error.php?error=2");
}



?>
</BODY>

</HTML>





como podeis ver cuando detecta que el usuario es administrador y te va a reenviar a la pagina del administrador he tenido que crear una variable de sesion llamada admincantbuy porque el alert no me funcionaba y lo he hecho para alertar al administrador que el no puede comprar.

espero haber aclarado un poco mas el tema y no haberlo liado mas :p espero vuestras respuestas !! saludosss






EDITO: Nose que he tocado pero ahora me pasa el carrito de la compra de la pagina del invitado al usuario registrado, sin embargo la variable esa nueva que he creado (admin cant buy) no me funciona, me dice que esta vacia... nose pero no le veo mucha estabilidad a esto... si me funciona ahora kizas dentro de 5 minutos ya no vaya....

Última edición por veronica21; 04/06/2010 a las 16:34
  #14 (permalink)  
Antiguo 04/06/2010, 17:50
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problema con variable de sesion

La verdad me extraña que te funcione, incluso a medias, porque estas enviando contenido HTML mucho antes de session_start() y no entiendo como es que despues de todo eso aun te pueda funcionar alguna redireccion, porque los encabezados (header) deben ser lo primero que recibe el navegador (despues de haber habilitado sesiones), de otra forma... el resultado es impredecible.

Como te comentaba en mi mensaje anterior, debes modificar tu script para que tenga la estructura que te sugiero ahi y acabes definitivamente con todos los problemas que tienes.
__________________
- León, Guanajuato
- GV-Foto
  #15 (permalink)  
Antiguo 04/06/2010, 19:15
 
Fecha de Ingreso: junio-2009
Mensajes: 103
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema con variable de sesion

hola triby, la verdad esque no te entendi muy bien la primera vez con las prisas no lei tu ejemplo...

ya he puesto todo el html despues del php.. la session_start en primera posicion y despues los headers pero nada, sigo igual que antes, ahora mismo me funciona el carrito de la compra pero no la variable esa para que avise al administrador de que no puede comprar.

por cierto hay algun problema con que los metas vayan al final de la pagina despues del php? resta algo su funcionalidad?

saludos y gracias
  #16 (permalink)  
Antiguo 04/06/2010, 20:31
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problema con variable de sesion

Necesitas colocar tu codigo para saber como quedo actualmente.

En cuanto a las etiquetas meta, no importa en que parte del PHP las pongas, lo que realmente importa es que en la salida HTML generada tenga la estructura adecuada y esas etiquetas queden entre <head> y </head>
__________________
- León, Guanajuato
- GV-Foto
  #17 (permalink)  
Antiguo 05/06/2010, 04:02
 
Fecha de Ingreso: junio-2009
Mensajes: 103
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema con variable de sesion

Bueno pues asi queda ahora la estructura:




login o registrate:

<?php

if( !empty($_POST['logueo']) )
{
if(!empty($_POST['logueo']) && !empty($_POST['login']) && !empty($_POST['password']))
{
//conexion bd
@include(conexionbd);

$usuario = $_POST['login'];
$pass = $_POST['password'];

//Consultamos dentro de la base de datos para comprobar si existe el usuario
$login = "SELECT * FROM USUARIO WHERE login='$usuario' and password='$pass'";
$result = $mysqli->query($login);

$contador = 0;
while( $fila = $result->fetch_row() )
{
//aqui entrara si el usuario esta en la base de datos y si es usuario normal
if($usuario == $fila[0] && $pass == $fila[1] && $fila[9] == '0' && $fila[10] == '1')
{
$contador++;

$_SESSION['name'] = $usuario;
$_SESSION['user'] = "usuario";
$_SESSION['privilegio'] = 0;
header("Location: ../usuario/index.php?page=compra");
}

//entra si esta en la base de datos y si es administrador
else if($usuario == $fila[0] && $pass == $fila[1] && $fila[9] == '1' && $fila[10] == '1')
{
$contador++;

//la variable admincantbuy se utilizara en el index de administracion para decirle al usuario que no puede comprar siendo administrador
$_SESSION['admincantbuy'] ="admincantbuy";
$_SESSION['name'] = $usuario;
$_SESSION['privilegio'] = 1;
$_SESSION['user'] = "administrador";
header("Location: ../management/index.php");
exit;
}
//si no esta en la base de datos muestra el siguiente mensaje
}
//si no esta en la base de datos muestra el siguiente mensaje
if( $contador == 0 )
{
if( $fila[10] == '0' )
{
?> <SCRIPT LANGUAGE='javascript'> alert('TU CUENTA SE ENCUENTRA SUSPENDIDA, PORFAVOR, CONTACTE CON EL ADMINISTRADOR'); </SCRIPT> <?php
}
else
{
?> <SCRIPT LANGUAGE='javascript'> alert('El usuario o password introducidos son incorrectos'); </SCRIPT> <?php
}
}
$mysqli->close();
}//cierra if empty
else
{
if(!empty($_POST['logueo']))
{
echo "<SCRIPT LANGUAGE='javascript'> alert('Porfavor, no deje en blanco ninguno de los campos'); </SCRIPT>";
}
}
}
?>

<STYLE>
.wrapper
{
margin: 1em;
}
.contenedor_login
{
width: 43%;
border: 1px solid black;
border-radius: 5px;
-moz-border-radius: 4.5px;
float:right;
padding: 1em;
}
.tituloo
{
font-weight:bold;
border-bottom: 1px solid black;
margin-bottom: 1em;
}
.contenedor_registrate
{
width: 45%;
border: 1px solid black;
border-radius: 5px;
-moz-border-radius: 4.5px;
float:right;
margin-right: 0.5em;
padding: 1em;
}

</STYLE>



<!-- LOGIN -->
<DIV class='titulo'> LOGIN </DIV>
<DIV CLASS='wrapper'>
<DIV CLASS='contenedor_login'>
<DIV CLASS='tituloo'> YA ERES USUARI@ REGISTRAD@? </DIV>

<FORM METHOD='POST'>
LOGIN: <BR><INPUT TYPE='TEXT' NAME='login' SIZE='14'><BR>
CONTRASEÑA: <BR><INPUT TYPE='password' NAME='password' SIZE='14'><BR>
<IMG SRC=../photoshop/registro.jpg width=50px height=50px alt='registrate'><INPUT TYPE='SUBMIT' NAME='logueo' VALUE='Enviar'><BR>
</FORM>

</DIV>




<!-- REGISTRATE -->
<DIV CLASS='contenedor_registrate'>
<DIV CLASS='tituloo'> CREA TU CUENTA </DIV>
Soy nuev@ client@ y quiero crear mi nueva cuenta.

Al crear una cuenta en <B>Doitfast</B> podrás realizar tus compras cómodamente y de forma fácil<br>
<FONT COLOR='red'><A HREF='index.php?page=registrate' style={border:none;}>Pulsa aquí para crear tu cuenta</A> </FONT>

</DIV>


<!-- CIERRA WRAPPER -->
</DIV>






mangement:


<?php
session_start();


//definimos la ruta donde se encuentra el archiv conexion con el conectaremos con la bd para reducir codigo
define('conexionbd','../conexion/conexion.php');



if(!empty($_SESSION['admincantbuy']))
{
unset($_SESSION['admincantbuy']);
?> <SCRIPT LANGUAGE='javascript'> alert('NO PUEDES COMPRAR SIENDO ADMINISTRADOR, PORFAVOR HAZTE UN USUARIO NORMAL'); </SCRIPT> <?php
}

if(!empty($_SESSION['user']) && !empty($_SESSION['name']))
{
if($_SESSION['user'] == 'administrador')
{
?>

<!-- CUERPO -->
<DIV class='contenedor'>

<!-- LOGO PRINCIPAL -->
<?php
@include("includes/baner.php");
?>


<!-- SECCION IZQUIERDA -->
<?php
@include("includes/seccion_izquierda.php");
?>


<!-- SECCION CENTRO -->
<DIV CLASS='centro'>
<DIV CLASS='menu'>

<?php

if(empty($_GET['page']))
{
@include("includes/centro/newarticulo.php");
}
else
{
$page = $_GET['page'];
@include("includes/centro/".$page.".php");
}

?>
</DIV>
</DIV>

<!-- SECCION DERECHA -->
<?php
@include("includes/seccion_derecha.php");
?>

</DIV>

<?php

}
else
{
header("Location: ../errores/error.php?error=2");
}

}
else
{
header("Location: ../errores/error.php?error=2");
}



?>
<HTML>

<HEAD>

<TITLE> Administracion </TITLE>
<link rel='stylesheet' type='text/css' href='../css/recursos.css'>
<link rel='stylesheet' type='text/css' href='../css/articulos_carrito.css'>


</HEAD>

</HTML>
  #18 (permalink)  
Antiguo 05/06/2010, 12:05
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problema con variable de sesion

Ok, en login o registrate creo que falta session_start(); que debe ser la primera linea, debajo de <?php... fuera de eso, solo tendrias algunos problemas con el HTML, porque no veo apertura ni cierre de <html>, <head> y <body>... teniendo en cuenta que <style>...</style> debe estar entre <head> y </head>
__________________
- León, Guanajuato
- GV-Foto
  #19 (permalink)  
Antiguo 05/06/2010, 12:32
 
Fecha de Ingreso: junio-2009
Mensajes: 103
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema con variable de sesion

esque login o registrate es un archivo que va incluido en el index de guest - invitado y alli si que tengo el session_start, por otro lado se podria meter la etiqueta de html y body debajo del session_start() con un echo sin que fastidie ni los header ni nada??

aqui te pongo el index del guest donde tengo el session_start();



index guest





<?php
@session_start();
//definimos la ruta donde se encuentra el archiv conexion con el conectaremos con la bd para reducir codigo
define('conexionbd','../conexion/conexion.php');

if(!empty($_SESSION['user']) && !empty($_SESSION['name']))
{
if($_SESSION['user'] == 'usuario')
{
header("Location: ../usuario/index.php");
exit;
}
else if($_SESSION['user'] == 'administrador')
{
header("Location: ../management/index.php");
exit;
}
}
else
{
//definimos el usuario, en este caso invitado
$_SESSION['user'] = "invitado";
?>

<!-- CUERPO -->
<DIV class='contenedor'>

<!-- LOGO PRINCIPAL -->
<?php
@include("includes/baner.php");
?>


<!-- SECCION IZQUIERDA -->
<?php
@include("includes/seccion_izquierda.php");
?>


<!-- SECCION CENTRO -->
<DIV CLASS='centro'>

<?php


if( empty($_GET['tipoarticulo']) && empty($_GET['categoria']) && empty($_GET['nom']) )
{
if( empty($_GET['page']) )
{
@include("includes/centro/noticia.php");
}
else
{
$page = $_GET['page'];
@include("includes/centro/".$page.".php");
}
}
else
{
@include("includes/centro/articulos.php");
}

?>

</DIV>

<!-- SECCION DERECHA -->
<?php
@include("includes/seccion_derecha.php");
?>

<?php
echo "</DIV>";
echo "</HTML>";

}//cierra else
?>

<HTML>
<HEAD><TITLE> Haz tus compras </TITLE>
<link rel=stylesheet type=text/css href=../css/recursos.css>
<link rel=stylesheet type=text/css href=../css/noticias.css>
<link rel=stylesheet type=text/css href=../css/articulos_carrito.css>
<link rel=stylesheet type=text/css href=../css/carrito_compra.css>
</HEAD>
</HTML>


el login o registrate se carga en el div class='centro', saludos
  #20 (permalink)  
Antiguo 05/06/2010, 12:40
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problema con variable de sesion

header() no funciona (no deberia funcionar) si ya enviaste contenido al navegador. Creo que tal vez deberias considerar algun sistema de plantillas que te permita ir armando la pagina sin enviarla al navegador y, a la vez, puedas manipular sesiones y/o encabezados en caso de ser necesario.
__________________
- León, Guanajuato
- GV-Foto
  #21 (permalink)  
Antiguo 05/06/2010, 22:49
 
Fecha de Ingreso: junio-2009
Mensajes: 103
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema con variable de sesion

pero en realidad me redirige, luego el header cumple su funcion, el problema esque se pierde el valor de algunas variables de sesion...

lo que me propones no sabria como hacerlo, saludos
  #22 (permalink)  
Antiguo 06/06/2010, 20:58
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problema con variable de sesion

Hace tiempo hice un ejemplo de webs modulares, puede servirte como idea para evitar enviar contenido antes de manipular sesiones y encabezados. http://www.forosdelweb.com/f18/aport...ulares-681437/
__________________
- León, Guanajuato
- GV-Foto
  #23 (permalink)  
Antiguo 08/06/2010, 09:37
 
Fecha de Ingreso: junio-2009
Mensajes: 103
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema con variable de sesion

ok, gracias por tu ayuda y paciencia

Etiquetas: variables
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 13:09.