Foros del Web » Programando para Internet » PHP »

Fatal error: Cannot unset string offsets in...

Estas en el tema de Fatal error: Cannot unset string offsets in... en el foro de PHP en Foros del Web. hola me esta pasando ese error, la verdad toy buscando informacion y no encuentro ayuda. lo que pasa es que al añadir un producto con ...
  #1 (permalink)  
Antiguo 30/05/2011, 18:26
 
Fecha de Ingreso: noviembre-2010
Mensajes: 100
Antigüedad: 14 años
Puntos: 0
Pregunta Fatal error: Cannot unset string offsets in...

hola me esta pasando ese error, la verdad toy buscando informacion y no encuentro ayuda.


lo que pasa es que al añadir un producto con ajax, pues ahi mando a un array, y ahi es donde sale el problema y luego cada ves q intento usar una sesion me sale eso y ya no puedo seguir

pongo el codigo del agregar producto que hace que esto se malogre todo


Código PHP:
if($_GET['opcion']=="anadir_prod2")
{
    
    
$codigo=$_GET['prod_id'];
    
$nombre=$_GET['producto'];
    
$cant=$_GET['cant'];    
    
//$descuento=$_GET['descuento'];
    //$seriado=$_GET['seriado'];
    //$tiene_igv=$_GET['igv'];
    
$precio2=$_GET['precio'];
    
$precio=round($precio2,2);
    
//$subtotal=round(($cant*$precio)-(($cant*$precio)*($descuento/100)),4);    
    
$subtotal=round(($cant*$precio),2);
    
    
    if (
count($_SESSION['usuario']['carrito'])==0)
    {
            
$_SESSION['usuario']['carrito'][]=array('codigo'=>$codigo,'nombre'=>$nombre,'cantidad'=>$cant,'precio'=>$precio,'subtotal'=>$subtotal); 
            echo 
"codigo $codigo, nombre $nombre, cantidad $cant, precio $precio, subtotal $subtotal";
            
//mostrar_tabla2("",$cod_rep);
    
}
    else
    {
        if(
count($_SESSION['usuario']['carrito'])<11)//solo 11 productos para el detalle
        
{
            
//para ver que no haya insumos repetidos
            
for($i=0;$i<count($_SESSION['usuario']['carrito']);$i++) 
            { 
                foreach (
$_SESSION['usuario']['carrito'][$i] as $k => $v
                { 
                    if(
$k=='codigo')
                        
$cod=$v;    
                }
                if (
$cod==$codigo)
                {
                    
$repetido=$repetido+1;
                }
            }
            if (
$repetido==0)
            {
                
$_SESSION['usuario']['carrito'][]=array('codigo'=>$codigo,'nombre'=>$nombre,'cantidad'=>$cant,'precio'=>$precio,'subtotal'=>$subtotal); 
                
mostrar_tabla2("",$cod_rep);
            }
            else
            {
                echo
"<img src='images/warning.png' width='28'>  El Producto $nombre ya se encuentra en lista, modifiquelo ";    
                
$cod_rep=$codigo;
                
mostrar_tabla2("",$cod_rep);
            }
        }
        else
        {
            
$warning="warning";
            
mostrar_tabla2($warning,$cod_rep);
        }
    }
    exit();

  #2 (permalink)  
Antiguo 30/05/2011, 18:27
 
Fecha de Ingreso: noviembre-2010
Mensajes: 100
Antigüedad: 14 años
Puntos: 0
Respuesta: Fatal error: Cannot unset string offsets in...

en el 2do if hice esto:

echo "codigo $codigo, nombre $nombre, cantidad $cant, precio $precio, subtotal $subtotal";
//mostrar_tabla2("",$cod_rep);


para ver donde es el problema, y pues resulta que es al agregar
en la siguiente linea

$_SESSION['usuario']['carrito'][]=array('codigo'=>$codigo,'nombre'=>$nombre,'cantid ad'=>$cant,'precio'=>$precio,'subtotal'=>$subtotal );

pero no secual, xq todas las variables dan bien :S..

y ademas que hago algo parecido en otras funciones y normal si llena la sesion (carrito)
  #3 (permalink)  
Antiguo 30/05/2011, 19:02
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: Fatal error: Cannot unset string offsets in...

Podria ser que $_SESSION['usuario']['carrito'] no esta definida o no es array?

Cita:
Manual de PHP para count()

count() quizá devuelve 0 si la variable no está establecida, pero también devolverá 0 si la variable ha sido iniciada con un array vacío. Use isset() para probar si la variable está establecida.
Entonces, si aun no la has creado (o no es array) podria pasar que al tratar de agregar un elemento sea cuando obtienes el error.

Solucion:
Código PHP:
Ver original
  1. if( ! isset($_SESSION['usuario']['carrito']) || ! is_array($_SESSION['usuario']['carrito'])) {
  2.     $_SESSION['usuario']['carrito'] = array();
  3. }
  4.  
  5. // Aqui continuas con lo que estas haciendo normalmente
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 30/05/2011, 19:32
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Fatal error: Cannot unset string offsets in...

Otra es que por ningún lado veo el session_start()
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #5 (permalink)  
Antiguo 02/06/2011, 10:26
 
Fecha de Ingreso: noviembre-2010
Mensajes: 100
Antigüedad: 14 años
Puntos: 0
Respuesta: Fatal error: Cannot unset string offsets in...

ya probe con eso de poner isset y is_array..
pero nada aun no sale el error...

lo del session_start si lo coloco al inicio...

mm alguna otra sugerencia o rpta xfavor.
  #6 (permalink)  
Antiguo 02/06/2011, 15:16
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: Fatal error: Cannot unset string offsets in...

Si, averigua que es lo que tienes en el carrito:

Código PHP:
Ver original
  1. var_dump($_SESSION['usuario']['carrito']);

Cuentanos que es lo que aparece.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 02/06/2011, 20:24
 
Fecha de Ingreso: noviembre-2010
Mensajes: 100
Antigüedad: 14 años
Puntos: 0
Respuesta: Fatal error: Cannot unset string offsets in...

array(1) { [0]=> array(5) { ["codigo"]=> string(1) "3" ["nombre"]=> string(37) "DISCO DURO SEAGATE 500GB SATA 7200RPM" ["cantidad"]=> int(1) ["precio"]=> float(119.78) ["subtotal"]=> float(119.78) } }

me sale eso
  #8 (permalink)  
Antiguo 02/06/2011, 20:28
 
Fecha de Ingreso: noviembre-2010
Mensajes: 100
Antigüedad: 14 años
Puntos: 0
Respuesta: Fatal error: Cannot unset string offsets in...

array(1) { [0]=> array(2) { ["codigo"]=> string(2) "a1" ["producto"]=> string(1) "3" } }

de mi otra sesion seriado me sale eso...


mmm parece todo bien ... q opinan?
  #9 (permalink)  
Antiguo 02/06/2011, 21:43
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: Fatal error: Cannot unset string offsets in...

A ver, tratando de simplificar un poco:

Código PHP:
Ver original
  1. if($_GET['opcion']=="anadir_prod2")
  2. {
  3.     $codigo=$_GET['prod_id'];
  4.     $cant=$_GET['cant'];    
  5.     // Nombre y precio deberias obtenerlos de la base de datos, para evitar manipulacion
  6.     $nombre=$_GET['producto'];
  7.     $precio2=$_GET['precio'];
  8.     $precio=round($precio2,2);
  9.     $subtotal=round(($cant*$precio),2);
  10.  
  11.     // Suponemos que ya desde antes inicializaste $_SESSION['usuario']['carrito'] como array
  12.     if(count($_SESSION['usuario']['carrito']) > 10) {
  13.         // Ya no puedes agregar mas productos
  14.         mostrar_tabla2('warning',$codigo);
  15.         exit;
  16.     }
  17.     // No importa si es el primero o el 5 o el 11, se puede recorrer sin problema
  18.     foreach($_SESSION['usuario']['carrito'] as $item) {
  19.         if($item['codigo'] == $codigo) {
  20.             echo"<img src='images/warning.png' width='28'>  El Producto $nombre ya se encuentra en lista, modifiquelo ";    
  21.             mostrar_tabla2("",$codigo);
  22.             exit;
  23.         }
  24.     }
  25.     // Agregas en una sola instruccion, no importa si es la primera o no
  26.     $_SESSION['usuario']['carrito'][]=array('codigo'=>$codigo,'nombre'=>$nombre,'cantidad'=>$cant,'precio'=>$precio,'subtotal'=>$subtotal);
  27.     mostrar_tabla2("",$codigo);
  28. }

La principal diferencia en esto es que primero verificas todas las posibilidades de error y hasta despues usas un mismo codigo para agregar el primer producto o el ultimo.

Este codigo simplificado no garantiza que se vaya a solucionar el problema. Sugiero que elimines la sesion completamente y despues vuelves a intentar agregar productos y, si persisten las molestias, cuentanos detalladamente el error, numero de linea, codigo de esa linea y contenido de la variable (usando var_dump).
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 11/06/2011, 10:11
 
Fecha de Ingreso: noviembre-2010
Mensajes: 100
Antigüedad: 14 años
Puntos: 0
Respuesta: Fatal error: Cannot unset string offsets in...

muchas gracias..

bueno ya encontre la solucion basicamente era xq en $_SESSION['usuario'] no habia nada...

y a NADA le intentaba poner un array en el [seriado] xeso

Etiquetas: fatal, offsets, string, unset
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:01.