• Publicidad

Problemas con sesiones

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Problemas con sesiones

Notapor danimera » 2012-09-20 08:41 @403

Mi problema es que agrego unos datos a una sesión y no tengo problemas,
pero solo en un método en CGI-APP se me presenta un problema, que al imprimir el contenido de esa sesión observo unos hash extraños...

Esta es mi función de agregar.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub cart_add{
  2.     my $self= shift;
  3.     my $dbh = $self->dbh;
  4.     my $q = $self->query();
  5.     my $item = MyApp::Db::Stock::Item->new($dbh);
  6.         $item->retrieve($q->param('item'));
  7.  
  8.  
  9.     my $total = $self->session->param('total_cesta') +  $item->{'data'}->{'price'};
  10.     my $cesta = $self->session->param('cart');
  11.    #die Dumper $item->{'data'};
  12.     if ( defined( $cesta->{ $item->{'data'}->{'item_id'} } ) ){
  13.         $cesta->{ $item->{'data'}->{'item_id'} }->{'cant'}++;
  14.  
  15.     }else{
  16.  
  17.     my $h =  {
  18.              'id'     => $item->{'data'}->{'item_id'},
  19.              'name'   => $item->{'data'}->{'name'},
  20.              'price'  => $item->{'data'}->{'price'},
  21.              'cant'   => 1
  22.           };
  23.           $cesta->{ $item->{'data'}->{'item_id'} } = $h;
  24.     }
  25.  
  26.     $self->session->param( total_cesta => $total );
  27.     $self->session->param( cart => $cesta );
  28.  
  29.     my $items = $self->session->param('cart') ;
  30.     #die Dumper  $items;
  31.     $self->redirect("shoppingcart.pl?mode=display");
  32. }
  33.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Este es el código de display

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub cart_display{
  2.     my $self=shift;
  3.     my $items = $self->session->param('cart') ;
  4.     my @items2;
  5.     my $dbh = $self->dbh;
  6.     my $q = $self->query();
  7.     my $system = MyApp::Db::System->new($dbh);
  8.     $system->retrieve(1);
  9.     my $language = $self->current_language;
  10.     my $template = $system->{'data'}->{'template'};
  11.  
  12.     die Dumper $items;
  13.     foreach my $it (%$items){
  14.  
  15.        my $item = MyApp::Db::Stock::Item->new($dbh);
  16.  
  17.        #die Dumper $it;
  18.        if(      $item->retrieve($items->{$it}->{'id'})){
  19.        $items->{$it}->{'thumb'} = $item->{data}->{thumb};
  20.        push @items2,  $items->{$it}
  21.        }
  22.  
  23.     }
  24.  
  25.     my $vars = {
  26.                         items => \@items2,
  27.                         total => $self->session->param('total_cesta') ,
  28.                         url_site                => $self->cfg('site_url'),
  29.                         url_template    =>  "templates/"."$language/$template"
  30.                    };
  31.  
  32.     my $c = $self->tt_process('templates/'.$self->current_language.'/'.$self->cfg('template_name').'/cart_display.html',$vars);
  33.  
  34.  die Dumper $items;
  35.   # die Dumper $vars;
  36.     $self->display_site($$c);
  37.  
  38. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Aquí el Dumper que tengo en la línea 12 me arroja esto:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. $VAR1 = { '7' => { 'name' => 'Bolso 5028', 'id' => '7', 'price' => 0, 'cant' => 1 } };  


y en el dumper de la línea 34 me arroja algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. $VAR1 = { '6' => { 'name' => 'Bolso 5026', 'id' => '6', 'price' => 0, 'cant' => 1, 'thumb' => 'default.jpg' }, 'HASH(0x2960c58)' => {} };  


lo único que hago es actualizar la página y ya veo ese hash, y entre más productos adicione más de esos anónimos me salen...
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Re: Problemas con sesiones

Notapor explorer » 2012-09-20 11:44 @530

El problema está en la línea 13:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach my $it (%$items) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Estás recorriendo los valores y las claves del hash %$items, de forma alterna, cuando seguramente lo que querrías serían solamente recorrer las claves.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problemas con sesiones

Notapor danimera » 2012-09-20 11:59 @541

Asunto solucionado. Bastó con poner algo como
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  
  2.  my @llaves = keys %$items;
  3.  
  4.     foreach my $it (@llaves){}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Gracias como siempre, explorer.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: Problemas con sesiones

Notapor explorer » 2012-09-20 12:00 @542

Mejor así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach my $it (keys %$items) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


salvo que necesites reusar @llaves más de una vez.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problemas con sesiones

Notapor danimera » 2012-09-20 12:03 @544

Ahora entiendo por qué se dice que Perl es muy complicado... por las mismas cosas tan sencillas que se pueden hacer ahorrando tanto... :D
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: Problemas con sesiones

Notapor explorer » 2012-09-20 12:51 @577

De complicado nada... Quienes lo hacen complicado son los programadores :)

Recuerda que en Perl tenemos la fortuna de... hay más de una forma de hacerlo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados