Foros del Web » Programando para Internet » PHP »

Crear array con register globlas off

Estas en el tema de Crear array con register globlas off en el foro de PHP en Foros del Web. Hola. He conseguido adaptar la web para que funcione con register_globals OFF, pero hay una parte que no va bien. Este funcionaba perfecto con Globlals ...
  #1 (permalink)  
Antiguo 21/03/2009, 15:06
 
Fecha de Ingreso: enero-2009
Ubicación: Valencia (España)
Mensajes: 29
Antigüedad: 11 años, 4 meses
Puntos: 1
Crear array con register globlas off

Hola.

He conseguido adaptar la web para que funcione con register_globals OFF, pero hay una parte que no va bien.

Este funcionaba perfecto con Globlals en ON:

Código PHP:
<?
  
include ('book_sc_fns.php');
  
// El carrito de compra necesita sesiones, así que iniciar una.
  
session_start();

  if(
$new)
  {
    
//nuevo artículo seleccionado
    
if(!session_is_registered("cart"))
    {
      
$cart = array();
      
session_register("cart");
      
$items 0;
      
session_register("items");
      
$total_price "0.00";
      
session_register("total_price");
    }
    if(
$cart[$new])
      
$cart[$new]++;
    else
      
$cart[$new] = 1;
    
$total_price calculate_price($cart);
    
$items calculate_items($cart);

  }

Y ahora, con Globals en OFF, aunque le he añadido después del "sesion_start()" la "recogida" de la variable:
Código PHP:
$new=$_GET["new"
Ya no funciona. Me recoge el primer valor y lo añade al carrito ($cart), pero cuando añado el siguiente producto, NO LO SUMA, lo sobrescribe......

Veo claro que no reconoce esta parte del script:

Código PHP:
if($cart[$new])
      
$cart[$new]++;
    else
      
$cart[$new] = 1
Pero no entiendo por qué....... sobre todo por que cuando más adelante, le pido un echo de $new, y un print_r de $cart, ME DEVUELVE EL VALOR CORRECTAMENTE de ambos........


He tratado de actualizar el script con las funciones "correctas", y ha quedado así:

Código PHP:
<?
  
include ('book_sc_fns.php');
  
// El carrito de compra necesita sesiones, así que empezar una
  
session_start();

 
// recuperar categorías de la base de datos
  
 
$new=$_GET["new"];
 
$cart=$_SESSION["cart"];
 
  if(
$new)
  {
    
//nuevo artículo seleccionado
    
     
if(!isset($cart))
      
$_SESSION["cart"];
      
$_SESSION["items"] = 0;
      
$_SESSION["total_price"] = "0.00";
      
                
    if(isset(
$cart[$new]))
      { 
$cart[$new]= 9;  }
    else
     { 
$cart[$new] = ;  }
     
    
$total_price calculate_price($cart);
    
$items calculate_items($cart);

  }
Pero tampoco funciona. Hace LO MISMO QUE EL "ANTIGUO"...... NO HACE LA SUMA correspondiente.

Lo que NO tengo claro es donde he puesto "$cart=$_SESSION["cart"];".... Hago esa "llamada" para que tenga obtenga el valor de $cart cuando no existe $new, pero no sé si está bien...... Desde luego, si no lo pongo, el carro ni siquiera coge el primer valor (producto).....

¿ALGUNA IDEA DE LO QUE PUEDE OCURRIR?

Gracias a todos.

Última edición por parriman; 21/03/2009 a las 15:15 Razón: Error de script
  #2 (permalink)  
Antiguo 21/03/2009, 15:13
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.712
Antigüedad: 15 años, 1 mes
Puntos: 836
Respuesta: Crear array con register globlas off

Debes recuperar el valor de la sesión así:
Código php:
Ver original
  1. $cart = $_SESSION['cart'];
Además, en ninguna parte veo de dónde sale $save.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 21/03/2009, 16:02
 
Fecha de Ingreso: enero-2009
Ubicación: Valencia (España)
Mensajes: 29
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Crear array con register globlas off

Hola David.

Has sido muy rápido...... y has contestado antes de que quitase la parte de $save........ eso creo que no influye...... De todas formas, por si te da curiosidad, salía de un form posterior, que si exitía $save, hacía cambios en el carrito....

De lo de recuperar el valor de la sesión de $cart...

¿cual es la diferenia entre lo que me dices tú y lo que he puesto yo?

¿los espacios, tal vez? ¿o es por las comillas? Voy a probar ambas cosas....

¿ves bien ubicada la recuperación de la sesion ahí?

Gracias por tu ayuda.
  #4 (permalink)  
Antiguo 21/03/2009, 17:48
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.712
Antigüedad: 15 años, 1 mes
Puntos: 836
Respuesta: Crear array con register globlas off

Uno de los posibles problemas es esta parte del código:
Código php:
Ver original
  1. if(!isset($cart))
  2.       $_SESSION["cart"];
  3.       $_SESSION["items"] = 0;
  4.       $_SESSION["total_price"] = "0.00";
Si te fijas, toda vez que se ejecuta el código estás anulando las variables de sesión items y total_price, ya que no están incluídas en la condición. Tal vez lo que querías poner era esto:
Código php:
Ver original
  1. if(!isset($cart)) {
  2.         $_SESSION['items'] = 0;
  3.         $_SESSION['total_price'] = '0.00';
  4. }
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 21/03/2009, 18:15
 
Fecha de Ingreso: enero-2009
Ubicación: Valencia (España)
Mensajes: 29
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Crear array con register globlas off

Bueno, pues he probado las comillas simples, los espacios, y los corchetes (ya lo había probado, pero lo he puesto de nuevo a ver).

Ahora queda así:

Código PHP:
include ('book_sc_fns.php');
  
// El carrito de compra necesita sesiones, así que empezar una
  
session_start();

 
// recuperar categorías de la base de datos
  
 
$new $_GET['new'];
 
$cart $_SESSION['cart'];
 
  if(
$new)
  {
    
//nuevo artículo seleccionado
    
     
if(!isset($cart))
      {
      
$_SESSION['cart'];
      
$_SESSION['items'] = 0;
      
$_SESSION['total_price'] = '0.00';
      }
      
                
    if(isset(
$cart[$new]))
      { 
$cart[$new]++;  }
    else
     { 
$cart[$new] = ;  }
     
    
$total_price calculate_price($cart);
    
$items calculate_items($cart);

  } 
Y NO FUNCIONA.

He puesto REGISTER GLOBALS ON, y el antiguo funciona perfecto, Y ESTE NUEVO NO. Hace lo mismo que en OFF...... Solo almacena un dato en el array, supongo que por que no reconoce la existencia de $cart[$new].

Creo que es fallo del código, no del register globals......

¿que puede ser? Ese valor de $new que no toma....... pero que luego sí que me lo da...... DEBE SER EL ARRAY $CART.... que no se crea correctamente, pero no consigo saber el por que.....

En globals OFF, el código "antiguo" tampoco funciona. Se comporta como el nuevo, no suma productos a los existentes.......

El array $cart tiene que estar fallando..... algo del inicio de sesión, el !isset.......


Gracias de nuevo, y si se te ocurre algo más, soy todo oídos, quiero decir, ojos...;)

Última edición por parriman; 21/03/2009 a las 18:25 Razón: añadir info
  #6 (permalink)  
Antiguo 21/03/2009, 18:45
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.712
Antigüedad: 15 años, 1 mes
Puntos: 836
Respuesta: Crear array con register globlas off

Lo que posiblemente esté pasando es que no estás volviendo a guardar la variable de sesión, al final del script deberías volver a guardarla así:
Código php:
Ver original
  1. $_SESSION['cart'] = $cart;
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 22/03/2009, 08:16
 
Fecha de Ingreso: enero-2009
Ubicación: Valencia (España)
Mensajes: 29
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Crear array con register globlas off

Hola David.

Simplemente...



Era eso !! Supongo que son cosas del globals en OFF, ya que he aprendido con él en ON, y no sé muy bien en qué partes de los script se ve afectado....

Ha quedado así:

Código PHP:
<?
  
include ('book_sc_fns.php');
  
// El carrito de compra necesita sesiones, así que iniciar una.
  
session_start();
  
  
$new $_GET['new'];
  
$cart $_SESSION['cart'];
  
$items $_SESSION['items'];
  
$total_price $_SESSION['total_price'];
  

  if(
$new)
  {
    
//nuevo artículo seleccionado
    
if(!isset($cart))
    {
      
$_SESSION["cart"];
      
$_SESSION["items"] = 0;
      
$_SESSION["total_price"] = "0.00";
    }
    if(
$cart[$new])
     { 
$cart[$new]++; }
    else
      { 
$cart[$new] = 1; }
      
    
$total_price calculate_price($cart);
    
$items calculate_items($cart);

  }
Y en la última lkinea del script, he vuelto a poner:

Código PHP:
$_SESSION['cart'] = $cart;
$_SESSION['items'] = $items;
$_SESSION['total_price'] = $total_price
Si no ponía las tres variables de sesión, no se actualizaba bien el contenido del carro que secarga en la cabecera......

CONFIRMAME por favor esto: Con globals OFF, hay que "llamar" a las variables de sesión al principio del script con

Código PHP:
$cart $_SESSION['cart']; 
Y para que las modificaciones que sufra la variable durante el script queden "grabadas" en ella, hay que poner al final

Código PHP:
$_SESSION['cart'] = $cart
¿Es así? Curioso...

MILLONES DE GRACIAS, DAVID.

No sé si por casualidad estás en Valencia o alrededores (y si no lo mismo da, lo digo por cercanía), pero cuando quieras pegarte un buen almuerzo, sólo tienes que decirmelo, y elegir el sitio (en Valencia, claro ).

Un saludo

Última edición por parriman; 22/03/2009 a las 08:35 Razón: Error grafico
  #8 (permalink)  
Antiguo 22/03/2009, 08:23
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.712
Antigüedad: 15 años, 1 mes
Puntos: 836
Respuesta: Crear array con register globlas off

Sí, así es, si quieres manejarlo en otra variable debes recuperar su valor y después volver a guardarlo.

Saludos .

P.S.: Gracias por la invitación, infelizmente no soy de por ahí cerca .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
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 08:55.