Ver Mensaje Individual
  #12 (permalink)  
Antiguo 22/09/2008, 12:58
ghesent
 
Fecha de Ingreso: septiembre-2008
Mensajes: 21
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Problema con $_SESSION y firefox

Bueno amigos al hacer unas pruebas encontre el problema..
Al parecer firefox, como comentaban antes, hace una doble carga de las paginas para la parte del codigo fuente, independientemente de si se usa firebug o no.
Entonces, el problema se presenta en que la segunda vez que la pagina se carga con una variable $_POST, esta ya no existe por lo que talvez lo mejor para utilizar variables importantes que van a interactuar con $_SESSION seria get, ya que esta si permanece.
Aun así, si se requiere el uso de $_POST lo mejor sera agregar algun tipo de contador rudimentario que no permita la doble carga de las variables.
Si alguien sabe de alguna forma mas sencilla de sortear este problema, porfavor compartanla porque esto me esta dando muchos dolores de cabeza.

Les comparto mi codigo para que vean como lo resolvi finalmente.

Código PHP:
if($art != "none" && $delete=="" && isset($art)){  //si si hay articulo y no se esta borrando        
        
if($_POST['opcion']!=""){ //articulo con opciones
            
$postOpcion $_POST['opcion'];
            if(
$_SESSION['cart'][$art][$postOpcion] == ""){  //si las opciones estan limpias (primer articulo del tipo)
                //$_SESSION['opciones'][$art] = $_POST['opcion'];
                
if($_POST['cantidad'] == ""){
                    
$_SESSION['cart'][$art][$postOpcion] = "1";
                } else {
                    
$_SESSION['cart'][$art][$postOpcion] = $_POST['cantidad'];
                }
            } else { 
//ya existe articulo, se esta modificando desde afuera
                
$_SESSION['cart'][$art][$postOpcion] = $_POST['cantidad'];
            }    
        } else if(
$_POST['opcion']=="" && count($_SESSION['cart'][$art])==0) {
            if(
$_POST['cantidad'] == ""){
                
$_SESSION['cart'][$art]['*'] = "1";
            } else if(isset(
$_POST['cantidad'])){
                
$_SESSION['cart'][$art]['*'] = $_POST['cantidad'];
            }
        }
    } else if(
$delete != ""){
        if(
$_GET['opciones'] == ""){ //producto normal
            
unset($_SESSION['cart'][$delete]);
        } else { 
//producto con opciones
            
$getOpciones $_GET['opciones'];
            unset(
$_SESSION['cart'][$delete][$getOpciones]);
        }        
    }
    
    if(
$_GET['update']==1){
        foreach(
$_POST as $index => $value){
            
$pos strpos($index,"-");
            if(
$pos === false){ //si no hay separador que indica opcion
                
$_SESSION['cart'][$index]['*'] = $value;
            } else {
                
$ex explode("-",$index);
                
$_SESSION['cart'][$ex[0]][$ex[1]] = $value;
            }
        }
    }
    
print_r($_SESSION['cart']);
?> 
Si ven la siguiente linea:
Código PHP:
} else if($_POST['opcion']=="" && count($_SESSION['cart'][$art])==0) { 
Tuve que agregar al if un contador de el array para ver que no se estuviera duplicando la recarga de la pagina
ya que me agregaba un articulo vacio y sin datos.

Última edición por ghesent; 22/09/2008 a las 13:00 Razón: Agregando explicacion