• Publicidad

Envío de valores de control radio y textfield

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Envío de valores de control radio y textfield

Notapor sarriaga » 2013-10-29 08:58 @415

Tengo un sistema de pesaje el cual consta de dos interfaces.

Una para capturar un peso de entrada y al mismo tiempo me muestra una tabla con pesajes que quedan por completar. Esta tabla tiene un control tipo 'radio' y otro tipo 'textfield' que, al seleccionar el radio, me pasa a la interfaz de completar pesaje. El valor del radio es igual al 'id' del registro y el valor del 'textfield' debe ser lo que introduzca el usuario en el campo de texto que corresponde al 'doc_recepcion'. Estos dos valores debo compararlos con lo que tengo en la base de datos con ese 'id' y lo que introduzca en el campo de texto.

Cabe mencionar que al campo de texto le doy diferente nombre para que me respete su valor pero al momento de enviarlo a la siguiente interfaz no me manda nada, solo manda el 'id' del control radio, pero el 'textfield' lo manda vacío.

Agradecería su apoyo para verificar por qué no hace lo que le estoy indicando.

En la primera interfaz hago un 'insert' del pesaje que quiero hacer (esto lo hace).

En la tabla inferior se muestran los pesajes que están por completar, el usuario debe seleccionar e introducir en el campo de texto un 'id_doc_recepcion' que se envían a una segunda interfaz para ser consultados y si existe pesaje con esos datos me muestra en etiquetas para poder cerrar el pesaje.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $peso_entrada = $q->param('peso_entrada');
  2. my $placas       = $q->param('placas');
  3. my $proveedor    = $q->param('proveedor');
  4. my $material     = $q->param('material');
  5. my $peso_prov    = $q->param('peso_prov');
  6. my $recepcion    = $q->param('recepcion');
  7. my $id_recepcion = $q->param('id_recepcion');
  8. my $placas_id    = $q->param('id');
  9. my $descarga     = $q->param('descarga');
  10. my ( $pesajes, $i );
  11.  
  12. my $dbh                = DBI->connect('XXXXXXXX');
  13. my $pesajes_pendientes = $dbh->selectall_arrayref(
  14.     "SELECT ID_RECEPCION, PLACAS, DOC_RECEPCION, PROVEEDOR, PESO_ENTRADA FROM BASCULA_PESAJE WHERE TIPO='entrada'");
  15. $dbh->disconnect();
  16.  
  17. if ( defined $pesajes_pendientes && @$pesajes_pendientes ) {
  18.     my $i = 0;
  19.     foreach (@$pesajes_pendientes) {
  20.  
  21.         #~ unshift(@$_, "<input type=radio name=id value=$_->[0].'rec'.$_->[2]>", $q->textfield(-name=>'id_recepcion'.$_->[0], -size=>8, -value=>$id_recepcion, -override=>1));
  22.         unshift( @$_,
  23.             "<input type=radio name=id value=$_->[0]>",
  24.             $q->textfield( -name => 'id_recepcion' . $_->[0], -size => 8, -value => ' ', -override => 1 ) );
  25.  
  26.         #~ unshift(@$_, "<input type=radio name=id value=$_->[0]>", $q->textfield(-name=>'id_recepcion'.$_->[0], -size=>8, -value=>$id_recepcion, -override=>1));
  27.         push( @$pesajes, $_ );
  28.         $i++;
  29.     }
  30.     $_ = $q->td($_) foreach @$pesajes;
  31.  
  32.     #~ unshift(@$pesajes, $q->td([qw(<b>ID</b> <b>RECEPCION</b> <b>PLACAS</b> <b>DOC_RECEPCION</b> <b>PROVEEDOR</b> <b>PESO_ENTRADA</b>)]));
  33.     unshift(
  34.         @$pesajes,
  35.         $q->td(
  36.             [   qw(<b></b> <b>ID_DOC_REC</b> <b>ID_RECEPCION</b> <b>PLACAS</b> <b>DOC_RECEPCION</b> <b>PROVEEDOR</b> <b>PESO_ENTRADA</b>)
  37.             ]
  38.         )
  39.     );
  40. }
  41. print '<br>';
  42. my $response;
  43. IO::Socket::INET->new('xxxxxxx')->sysread( $response, 100 );
  44.  
  45. if ( defined $response && length $response ) {
  46.     my $index1 = index( $response, 'KG' ) + 2;
  47.     my $index2 = index( $response, 'KG', $index1 );
  48.  
  49.     if ( substr( $response, $index1, $index2 - $index1 ) =~ /(-)?\s+(\d+)/ ) {
  50.         $peso_entrada = defined $1 ? $1 : '' . $2;
  51.     }
  52.     else {
  53.         print 'Error: El peso es negativo';
  54.     }
  55. }
  56. else {
  57.     print 'Error al obtener peso';
  58. }
  59. ##Print html
  60. print $q->start_html("Pesaje Entrada y Salida");
  61. print $q->h3( { -align => 'CENTER' }, 'Pesaje de Entrada y Salida' . '<br>' );
  62. print $q->hidden( -name => 'peso_entrada', -value => $peso_entrada, -override => 1 );
  63.  
  64. print $q->table(
  65.     { -border => 0, -align => 'center', -textalign => 'left' },
  66.     $q->Tr(
  67.         [         $q->td( { -align => 'left' }, 'Peso: ' . '<br>' )
  68.                 . $q->td( { -align => 'left' }, '<b>' . $peso_entrada . '&nbsp' . 'KG' . '</b>' ),
  69.         ]
  70.     ),
  71.     $q->Tr(
  72.         [   $q->td( { -align => 'left' }, 'Fecha y hora de Pesaje: ' . '<br>' )
  73.                 . $q->td(
  74.                 { -align => 'left', -override => 1 },
  75.                 '<b>' . &s_convert_dateTimeSystem_to_dateTimeHuman($timestamp) . '<br>' . '</b>'
  76.                 ),
  77.         ]
  78.     ),
  79.     $q->Tr(
  80.         [         $q->td( { -align => 'left' }, 'Placas: ' . '<br>' )
  81.                 . $q->td( { -align => 'left' }, $q->textfield( -name => 'placas', -override => 1 ) . '<br>' ),
  82.         ]
  83.     ),
  84.  
  85.     #~ $q->Tr([$q->td({-align=>'left'},'Proveedor: '.'<br>').$q->td({-align=>'left'},$q->popup_menu(-name=>'proveedor', -values=>\@proveedor, -labels=>\%proveedor).'<br>'),]),
  86.     $q->Tr(
  87.         [   $q->td( { -align => 'left' }, 'Proveedor: ' . '<br>' )
  88.                 . $q->td(
  89.                 { -align => 'left' },
  90.                 $q->popup_menu(
  91.                     -name   => 'proveedor',
  92.                     -values => [
  93.                         '',        'ADLAND',  'FORMOSA', 'POLYMAT', 'ENTECRESINS', 'BRASKEM',
  94.                         'INVISTA', 'PACKAGE', 'TELCH',   'DUPONT',  'MUHELSTEIN',  'VINMAR'
  95.                     ],
  96.                     -override => 1
  97.                     )
  98.                     . '<br>'
  99.                 ),
  100.         ]
  101.     ),
  102.     $q->Tr(
  103.         [   $q->td( { -align => 'left' }, 'Material: ' . '<br>' )
  104.                 . $q->td(
  105.                 { -align => 'left' },
  106.                 $q->popup_menu(
  107.                     -align  => 'left',
  108.                     -name   => 'material',
  109.                     -values => [
  110.                         '',
  111.                         'PEAD 60120u',
  112.                         'PEAD M5350',
  113.                         'PEAD GA574-000',
  114.                         'PEAD HG010',
  115.                         'PEAD DOW 17450',
  116.                         'PEAD DOW 12450',
  117.                         'PET Turbo II',
  118.                         'PET INVISTA 1001',
  119.                         'PP 4142N',
  120.                         'PP 3208',
  121.                         'PP GH12',
  122.                         'PP HP500N',
  123.                         'PP HP640J',
  124.                         'Surlyn PC-2000',
  125.                         'Surlyn PC-350'
  126.                     ],
  127.                     -override => 1
  128.                     )
  129.                     . '<br>'
  130.                 ),
  131.         ]
  132.     ),
  133.     $q->Tr(
  134.         [         $q->td( { -align => 'left' }, 'Peso Neto Proveedor:' . '<br>' )
  135.                 . $q->td( { -align => 'left' }, $q->textfield( -name => 'peso_prov', -override => 1 ) . 'KG' . '<br>' ),
  136.         ]
  137.     ),
  138.     $q->Tr(
  139.         [         $q->td( { -align => 'left' }, 'No. Doc. Recepción: ' . '<br>' )
  140.                 . $q->td( { -align => 'left' }, $q->textfield( -name => 'recepcion', -override => 1 ) . '<br>' ),
  141.         ]
  142.     ),
  143.     $q->Tr(
  144.         [   $q->td( { -align => 'left' }, 'Sitio de Descarga: ' . '<br><br>' )
  145.                 . $q->td(
  146.                 { -align => 'left' },
  147.                 $q->popup_menu(
  148.                     -align    => 'left',
  149.                     -name     => 'descarga',
  150.                     -values   => [ '', 'SILO 1', 'SILO 2', 'SILO 3', 'SILO 4' ],
  151.                     -override => 1
  152.                     )
  153.                     . '<br><br>'
  154.                 ),
  155.         ]
  156.     ),
  157. );
  158. if ( $permissions{180} ) {
  159.     print $q->submit(
  160.         -align => 'center',
  161.         -name  => "||i|pesaje||a|capturar_pesaje_entrada||",
  162.         -value => 'Capturar Pesaje'
  163.     ) . '<br>';
  164. }
  165. print $q->h4( { -align => 'CENTER' }, 'Pesajes por completar:' . '<br>' );
  166. print $q->table( { -border => 1, -cellpadding => 2, -cellspacing => 0 }, $q->Tr($pesajes) )
  167.     if defined $pesajes && @$pesajes;
  168. print '<br>';
  169. if ( $permissions{181} ) {
  170.     print $q->submit( -align => 'center', -name => "||i|completar_pesaje||", -value => 'Completar Pesaje' );
  171. }
  172.  
Coloreado en 0.017 segundos, usando GeSHi 1.0.8.4


En esta segunda interfaz recibo el valor del control 'radio' y el valor del 'textfield'. Con esos dos valores hago una consulta y si tengo un registro con esos dos valores me lo muestra en etiquetas y me permite cerrar o insertar el peso de salida. Si no, me muestra un mensaje de que ese documento no existe.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $pesajes      = $q->param('id');    #este es el valor del control radio ('id')
  2. my $peso_salida  = $q->param('peso_salida');
  3. my $peso_neto    = $q->param('peso_neto');
  4. my $id_recepcion = $q->param('id_recepcion');
  5. my $interfaz = $q->param("||i|completar_pesaje||a|capturar_pesaje_salida|$pesajes||");
  6. my ( $peso_entrada, $placas, $recepcion, $peso_pend, $proveedor, $material, $peso_prov, $descarga );
  7.  
  8. #~ print $pesajes; #este es el valor del control radio ('id')
  9. print $id_recepcion;
  10. my @vars = $q->param();
  11. foreach my $var (@vars) {
  12.     $var =~ /^id_recepcion(\d+)$/;
  13.  
  14.     #~ print $1;
  15. }
  16.  
  17. my $dbh = DBI->connect('xxxxxxx');
  18. my $pesajes_pend
  19.     = $dbh->selectall_arrayref(
  20.     "SELECT ID_RECEPCION, PESO_ENTRADA, PLACAS, DOC_RECEPCION, PROVEEDOR, MATERIAL, PESO_PROV, DESCARGA FROM BASCULA_PESAJE WHERE TIPO='entrada' AND ID_RECEPCION='$pesajes' AND DOC_RECEPCION='$id_recepcion'"
  21.     );
  22. $dbh_inplax->disconnect();
  23.  
  24. if ( defined $pesajes_pend && @$pesajes_pend > 0 ) {
  25.     my $i = 0;
  26.     foreach (@$pesajes_pend) {
  27.         push( @$peso_pend, $_ );
  28.         $i++;
  29.     }
  30.     foreach (@$peso_pend) {
  31.         $pesajes      = $_->[0];
  32.         $peso_entrada = $_->[1];
  33.         $placas       = $_->[2];
  34.         $recepcion    = $_->[3];
  35.         $proveedor    = $_->[4];
  36.         $material     = $_->[5];
  37.         $peso_prov    = $_->[6];
  38.         $descarga     = $_->[7];
  39.     }
  40. }
  41. else {
  42.     print '<br><br>El n&uacutemero de Documento de Recepci&oacuten es incorrecto. Verificar<br>' if !defined $interfaz;
  43.     print $q->submit( -align => 'center', -name => "||i|pesaje||", -value => 'Regresar' ) . '<br>'
  44.         if !defined $interfaz;
  45. }
  46. print '<br>';
  47. my $response;
  48. IO::Socket::INET->new('xxxxx')->sysread( $response, 100 );
  49.  
  50. if ( defined $response && length $response ) {
  51.     my $index1 = index( $response, 'KG' ) + 2;
  52.     my $index2 = index( $response, 'KG', $index1 );
  53.  
  54.     if ( substr( $response, $index1, $index2 - $index1 ) =~ /(-)?\s+(\d+)/ ) {
  55.         $peso_salida = defined $1 ? $1 : '' . $2;
  56.  
  57.     }
  58.     else {
  59.         print 'Error: El peso es negativo';
  60.     }
  61. }
  62. else {
  63.     print 'Error al obtener peso';
  64. }
  65.  
  66. $peso_neto = $peso_entrada - $peso_salida;
  67. $peso_neto =~ /(-)?(\d+)/;
  68. $peso_neto = $2;
  69.  
  70. #print html
  71. print $q->start_html("Pesaje Entrada y Salida");
  72. print $q->start_form();
  73. print $q->submit( -align => 'center', -name => "||i|pesaje||", -value => 'Nuevo Pesaje' );
  74. print $q->hidden( -name => 'peso_entrada', -value => $peso_entrada, -override => 1 );
  75. print $q->hidden( -name => 'peso_salida',  -value => $peso_salida,  -override => 1 );
  76. print $q->hidden( -name => 'id',           -value => $pesajes,      -override => 1 );
  77. print $q->hidden( -name => 'id_recepcion', -value => $id_recepcion, -override => 1 );
  78. print $q->hidden( -name => 'placas',       -value => $placas,       -override => 1 );
  79. print $q->hidden( -name => 'recepcion',    -value => $recepcion,    -override => 1 );
  80. print $q->hidden( -name => 'proveedor',    -value => $proveedor,    -override => 1 );
  81. print $q->hidden( -name => 'material',     -value => $material,     -override => 1 );
  82. print $q->hidden( -name => 'peso_prov',    -value => $peso_prov,    -override => 1 );
  83. print $q->hidden( -name => 'peso_neto',    -value => $peso_neto,    -override => 1 );
  84. print $q->hidden( -name => 'descarga',     -value => $descarga,     -override => 1 );
  85. print $q->h3( { -align => 'CENTER' }, 'Pesaje de Entrada y Salida' . '<br>' );
  86.  
  87. if ( defined $pesajes_pend && @$pesajes_pend > 0 ) {
  88.     print $q->table(
  89.         { -border => 0, -align => 'center' },
  90.         $q->Tr(
  91.             [         $q->td( { -align => 'left' }, 'Peso de entrada: ' . '<br>' )
  92.                     . $q->td( { -align => 'left' }, '<b>' . ($peso_entrada) . '&nbsp' . 'KG' . '</b>' ),
  93.             ]
  94.         ),
  95.         $q->Tr(
  96.             [         $q->td( { -align => 'left' }, 'Peso de salida: ' . '<br>' )
  97.                     . $q->td( { -align => 'left' }, '<b>' . ($peso_salida) . '&nbsp' . 'KG' . '</b>' ),
  98.             ]
  99.         ),
  100.         $q->Tr(
  101.             [   $q->td( { -align => 'left' }, 'Fecha y hora de Pesaje: ' . '<br>' )
  102.                     . $q->td(
  103.                     { -align => 'left' },
  104.                     '<b>' . &s_convert_dateTimeSystem_to_dateTimeHuman($timestamp) . '<br>' . '</b>'
  105.                     ),
  106.             ]
  107.         ),
  108.         $q->Tr(
  109.             [         $q->td( { -align => 'left' }, 'Placas: ' . '<br>' )
  110.                     . $q->td( { -align => 'left' }, '<b>' . ($placas) . '</b>' ),
  111.             ]
  112.         ),
  113.         $q->Tr(
  114.             [         $q->td( { -align => 'left' }, 'No. Doc. Recepción: ' . '<br>' )
  115.                     . $q->td( { -align => 'left' }, '<b>' . ($recepcion) . '</b>' ),
  116.             ]
  117.         ),
  118.         $q->Tr(
  119.             [         $q->td( { -align => 'left' }, 'Proveedor: ' . '<br>' )
  120.                     . $q->td( { -align => 'left' }, '<b>' . ($proveedor) . '</b>' ),
  121.             ]
  122.         ),
  123.         $q->Tr(
  124.             [         $q->td( { -align => 'left' }, 'Material: ' . '<br>' )
  125.                     . $q->td( { -align => 'left' }, '<b>' . ($material) . '</b>' ),
  126.             ]
  127.         ),
  128.         $q->Tr(
  129.             [         $q->td( { -align => 'left' }, 'Peso Neto Proveedor: ' . '<br>' )
  130.                     . $q->td( { -align => 'left' }, '<b>' . ($peso_prov) . '</b><br>' ),
  131.             ]
  132.         ),
  133.         $q->Tr(
  134.             [         $q->td( { -align => 'left' }, 'Sitio de Descarga: ' . '<br><br>' )
  135.                     . $q->td( { -align => 'left' }, '<b>' . ($descarga) . '</b><br><br>' ),
  136.             ]
  137.         ),
  138.     );
  139. }
  140. print $q->submit(
  141.     -align => 'center',
  142.     -name  => "||i|completar_pesaje||a|capturar_pesaje_salida|$pesajes||",
  143.     -value => 'Capturar Pesaje'
  144. ) . '<br><br>';
  145.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

NOTA: Todas las comparaciones las hace, e inserta en la base de datos los datos como son. Solo falta que me envíe lo que introduce el usuario en el 'texfield' junto con el 'radio'.

Espero me haya explicado bien :D
Última edición por explorer el 2013-10-29 10:19 @471, editado 1 vez en total
Razón: Formateado de código con Perltidy
sarriaga
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2013-10-21 08:42 @404

Publicidad

Re: Envío de valores de control radio y textfield

Notapor explorer » 2013-10-29 14:38 @651

Disculpa, pero no veo en el código ninguna referencia a 'id_doc_recepcion'.
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: Envío de valores de control radio y textfield

Notapor sarriaga » 2013-10-29 16:03 @710

Sí, ¡tienes razón! Bueno, la variable que se requiere mandar es 'id_recepcion' que es el valor del 'textfield'.
sarriaga
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2013-10-21 08:42 @404

Re: Envío de valores de control radio y textfield

Notapor explorer » 2013-10-29 18:34 @815

En el primer código veo que no estás usando la variable $id_recepcion en ningún sitio, pero bueno, no creo que ese sea el problema.

Lo que veo también es que ahí estás creando controles radio, todos con el mismo nombre, 'id', lo cual es correcto porque quieres que solo uno de ellos esté activo y te devuelva su valor. Y también estás creando controles textarea con nombres así: 'id_recepcion' . $_[0]. Es decir, cada textarea tiene un nombre distinto, lo cual es también lógico (no son controles tipo radio).

Pero... a la hora de leer el resultado, en el segundo código, haces un simple

my $id_recepcion = $q->param('id_recepcion');

y claro... ese textarea no existe.

El que te interesa leer es

my $id_recepcion = $q->param('id_recepcion' . $pesajes);

$pesajes contiene el valor 'id' del control radio que estaba activo, así que queremos leer el textarea correspondiente a ese 'id'.
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: Envío de valores de control radio y textfield

Notapor sarriaga » 2013-10-30 16:14 @718

¡Así es! Lo que quiero es recibir lo que pongo en el textfield y no había probado de esta manera: $id_recepcion = $q->param('id_recepcion' . $pesajes);. Haré la prueba para ver si me obtiene la información introducida. :)
sarriaga
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2013-10-21 08:42 @404

Re: Envío de valores de control radio y textfield

Notapor sarriaga » 2013-10-31 11:19 @513

¡explorer! Te agradezco mucho. Sí funcionó de la manera que me comentaste. Ya pude pasar los valores que introduzco en el textfield.

Muchas gracias. ¡Saludos! :D
sarriaga
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2013-10-21 08:42 @404


Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado