Foros del Web » Programando para Internet » PHP »

Pierdo variable guardada en $_SESSION

Estas en el tema de Pierdo variable guardada en $_SESSION en el foro de PHP en Foros del Web. Estoy empezando en esto de php, y estoy haciendo el curso de Aula Mentor de php básico. He llegado a un ejercicio en el que ...
  #1 (permalink)  
Antiguo 04/06/2012, 04:56
 
Fecha de Ingreso: febrero-2010
Mensajes: 24
Antigüedad: 14 años, 9 meses
Puntos: 0
Pierdo variable guardada en $_SESSION

Estoy empezando en esto de php, y estoy haciendo el curso de Aula Mentor de php básico. He llegado a un ejercicio en el que hay que llevar el control de la compra de los asientos de un cine y controlar que se pueden comprar y devolver las entradas que has comprado en la misma sesión.

Lo que hago yo es guardar en $_SESSION un contador de entradas (máximo se pueden comprar 5 por sesión) y también voy guardando las localidades que se van comprando en esa sesión:

Código PHP:
$_SESSION["contador"]++;
$_SESSION[$fila][$columna] = 1
Después de comprar una localidad guardo en la variable $_SESSION la butaca comprada pero luego no se gudarda, sólo se guarda la variable $_SESSION["contador"], la localización de las butacas no, por lo que cuando voy a devolverla no puedo.

¿Alguien me puede decir qué hago mal y porqué no se guarda la línea $_SESSION[$fila][$columna] = 1;?

Gracias anticipadas y un saludo
  #2 (permalink)  
Antiguo 04/06/2012, 05:05
 
Fecha de Ingreso: agosto-2011
Ubicación: Santo Domingo
Mensajes: 487
Antigüedad: 13 años, 3 meses
Puntos: 31
Respuesta: Pierdo variable guardada en $_SESSION

Tienes que agregar en el parte superior de tus documentos el

$session_start();
  #3 (permalink)  
Antiguo 04/06/2012, 05:14
 
Fecha de Ingreso: febrero-2010
Mensajes: 24
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Pierdo variable guardada en $_SESSION

si si, eso ya lo tengo puesto, pongo aqui los 2 ficheros que uso, uno el principal y otro en el que está la clase:

uni5_entradas.php -> http://codepad.org/PjYSyEci
uni5_entradas_class.php-> http://codepad.org/rQe4U6ie
  #4 (permalink)  
Antiguo 04/06/2012, 05:18
 
Fecha de Ingreso: agosto-2011
Ubicación: Santo Domingo
Mensajes: 487
Antigüedad: 13 años, 3 meses
Puntos: 31
Respuesta: Pierdo variable guardada en $_SESSION

Theasker pero tienes varios errores que no son de Session
  #5 (permalink)  
Antiguo 04/06/2012, 05:23
 
Fecha de Ingreso: febrero-2010
Mensajes: 24
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Pierdo variable guardada en $_SESSION

si me sale algo como:

Notice: Unknown: Skipping numeric key 0 in Unknown on line 0

¿puede ser por eso que no guarda la última variable?
  #6 (permalink)  
Antiguo 04/06/2012, 05:28
 
Fecha de Ingreso: agosto-2011
Ubicación: Santo Domingo
Mensajes: 487
Antigüedad: 13 años, 3 meses
Puntos: 31
Respuesta: Pierdo variable guardada en $_SESSION

Si asi es, pero tambien a mi me sale error en la linea 10 debido a tu require
  #7 (permalink)  
Antiguo 04/06/2012, 05:33
 
Fecha de Ingreso: febrero-2010
Mensajes: 24
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Pierdo variable guardada en $_SESSION

porque te faltará el fichero de la clase, supongo ¿no?. Si es mejor, copio el código de los 2 fichero aqui.

como mejor me digáis.
  #8 (permalink)  
Antiguo 04/06/2012, 05:42
 
Fecha de Ingreso: agosto-2011
Ubicación: Santo Domingo
Mensajes: 487
Antigüedad: 13 años, 3 meses
Puntos: 31
Respuesta: Pierdo variable guardada en $_SESSION

Si asi es, no encuentra esos dos ficheros...
  #9 (permalink)  
Antiguo 04/06/2012, 05:51
 
Fecha de Ingreso: febrero-2010
Mensajes: 24
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Pierdo variable guardada en $_SESSION

pues los pongo aqui y arreglado

uni5_entradas.php
Código PHP:
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title></title>
    <link rel="stylesheet" type="text/css" href="uni5_entradas.css" />
  </head>
  <body>
<?php
  
require 'uni5_entradas_class.php';
  
$mi_cine = new uni5_entradas_class();
  
session_start();
  
//entramos si se ha pinchado en una localidad
  
$mensaje "";
  
//entramos cuando pulsamos en un asiento
  
if(isset($_REQUEST['estado'])){
    
$fila = (int) $_REQUEST['fila'];
    
$columna = (int) $_REQUEST['columna'];
    
//si es una nueva sesión o ha caducado en la que estábamos
    
if(!isset($_SESSION["contador"])){
      
//esto pasa cuando intentamos anular un asiento de otra sesión
      
if($_REQUEST['estado'] == 1){
        
$mensaje "Esa entrada es de otra sesión y no se puede devolver";
      }
      elseif(
$_REQUEST['estado'] == 0){
        
$_SESSION["contador"] = 1;
        
$_SESSION[$fila][$columna] = 1;
        
$mensaje "Gracias por comprar en este cine";
        
$mi_cine->cambiarestado();
      }
    }else{ 
//entra en el bucle cuando la sesión está activa
      
switch ($_REQUEST['estado']){
        case 
"0":
          
$mensaje "Gracias por comprar en este cine";
          
$_SESSION["contador"]++;
          
$_SESSION[$fila][$columna] = 1;
          
$mi_cine->cambiarestado();
          break;
        case 
"1":
          if(isset(
$_SESSION[$fila][$columna])){
            
$mensaje "Gracias por devolver la entrada";
            unset(
$_SESSION[$fila][$columna]);
            
$mi_cine->cambiarestado();
          }
          break;
      }
    }
  }
  echo 
$mensaje;
  
$mi_cine->mostrarmatriz();
  
var_dump($_REQUEST);
  
var_dump($_SESSION);
?>
  </body>
</html>
uni5_entradas_class.php

Código PHP:
<?php
class uni5_entradas_class {
  public 
$cine = array();
  public 
$directorio;
  
  function 
__construct() {
    
$this->directorio '.'//Directorio de trabajo el actual
    
$this->fichero "uni5_entradas.txt";
    
$this->ficheroamatriz();
  }
  function 
ficheroamatriz(){ 
    
chdir($this->directorio);//cambiamos el directorio activo
    //Abrimos el fichero en modo solo lectura
    
$idfich = @fopen($this->fichero"r") or die("No existe el fichero $this->fichero");
    
$temp explode("|",fgets($idfich,1024));
    
$this->cine["peli"] = array("sala"=>$temp[0],"titulo"=>$temp[1],"hora"=>$temp[2],"dia"=>$temp[3]);
    while(
$lineafgets($idfich,1024)){//leemos liena a linea
      
$this->cine[] = str_split($linea1);
    }
    
fclose($idfich);
  }
  function 
mostrarmatriz(){
    echo 
"<table>";
    for (
$fila $fila 15$fila++){
      for (
$columna $columna 20$columna++){
        
//numeracion lateral
        
if ($columna == && $fila 16) echo "<td class=\"limpio\">".($fila+1)."</td>";
        switch (
$this->cine[$fila][$columna]){
        case 
0:
          echo 
"<td class=\"verde\"><a href=uni5_entradas.php?estado=".$this->cine[$fila][$columna]."&fila=$fila&columna=$columna>__</a></td>";
          break;
        case 
1:
          if (isset(
$_SESSION[$fila][$columna])){
            echo 
"<td class=\"naranja\"><a href=uni5_entradas.php?estado=".$this->cine[$fila][$columna]."&fila=$fila&columna=$columna>__</a></td>";
          }
          else{
            echo 
"<td class=\"rojo\"><a href=uni5_entradas.php?estado=".$this->cine[$fila][$columna]."&fila=$fila&columna=$columna>__</a></td>";
          }          
          break;
        default:
          echo 
$this->cine[$fila][$columna];
        } 
      }
      echo 
"</tr>";
    }
    
// numeracion en la última fila
    
for ($columna $columna 21$columna++){
      if (
$columna == 0) echo "<td class=\"limpio\"></td>";
      else echo 
"<td class=\"limpio\">$columna</td>";
    }
    echo 
"</table>";
  }
  function 
matrizafichero(){
    
$idfich = @fopen($this->fichero"w") or die("No existe el fichero $this->fichero");
    
$texto implode("|",$this->cine["peli"]);
    
fputs($idfich,$texto,(strlen($texto)));
    for (
$fila 0$fila 15;$fila++){
      
$texto implode("",$this->cine[$fila]);
      
fputs($idfich,$texto,(strlen($texto)));
    }
    
fclose($idfich);
  }
  function 
cambiarestado(){
    
$fila = (int) $_REQUEST['fila'];
    
$columna = (int) $_REQUEST['columna'];
    switch (
$this->cine[$fila][$columna]){
      case 
0:
        
$this->cine[$fila][$columna] = 1;
        break;
      case 
1:
        
$this->cine[$fila][$columna] = 0;
        break;
    }
    
$this->matrizafichero();
  }
}
?>
uni5_entradas.css
Código CSS:
Ver original
  1. body{
  2.   background-color: #cccccc;
  3. }
  4. table{
  5.   /*border-collapse:collapse;*/
  6.   font-family: 'Courier New',Courier,monospace;
  7.   font-size: 12px;
  8. }
  9. td{
  10.   border-right-style: solid;
  11.   border-left-style: solid;
  12.   /*border-bottom-style: solid;*/
  13.   border-top-style: solid;
  14.   border-right-width: 1px;
  15.   border-left-width: 1px;
  16.   border-bottom-width: 1px;
  17.   border-top-width: 1px;
  18. }
  19. .verde{
  20.   background-color: greenyellow;
  21. }
  22. .naranja{
  23.   background-color: orange;
  24. }
  25. .rojo{
  26.   background-color: red;
  27. }
  28. .limpio{
  29.   border-right-style: none;
  30.   border-left-style: none;
  31.   border-bottom-style: none;
  32.   border-top-style: none;
  33.   text-align: center;
  34. }

Última edición por Theasker; 04/06/2012 a las 05:59
  #10 (permalink)  
Antiguo 04/06/2012, 07:40
 
Fecha de Ingreso: febrero-2010
Mensajes: 24
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Pierdo variable guardada en $_SESSION

Ya lo he arreglado, el problema del error

Notice: Unknown: Skipping numeric key 0

era que al poner $_SESSION[$fila][$columna] cuando $fila o $columna su valor era 0 ó 1 lo tomaba como "true" o "false" no como números enteros.

Lo he arreglado poniendo una matriz de 3 dimensiones $_SESSION["asientos"][$fila][$columna], dejando siempre fija la primera dimension ("asientos").

Gracias de todas formas por vuestra preocupación, pero no os preocupéis que seguiré preguntándoos.

Etiquetas: pierdo, session, 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 11:42.