• Publicidad

Pasar valores por POST

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Pasar valores por POST

Notapor mgonzalez » 2010-12-15 15:38 @693

Hola amigos.

Tengo un formulario, en el que habilito o deshabilito en forma dinámica ciertos controles del mismo. Al hacer submit, y tratar de recibir los datos enviados, éste no los recibe si el control tiene:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$enable = "false";
-disabled=>$enable
 
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Este es el código completo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use CGI qw/:standard *Tr *table *td/;
  2. use HTML::Myasp;
  3. use SBMP::XSesion;
  4. use SBMP::Documento;
  5. use POSIX qw(strftime);
  6.  
  7. if (param('accion') eq "G") {
  8.     print $id_sistema ." ". $id_origen ." ". $id_tipo ." ". $cod_indice ." ". $codigo ." ". $correl_ok ." ". $id_docto;
  9.     exit;
  10. }
  11.  
  12. $enable ="true";
  13. if ($myDoc->{codigo} =~ /^S/){
  14.     $enable = "false";
  15. }
  16.  
  17. print "Content-Type: text/html\n\n";
  18.  
  19. send_page(
  20.     "$dir_html"."cla.htm",
  21.     {
  22.         __name_usuario__    =>    $sesion->{name_usr},
  23.         __perfil__          =>    $sesion->{perfil},
  24.         __accion__          =>    "".hidden('accion',''),
  25.         __volver__          =>    "<a href='$cgi_origen?id_docto=$id_docto&id_version=$id_version'>Volver</a>",
  26.         __titulo__          =>    textfield(
  27.                                     -name      => "titulo",
  28.                                     -maxlength => 255,
  29.                                     -size      => 80,
  30.                                     -default   => $myDoc->{titulo}
  31.                                   ),
  32.         __version__         =>    textfield(
  33.                                     -name      => "version",
  34.                                     -maxlength => 6,
  35.                                     -size      => 5,
  36.                                     -default   => $myDoc->{version}
  37.                                   ),
  38.         __origen__          =>    popup_menu(
  39.                                     -name      => 'origen',
  40.                                     -values    => $origen_id,
  41.                                     -labels    => $origen_nom,
  42.                                     -default   => $myDoc->{id_origen},
  43.                                     ,
  44.                                     -disabled  => "true"
  45.                                   ),
  46.         __tipo_docto__      => popup_menu(
  47.                                     -name      => 'tipo',
  48.                                     -values    => $tipo_id,
  49.                                     -labels    => $tipo_nom,
  50.                                     -default   => "$myDoc->{id_tipo}|$myDoc->{cod_tipo}",
  51.                                     onchange   => "tipo_onChange()",
  52.                                     -disabled  => $enable
  53.                                ),
  54.         __sistema__         => popup_menu(
  55.                                     -name      => 'sistema',
  56.                                     -values    => $sistema_id,
  57.                                     -labels    => $sistema_nom,
  58.                                     -default   => "$myDoc->{id_sistema}|$myDoc->{cod_sistema}",
  59.                                     -onchange  => "sistema_onChange()",
  60.                                     -disabled  => "true"
  61.                                ),
  62.         __codigo__          => "".$myDoc->{codigo},
  63.         __correl__          => textfield(
  64.                                     -name      => "correl",
  65.                                     -maxlength => 10,
  66.                                     -size      => 10,
  67.                                     -default   => $myDoc->{correl} || "000",
  68.                                     -disabled  => $enable
  69.                                ),
  70.         __fecha__           => textfield(
  71.                                     -name      => "fecha",
  72.                                     -maxlength => 10,
  73.                                     -size      => 11,
  74.                                     -default   => $myDoc->{fecha_ing},
  75.                                     -disabled  => "true"
  76.                                ),
  77.         __fec_rev__         => textfield(
  78.                                     -name      => "fec_rev",
  79.                                     -maxlength => 10,
  80.                                     -size      => 11,
  81.                                     -default   => $myDoc->fec_last_event('4,5,12,14') || "&nbsp;",
  82.                                     -disabled  => "true"
  83.                                ),
  84.         __fec_apr__         => textfield(
  85.                                     -name      => "fec_apr",
  86.                                     -maxlength => 10,
  87.                                     -size      => 11,
  88.                                     -default   => $myDoc->fec_last_event(8) || "&nbsp;",
  89.                                     -disabled  => "true"
  90.                                ),
  91.         __lista_doctos__    => popup_menu(
  92.                                     -name      => 'asocia',
  93.                                     -values    => $doctos_id,
  94.                                     -labels    => $doctos_nom,
  95.                                     -default   => $default_tipo,
  96.                                     -disabled  => $enable
  97.                                ),
  98.         __toda__            => checkbox(
  99.                                     -name      => 'chk_new',
  100.                                     -checked   => 0,
  101.                                     -label     => 'Toda la Empresa'
  102.                                ),
  103.         __boton__           => button(
  104.                                     -name      => "rev",
  105.                                     -value     => "Guardar",
  106.                                     -onclick   => "javascript&#058;valida_form();"
  107.                                ),
  108.     },
  109.     {
  110.         -script             => sub { &imprime_script},
  111.     }
  112.  
  113. sub imprime_script
  114. {
  115. function valida_form()
  116.     {
  117.       form1.accion.value = "G";
  118.             form1.submit();
  119.         }              
  120. }
  121.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


Este código es parte de lo que necesito hacer. Pero más o menos es la idea.
Lo importante del caso es que si le quito el -disabled=>"true"), funciona sin problemas.

Muchísimas gracias.
Última edición por explorer el 2010-12-15 16:07 @713, editado 1 vez en total
Razón: Formateo del código
mgonzalez
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2010-10-13 08:54 @412

Publicidad

Re: Pasar valores por POST

Notapor explorer » 2010-12-15 16:10 @715

Si formateamos el código de una forma un poco más clara (como he hecho), se ve claramente que el error está en la línea 43: sobra una coma.

Creo, además, que falta un ');' en la 112.

Y el código de la 115 y siguientes, parece JavaScript.

Queda como ejercicio para el lector porqué la coma de la línea 43 provoca ese fallo. Tiene que ver con la definición de un hash de forma directa.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Pasar valores por POST

Notapor mgonzalez » 2010-12-16 07:18 @346

Hola, gracias por tu ayuda. El código que puse, es un resumen, en realidad muy desordenado, debe ser la desesperación... ¡ja,ja,ja!

Efectivamente, tenía una coma de más, que corregí ayer, pero el problema persiste. El por qué es un error la coma, creo que es por que el hash tiene clave y valor, con la coma estaba entregando uno nuevo.

Como te digo, el problema persiste. Así es que mejor agrego todo el código.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use CGI qw/:standard *Tr *table *td/;
  2. use HTML::Myasp;
  3. use SBMP::XSesion;
  4. use SBMP::Documento;
  5. use POSIX qw(strftime);
  6.  
  7. my $sesion = SBMP::XSesion->new();
  8.  
  9. my $id_docto = param('id_docto')||0;
  10. my $id_version = param('id_version')||0;
  11. my $id_origen = param('origen') || 0;
  12. my $sistema = param('sistema') || '0|0';
  13. my $tipos = param('tipo') || '0|0';
  14. my $cod_indice = param('asocia') || 0;
  15. my $cgi_origen = param('cgi_origen');
  16. my $myDoc = new SBMP::Documento($id_docto, $id_version);
  17.  
  18. my ($id_sistema, $cod_sistema) = split /\|/, $sistema;
  19. my ($id_tipo, $cod_tipo) = split /\|/, $tipos;
  20.  
  21. my $existecodigo ="";
  22. my $enable;
  23. #my $encuentra = () ;
  24. my $encuentra;
  25.  
  26.  
  27. my ($doctos_id, $doctos_nom);
  28. my ($c_tipo, $c_sist, $c_ind, $c_correl);
  29. my $default_tipo;
  30. my $codigo;
  31. my $fecha = param('fecha') || strftime "%d/%m/%Y", localtime;
  32.  
  33.  
  34.  
  35.  
  36. if (param('accion') eq "S")
  37. {
  38.     my $sth = $dbh->prepare("Update documentos Set id_sistema = ?, codigo = ? Where id_docto =?");
  39.     $sth->execute($id_sistema, '', $id_docto);
  40.     $dbh-commit;
  41. }
  42. if (param('accion') eq "G")
  43. {
  44. #    $myDoc->agrega_evento_mig(1, param('fecha'), param('fecha')) if param('fecha');
  45. #    $myDoc->agrega_evento_mig(4, param('fec_rev'), param('fec_rev')) if param('fec_rev');
  46. #    $myDoc->agrega_evento_mig(8, param('fec_apr'), param('fec_apr')) if param('fec_apr');
  47. #    $myDoc->agrega_evento_mig(16, param('fec_apr'), undef) if param('fec_apr');
  48.  
  49.     if (param('version')) {
  50.         my $sth = $dbh->prepare("Update version_documento Set titulo=?, version=?, version_rev = ?, fecha_ing = ? Where id_docto = ? And id_version_docto = ? ");
  51.         $sth->execute(param('titulo'), param('version'), param('version')."a", fecsql($fecha), $id_docto, $id_version);
  52.     }else{
  53.         my $sth = $dbh->prepare("Update version_documento Set titulo=?,  fecha_ing = ? Where id_docto = ? And id_version_docto = ? ");
  54.         $sth->execute(param('titulo'), fecsql($fecha), $id_docto, $id_version);
  55.     }
  56.        
  57.            
  58.         print "tipo ". param('tipo');
  59.         #exit; 
  60.    
  61.     if (param('tipo') ne "0")
  62.     {
  63.         my ($cod_indice_ori, $tipo_ori) = $dbh->selectrow_array("Select cod_indice, id_tipo From documentos Where id_docto = $id_docto");
  64.  
  65.         if ($cod_indice_ori ne $cod_indice)
  66.         {
  67.             $sw_act = 1;
  68.         }
  69.         else
  70.         {
  71.             $sw_act = 1;
  72.         }
  73.  
  74.         if ($cod_tipo eq 'PG' || $cod_tipo eq 'PP')
  75.         {
  76.  
  77.             if ($sw_act)
  78.             {
  79.                 #my $next_correl = $dbh->selectrow_array("Select isnull(Max(correl),0) + 1 From documentos Where id_docto <> $id_docto And cod_indice = '$cod_indice' And id_sistema = $id_sistema");
  80.  
  81.                 my $sth = $dbh->prepare("Update Documentos Set id_sistema=?, id_origen=?, id_tipo=?, cod_indice=?, correl=? Where id_docto = ?");
  82.                 $sth->execute($id_sistema, $id_origen, $id_tipo, $cod_indice, param('correl'), $id_docto);
  83.  
  84.                 ($c_tipo, $c_sist, $c_ind, $c_correl) = $dbh->selectrow_array("Select c.cod_tipo, b.cod_sistema, a.cod_indice , Convert(varchar,a.correl) From documentos as a, sistemas as b, tipo_documento as c Where a.id_docto = $id_docto And a.id_tipo = c.id_tipo And a.id_sistema = b.id_sistema");
  85.  
  86.                 if ($c_ind =~ /\D/) {
  87.                     $codigo = "$c_tipo$c_sist-$c_ind-".cero_izq($c_correl,2);
  88.                 } else {
  89.                     $codigo = "$c_tipo$c_sist-$c_ind".cero_izq($c_correl,3);
  90.                 }
  91.                 #valida codigo
  92.                 my $encuentra= $dbh->selectall_arrayref("select codigo from documentos where codigo like '$codigo'",{ Slice => {} } ) || die $self->error($self->{dbh}->errstr);
  93.                 if (@$encuentra) {
  94.                    $existecodigo =" EL CODIGO YA EXISTE ";
  95.                 }else{
  96.                    my $sth = $dbh->prepare("Update Documentos Set codigo=? Where id_docto = ?");
  97.                    $sth->execute($codigo, $id_docto);
  98.                 }
  99.                 #valida codigo
  100.              }
  101.              else
  102.              {
  103.                 my $sth = $dbh->prepare("Update Documentos Set id_sistema=?, id_origen=? Where id_docto = ?");
  104.                 $sth->execute($id_sistema, $id_origen, $id_docto);
  105.  
  106.                 ($c_tipo, $c_sist, $c_ind, $c_correl) = $dbh->selectrow_array("Select c.cod_tipo, b.cod_sistema, a.cod_indice , Convert(varchar,a.correl) From documentos as a, sistemas as b, tipo_documento as c Where a.id_docto = $id_docto And a.id_tipo = c.id_tipo And a.id_sistema = b.id_sistema");
  107.                 if ($c_ind =~ /\D/) {
  108.                     $codigo = "$c_tipo$c_sist-$c_ind-".cero_izq($c_correl,2);
  109.                 } else {
  110.                     $codigo = "$c_tipo$c_sist-$c_ind".cero_izq($c_correl,3);
  111.                 }
  112.                 #valida codigo
  113.                 #$codigo = "$c_tipo$c_sist-$c_ind".cero_izq($c_correl,3);
  114.                 my $encuentra = $dbh->selectall_arrayref("select codigo from documentos where codigo like '$codigo'",{ Slice => {} } ) || die $self->error($self->{dbh}->errstr);
  115.                 if (@$encuentra) {
  116.                    $existecodigo =" EL CODIGO YA EXISTE ";
  117.                 }else {
  118.                    my $sth = $dbh->prepare("Update Documentos Set codigo=? Where id_docto = ?");
  119.                    $sth->execute($codigo, $id_docto);
  120.                 }
  121.                 #valida codigo
  122.             }
  123.         }
  124.         else
  125.         {
  126.             if ($sw_act)
  127.             {
  128.                 my $correl = param('correl');
  129.                 print "Indice $cod_indice Correl $correl Sistema $cod_sistema";
  130.                 my $correl_ok;
  131.                 if (length($cod_indice) == 2)
  132.                 {
  133.                     $codigo = "$cod_tipo$cod_sistema-$cod_indice$correl";
  134.                     my @corr = split /-/,$correl;
  135.                     $correl_ok = @corr[@corr-1];
  136.                 }
  137.                 else
  138.                 {
  139.                     my @cod_docto = split /-/,$cod_indice;
  140.                     shift @cod_docto;
  141.                     $cod_indice = join '-', @cod_docto;
  142.  
  143.                     $codigo = "$cod_tipo$cod_sistema-$cod_indice-";
  144.                     $codigo .= cero_izq($correl,2);
  145.                     $correl_ok = $correl;
  146.                     $cod_indice = '';
  147.                 }
  148.                 #my ($next_correl) = $dbh->selectrow_array("Select isnull(Max(correl),0) + 1 From documentos Where id_docto <> $id_docto And codigo like '".$codigo."__'");
  149.  
  150.                 print $id_sistema ." ". $id_origen ." ". $id_tipo ." ". $cod_indice ." ". $codigo ." ". $correl_ok ." ". $id_docto;
  151.                                 exit;
  152.  
  153.                                 #valida codigo
  154.                                 my $encuentra= $dbh->selectall_arrayref("select codigo from documentos where codigo like '$codigo'",{ Slice => {} } ) || die $self->error($self->{dbh}->errstr);
  155.                                 if (@$encuentra) {
  156.                                         $existecodigo =" EL CODIGO YA EXISTE ";
  157.                                 }else{
  158.                                         my $sth = $dbh->prepare("Update Documentos Set id_sistema =?, id_origen=?, id_tipo = ?, cod_indice=?, codigo=?, correl=?  Where id_docto = ?");
  159.                                         $sth->execute($id_sistema, $id_origen, $id_tipo, $cod_indice, $codigo, $correl_ok, $id_docto);
  160.                                 }
  161.                                 #valida codigo
  162.             }
  163.             else
  164.             {
  165.  
  166.                 my @cod_docto = split /-/,$cod_indice;
  167.                 my $correl = shift @cod_docto;
  168.                 $cod_indice = join '-', @cod_docto;
  169.  
  170.  
  171.                 $codigo = "$cod_tipo$cod_sistema-$cod_indice-$correl";
  172.  
  173.                 my $sth = $dbh->prepare("Update Documentos Set id_sistema =?, id_origen=?, codigo=? Where id_docto = ?");
  174.                 $sth->execute($id_sistema, $id_origen, $codigo, $id_docto);
  175.  
  176.             }
  177.         }
  178.     }
  179.     else
  180.     {
  181.         my $sth = $dbh->prepare("Update Documentos Set id_sistema = ?, id_origen=?  Where id_docto = ?");
  182.         $sth->execute($id_sistema, $id_origen, $id_docto);
  183.     }
  184.  
  185.         #print "existecodigo". $existecodigo;
  186.         #exit;
  187.    
  188.     if (!$existecodigo){
  189.       $dbh->commit;
  190.       print redirect("$cgi_origen?id_docto=$id_docto&id_version=$id_version");
  191.       print "\n\n";
  192.     }
  193. }
  194.  
  195. #my ($sistema_id, $sistema_nom) = give_popup("Select Convert(varchar,id_sistema) + '|' + cod_sistema, nombre From sistemas where id_sistema not in (4) and ind_vigencia = 1","0|","[Seleccione]");
  196. my ($sistema_id, $sistema_nom) = give_popup("Select Convert(varchar,id_sistema) + '|' + cod_sistema, nombre From sistemas where ind_vigencia = 1","0|","[Seleccione]");
  197. my ($origen_id, $origen_nom) = give_popup("Select * From origen","0","[Seleccione]");
  198. my ($tipo_id, $tipo_nom) =  give_popup("Select Convert(varchar,id_tipo) + '|' + cod_tipo, nombre From tipo_documento","0","[Seleccione]");
  199.  
  200.  
  201. my @tipo = split /\|/, param('tipo');
  202.  
  203. if ((@tipo[1] && (@tipo[1] eq 'PG' || @tipo[1] eq 'PP'))){
  204.  
  205.     ($doctos_id, $doctos_nom) =  give_popup("Select cod_indice, nombre From indice_tematico Where id_tipo = @tipo[0]","0","[Seleccione]");
  206.     $default_tipo = $myDoc->{cod_indice};
  207. }
  208. #Proceso Seguridad
  209. elsif (@tipo[1] && (@tipo[1] eq 'IS')) {
  210.  
  211.             ($doctos_id, $doctos_nom) =  give_popup("Select cod_indice, nombre From indice_tematico Where id_sistema =4","0","[Seleccione]");
  212.                 $default_tipo = $myDoc->{cod_indice};
  213.  
  214. }
  215. elsif (@tipo[1] && @tipo[1] =~ /^R/)
  216. {
  217.  
  218.     ($doctos_id, $doctos_nom) =  give_popup("Select a.codigo From documentos as a, tipo_documento as c Where c.cod_tipo IN ('PG','MA','IN','PA') And a.id_tipo = c.id_tipo And a.codigo is not null And id_docto <> $id_docto","0","[Seleccione]");
  219.     $default_tipo = $myDoc->{codigo};
  220. }
  221. elsif (@tipo[1])
  222. {
  223.  
  224.     ($doctos_id, $doctos_nom) =  give_popup("Select a.codigo, a.codigo From documentos as a, tipo_documento as c Where c.cod_tipo IN ('PG') and c.id_tipo = a.id_tipo And a.codigo is not null And id_docto <> $id_docto And id_sistema = $id_sistema Union Select cod_indice, nombre From indice_tematico Where id_tipo = 2","0","[Seleccione]");
  225.     $default_tipo = $myDoc->{codigo};
  226. }
  227. elsif ($myDoc->{id_tipo}){
  228.  
  229.     if ($myDoc->{id_tipo} == 2 )
  230.     {
  231.  
  232.         ($doctos_id, $doctos_nom) =  give_popup("Select cod_indice, nombre From indice_tematico Where id_tipo = $myDoc->{id_tipo}","0","[Seleccione]");
  233.         $default_tipo = $myDoc->{cod_indice};
  234.     }
  235.     else
  236.     {
  237.  
  238.         ($doctos_id, $doctos_nom) =  give_popup("Select a.codigo, a.codigo From documentos as a, tipo_documento as c Where c.cod_tipo IN ('PG') and c.id_tipo = a.id_tipo And a.codigo is not null And id_docto <> $id_docto And id_sistema = (Select id_sistema From documentos Where id_docto = $id_docto) Union Select cod_indice, nombre From indice_tematico Where id_tipo = 2","0","[Seleccione]");
  239.         $default_tipo = $myDoc->{cod_indice} || padre($myDoc->{codigo});
  240.     }
  241. }
  242.  
  243.  
  244. $enable ="true";
  245.   if ($myDoc->{codigo} =~ /^S/){
  246.           $enable          ="false";
  247.   }
  248.  
  249.  
  250.  
  251.  
  252. print "Content-Type: text/html\n\n";
  253. send_page("$dir_html"."clasificar_mig.htm",
  254. {
  255.     -menu           => sub { &prepara_menu($sesion->{id_perfil})},
  256.     -preparo        => sub { $myDoc->preparo(1)},
  257.     -reviso         => sub { $myDoc->preparo(4)},
  258.     -aprobo         => sub { $myDoc->preparo(5)},
  259.     -uop            => sub { $myDoc->uop},
  260.     -script         => sub { &imprime_script},
  261.     -ocultos        => sub { print hidden('id_docto'), hidden('id_version'),hidden('cgi_origen')},
  262.         -existe                 => sub { print $existecodigo},
  263.  
  264. },{
  265.     __name_usuario__    => $sesion->{name_usr},
  266.     __perfil__      =>  $sesion->{perfil},
  267.     __accion__      => "".hidden('accion',''),
  268.     __volver__      => "<a href='$cgi_origen?id_docto=$id_docto&id_version=$id_version'>Volver</a>",
  269.     __titulo__      => textfield(-name=>"titulo", -maxlength=>255, -size=>80, -default=>$myDoc->{titulo}),
  270.     __version__     => textfield(-name=>"version", -maxlength=>6, -size=>5, -default=>$myDoc->{version}),
  271.     __origen__      => popup_menu(-name=>'origen',-values=>$origen_id,-labels=>$origen_nom, -default=>$myDoc->{id_origen} , -disabled=>"true"),
  272.     __tipo_docto__  => popup_menu(-name=>'tipo',-values=>$tipo_id,-labels=>$tipo_nom, -default=>"$myDoc->{id_tipo}|$myDoc->{cod_tipo}", onchange=>"tipo_onChange()", -disabled=>$enable),
  273.     __sistema__     => popup_menu(-name=>'sistema',-values=>$sistema_id,-labels=>$sistema_nom, -default=>"$myDoc->{id_sistema}|$myDoc->{cod_sistema}", -onchange=>"sistema_onChange()", -disabled=>"true"),
  274.     __codigo__      => "".$myDoc->{codigo},
  275.     __correl__      => textfield(-name=>"correl", -maxlength=>10, -size=>10, -default=>$myDoc->{correl} || "000", -disabled=>$enable),
  276.     __fecha__        => textfield(-name=>"fecha", -maxlength=>10, -size=>11, -default=>$myDoc->{fecha_ing}, -disabled=>"true"),
  277.     __fec_rev__      => textfield(-name=>"fec_rev", -maxlength=>10, -size=>11, -default=>$myDoc->fec_last_event('4,5,12,14') || "&nbsp;", -disabled=>"true"),
  278.     __fec_apr__      => textfield(-name=>"fec_apr", -maxlength=>10, -size=>11, -default=>$myDoc->fec_last_event(8) || "&nbsp;", -disabled=>"true"),
  279.     __lista_doctos__ => popup_menu(-name=>'asocia',-values=>$doctos_id,-labels=>$doctos_nom, -default=>$default_tipo, -disabled=>$enable),
  280.     __toda__         => checkbox(-name=>'chk_new', -checked=>0, -label=>'Toda la Empresa'),
  281.     __boton__        => button(-name=>"rev", -value=>"Guardar", -onclick=>"javascript&#058;valida_form();"),
  282. }
  283. );
  284.  
  285. sub cero_izq
  286. {
  287.     my $cadena = shift;
  288.     my $largo = shift;
  289.  
  290.     my $salida = $cadena;
  291.     for (my $i=0;$i < $largo - length($cadena);$i++)
  292.     {
  293.         $salida = "0".$salida;
  294.     }
  295.     return $salida;
  296. }
  297.  
  298. sub padre
  299. {
  300.     my @cod_docto = split /-/, shift;
  301.     pop @cod_docto;
  302.     shift @cod_docto;
  303.     my $origen =  join '-', @cod_docto;
  304.  
  305.     my $codigo_padre = $dbh->selectrow_array("Select codigo From documentos Where codigo like '___-$origen'");
  306.     return $codigo_padre;
  307. }
  308.  
  309. sub imprime_script
  310. {
  311.     my $script = <<EOF;
  312.    
  313.     function muestraTipo(objeto)
  314.     {
  315.         var cadena = objeto.value.split('|');
  316.            document.getElementById('codigo').innerHTML = cadena[1];
  317.         if (cadena[1] == "R")
  318.                 form1.subtipo.style.display = "block";
  319.     }
  320.    
  321.     function tipo_onChange()
  322.     {
  323.         form1.accion.value = '';
  324.         form1.submit();
  325.     }
  326.  
  327.     function sistema_onChange()
  328.     {
  329.                                 form1.sistema.disabled = false;
  330.         form1.accion.value = 'S';
  331.         form1.submit();
  332.     }
  333.  
  334.     function valida_form()
  335.     {
  336.         var ind_err = 0;
  337.         var des_err = "Debe seleccionar los siguientes campos:\\n";
  338.        
  339.         if (form1.tipo.value != "0|")
  340.         {
  341.             if (form1.asocia.value == "0")
  342.             {
  343.                 ind_err = 1;
  344.                 des_err += "Asociado a\\n";
  345.             }
  346.         }
  347.        
  348.         if (ind_err)
  349.         {
  350.             alert(des_err);
  351.         }
  352.         else
  353.         {
  354.                                                 form1.sistema.disabled = false;
  355.                                                 form1.origen.disabled = false;
  356.             form1.accion.value = "G";
  357.             form1.submit();
  358.         }
  359.     }
  360.  
  361.     function selecciona(tipo)
  362.     {
  363.           window.open('/sbmp/cgi-bin/popup_proc_responsable.cgi?tipo='+tipo+'&id_docto='+form1.id_docto.value+'&id_version='+form1.id_version.value+'&ind_proc_doc=1','WIN1','scrollbars=0,width=700,height=300');
  364.     }
  365. EOF
  366.     print script({-language=>"javascript"},$script);
  367. }
  368.  
Coloreado en 0.011 segundos, usando GeSHi 1.0.8.4


Una ultima cosa, revisando el html que genera, la unica diferencia entre, elq que esta correcto y el erroneo es la linea que deseo agregar: disabled="false".
Gracias.
mgonzalez
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2010-10-13 08:54 @412

Re: Pasar valores por POST

Notapor explorer » 2010-12-16 08:01 @376

perl -c code_23833.pl indica que el código no tiene problemas de sintaxis, así que el problema está en la lógica del programa.

¿Podrías averiguar, exactamente, qué línea es la que provoca el fallo y decirnos el número de línea que es?

Podrías usar la técnica del despiece: ir quitando cosas hasta encontrar que funciona, y así sabrías dónde falla. O al revés, quitar todo e ir agregando partes hasta que algo falle. Si lo combinas con la técnica de búsqueda binaria, pues puedes encontrar el problema al tercer o cuarto intento.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Pasar valores por POST

Notapor mgonzalez » 2010-12-16 08:39 @402

Al quitar lo siguiente del programa, éste retorna las variables por POST:

en la línea 244
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  $enable ="true";
  2.  if ($myDoc->{codigo} =~ /^S/){
  3.        $enable          ="false";
  4.  }
  5.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Más abajo está la generación del HTML, donde ocupo la variable $enable:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. __tipo_docto__  => popup_menu(-name=>'tipo',-values=>$tipo_id,
  2.                        -labels=>$tipo_nom,
  3.                        -default=>"$myDoc->{id_tipo}|
  4.                                $myDoc->{cod_tipo}",    
  5.                        -onchange=>"tipo_onChange()",
  6.                        -disabled=>$enable)
  7.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Lo que pretendo con esto es que si encuentra código, deshabilita el control.
Luego los controles a deshabilitar son los que contienen la variable $enable, entonces quitando ,-disabled => $enable, todo marcha bien.

Esta es la única manera que se me ocurre de hacer esto. Puede que exista una forma más óptima.

Gracias.
mgonzalez
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2010-10-13 08:54 @412

Re: Pasar valores por POST

Notapor explorer » 2010-12-16 09:47 @449

Claro... porque disabled funciona al revés de como lo estás activando... Si disabled es verdadero, el control es deshabilitado.

Cambia el código así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $disable ="false";              # por defecto, los controles NO están deshabilitados (se ven)
  2. if ($myDoc->{codigo} =~ /^S/){     # pero si se encuentra el código maligno
  3.     $disable = "true";             # activamos la ocultación. No se ven
  4. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

y en el resto de líneas, cambias $enable por $disable.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Pasar valores por POST

Notapor mgonzalez » 2010-12-16 11:50 @535

De acuerdo, pero aún si funciona al revés, que tiene que ver que no se envíen los valores por POST...

He encontrado, que la siguiente línea es la del problema:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. __correl__      => textfield(-name=>"correl", -maxlength=>10,
  2.                      -size=>10,
  3.                      -default=>$myDoc->{correl} || "000",
  4.                      -disabled=>$enable)
  5.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


De lo anterior al quitarle ,-disabled=>$enable, funciona.

Gracias.
mgonzalez
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2010-10-13 08:54 @412

Re: Pasar valores por POST

Notapor explorer » 2010-12-16 13:44 @614

Cambia

-default=>$myDoc->{correl} || "000",

por

-default => ($myDoc->{correl} || "000"),
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

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

cron