Foros del Web » Programando para Internet » PHP »

Variables en objeto SESSION

Estas en el tema de Variables en objeto SESSION en el foro de PHP en Foros del Web. Hola a todos! Estoy intentando incrementar el valor de una de las variables que tengo definidas en el objeto SESSION pero no hay manera. Dicha ...
  #1 (permalink)  
Antiguo 02/01/2013, 09:36
 
Fecha de Ingreso: octubre-2010
Mensajes: 88
Antigüedad: 13 años, 6 meses
Puntos: 1
Variables en objeto SESSION

Hola a todos!
Estoy intentando incrementar el valor de una de las variables que tengo definidas en el objeto SESSION pero no hay manera. Dicha variable tiene que incrementarse en uno siempre que el usuario haya hecho menos de cinco clics en las celdas que tengo definidas en la pag. principal
A ver si podéis echarme una mano.
Al principio de la página principal creo la sesión si no existe y también las variables.
Código PHP:
<html>
    
    <?
        session_start
();
        require(
"entradas.php");
        
$datosPelicula= new entradas;         
        if (
session_id()!= "SesionCurso")
            
session_id ("SesionCurso");
        if (
session_is_registered("usuario")==false)
                
session_register('usuario');        
        if (
session_is_registered("reservas")== false){
            
session_register('reservas');}
            
        
$_SESSION["usuario"]="veronica";
        
$_SESSION["reservas"]=0;
>?
Las celdas las tengo definidas con href llamando de nuevo a la misma pagina y paso la posición de la celda seleccionada en la url. Y lo hago de la siguiente manera:
Código PHP:
<td class="ValorCero"><a href="Index.php?posicion= <? echo $i.-$m ?>&resul= <? echo $CadePelis[$m]?>">
                                <img width="18" height="10" border="0" src="1px.gif"></a></td>
Recupero la posicion utilizando GET y dependiendo del valor de la celda hago lo que corresponda.
La primera vez que hago clic en una celda, si que me incrementa el valor de la variable "reservas" y me pone 1. Pero los siguientes clics no aumentan el valor de la variable "reservas" y siempre se queda con 1.
A ver si me podéis ayudar, porque no encuentro donde tengo el error.

Código PHP:
if (isset($_GET["posicion"])){
        
$posicion$_GET["posicion"];
        
$resul$_GET["resul"];         
        switch (
$resul) {
            case 
0:               
                  if(
$_SESSION["reservas"] < && $_SESSION["usuario"]=="veronica")
                  {   
                      
$_SESSION["reservas"]+=1
                      
//echo $_SESSION["reservas"].$_SESSION["usuario"];
                      
$datosPelicula->BuscarCasilla($posicion,$resul,false); 
                      echo 
"<p> <h4 align=center> <FONT color=red> Gracias por comprar en este cine.</FONT> </h4>";                
                      break;
                  }
                  else{ 
                      
                    echo 
"<p> <h4 align=center> <FONT color=red> S&oacute;lo se permite comprar un m&aacute;ximo de cinco entradas.</FONT> </h4>";                
                    break;}
                                
            case 
1:
                echo 
"<p> <h4 align=center> <FONT color=red> Este asiento ya est&aacute; reservado por otro cliente.</FONT> </h4>";
                break;
            case 
2:
                 if (
$_SESSION["usuario"]=="veronica" && $_SESSION["reservas"]> 0)
                        {
$_SESSION["reservas"]-=1;
                        
$datosPelicula->BuscarCasilla($posicion$resul,true);
                        echo 
"<p> <h4 align=center> <FONT color=red> Gracias por devolver la entrada de este cine.</FONT> </h4>";
                        break;
                 }
        }  
      } 
Gracias por adelantado
  #2 (permalink)  
Antiguo 02/01/2013, 12:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Variables en objeto SESSION

1. El inicio de sesión así como cabeceras y cookies debe hacerse antes de todo, y en tu primer script lo haces después de un poco de HTML, eso está mal.
2. En el script que usa la sesión también debes iniciarla al inicio de todo, pero en el script que muestras no se ve nada de eso.

A todo esto, ¿ya consulta el manual? ¿ya hiciste algún ejercicio del manual?

PDTA: aparentemente tu código de sesiones es viejo, deberías leer el manual para actualizarte.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 02/01/2013, 12:29
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 14 años, 5 meses
Puntos: 168
Respuesta: Variables en objeto SESSION

Como dice peteketrueke hay que actualizarse, http://php.net/manual/es/function.se...registered.php lee lo que dice ahí, está obsoleta esa función.
Y session_start es lo 1ero que debe ir en el archivo, en la línea 1
  #4 (permalink)  
Antiguo 02/01/2013, 12:30
 
Fecha de Ingreso: octubre-2010
Mensajes: 88
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Variables en objeto SESSION

¿Mi codigo de sesiones es viejo? Pues no se, en el curso que estoy haciendo la sintaxis es así.
También he visto bastantes ejemplos antes de escribir aquí y eran así, así que no se a que te refieres exactamente.
¿Me puedes decir donde está ese manual?
Gracias de nuevo
  #5 (permalink)  
Antiguo 02/01/2013, 12:33
 
Fecha de Ingreso: octubre-2010
Mensajes: 88
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Variables en objeto SESSION

Cita:
Iniciado por rodrigo791 Ver Mensaje
Como dice peteketrueke hay que actualizarse, http://php.net/manual/es/function.se...registered.php lee lo que dice ahí, está obsoleta esa función.
Y session_start es lo 1ero que debe ir en el archivo, en la línea 1
Miraré el manual que me indicas.
Gracias
  #6 (permalink)  
Antiguo 02/01/2013, 12:45
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 14 años, 5 meses
Puntos: 168
Respuesta: Variables en objeto SESSION

sesiones
acá tenes todas las funciones sobre el control de sesiones, solo fijate en cada una a ver cuales estan obsoletas y cuales no.
Código PHP:
Ver original
  1. if (session_is_registered("usuario")==false)

para este caso por ejemplo cambias lo anterior por esto siguiente:
Código PHP:
Ver original
  1. if(isset($_SESSION['usuario'])){
  2. //codigo
  3. }
  #7 (permalink)  
Antiguo 02/01/2013, 13:19
 
Fecha de Ingreso: octubre-2010
Mensajes: 88
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Variables en objeto SESSION

Gracias Rodrigo, he modificado el código de la siguiente manera:

Código PHP:
 <?
       session_start
();               
        if (
session_id()!= "SesionCurso")
            
session_id ("SesionCurso");
        
        if (!isset(
$_SESSION["usuario"]))
                
$_SESSION["usuario"]="veronica";        
        if (!isset(
$_SESSION["reservas"])){
            
$_SESSION["reservas"]=0;
        }
        
        require(
"entradas.php");
        
$datosPelicula= new entradas

    
?>
    <html>
    <head>
Más abajo, en la misma página principal tengo el siguiente código.

Código PHP:
 <?php         
             
       
if (isset($_GET["posicion"])){
        
$posicion$_GET["posicion"];
        
$resul$_GET["resul"];         
        switch (
$resul) {
            case 
0
                    
$lSvar=$datosPelicula->BuscarCasilla($posicion,$resul,false); 
                    if (
$lSvar== true){
                        echo 
"<p> <h4 align=center> <FONT color=red> Gracias por comprar en este cine.</FONT> </h4>";                
                    }                  
                    else{ 
                        echo 
"<p> <h4 align=center> <FONT color=red> S&oacute;lo se permite comprar un m&aacute;ximo de cinco entradas.</FONT> </h4>";                
                    }
                    break;
                                
            case 
1:
                echo 
"<p> <h4 align=center> <FONT color=red> Este asiento ya est&aacute; reservado por otro cliente.</FONT> </h4>";
                break;
            case 
2:
                   
$lvar2$datosPelicula->BuscarCasilla($posicion$resul,true);
                   if (
$lvar2== true){
                        echo 
"<p> <h4 align=center> <FONT color=red> Gracias por devolver la entrada de este cine.</FONT> </h4>";
                   }
                   break;
        }  
      }
       
      
?>
Y la función BuscarCasilla que está en una clase, es la que supuestamente debe incrementar o decrementar la variable. Pero no funciona bien, ya que siempre tiene el valor 1.

Código PHP:
function BuscarCasilla($posicion$valor$devolvemos){       
        
//Si devolvemos =false, es porque estamos comprando.
       
       
$datosexplode("-",$posicion);
       
$fila = (int)$datos[0];
       
$columna=(int) $datos[1];      
       if (
$devolvemos== false){ // Es porque nos llega un cero y estamos reservando poniendo un 2 (naranja)           
          
if($_SESSION["reservas"] < && $_SESSION["usuario"]=="veronica"){ 
              
$_SESSION["reservas"]+=1
              
$this->registros[$fila][$columna]=2;   
              
array_values($this->registros); 
              
$this->GrabarEnFich(); 
              return 
true;
          }
          else
              return 
false;
       }
       else{
           
// Es porque nos llega un 1 y estamos devolviendo y ponemos un 0 (libre)
           
if($_SESSION["reservas"] >&& $_SESSION["usuario"]=="veronica"){
            
$this->registros[$fila][$columna]=0;
            
array_values($this->registros); 
            
$this->GrabarEnFich();
            
$_SESSION["reservas"]-=1;
            return 
true;}
      }
    } 
  #8 (permalink)  
Antiguo 02/01/2013, 15:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Variables en objeto SESSION

La función session_start() debes usarla en todas las paginas donde uses la sesión, me parece que esa parte es la que no haces.

Inclusive el código que define o actualiza variables de sesión debe ejecutarse antes de imprimir algo, del mismo modo que session_start().
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 02/01/2013, 15:35
 
Fecha de Ingreso: octubre-2010
Mensajes: 88
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Variables en objeto SESSION

Pateketrueke pues efectivamente en la clase no he puesto la llamada a la función session_start() porque me aparece el siguiente error:

Notice: A session had already been started - ignoring session_start() in C:\cursophp\........
He probado poniendo la llamada al principio de la clase, en la propia función donde intento modificar el valor de la variable "reservas", en el constructor y en todos estos casos me aparece el mismo error.

¿Donde debería ponerlo?
  #10 (permalink)  
Antiguo 02/01/2013, 16:04
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Variables en objeto SESSION

Pero debe hacerse en cada request, no en cada archivo, por ejemplo si tienes un archivo de configuración que cargas siempre puedes ponerlo ahí.

El punto es que la sesión sólo debe iniciarse una vez y antes de todo, piensa un poco en ello.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: html, objeto, session, variables, usuarios
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 01:32.