• Publicidad

No detecto el error en esta consulta SQL

¿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.

Re: No detecto el error en esta consulta SQL

Notapor danimera » 2012-09-04 11:16 @511

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  return "<pre>".length( $q->param('barrio'));    
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Sintáxis: [ Descargar ] [ Ocultar ]


Pero veámoslo más atrás... el código que uso:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # recibo los datos de un formulario
  2.  
  3.     $params = $q->Vars;
  4.  
  5.     return "<pre>".Dumper $params;
  6.     my $result = $self->ejecutarAlerta($params,4);  # reemplazar 4 por $clienteid
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ese Dumper me arroja

Sintáxis: [ Descargar ] [ Ocultar ]
  1. $VAR1 = { 
  2.      '_submitted_form_interesados' => '1', 
  3.      'interesado' => '658658', 
  4.      'mode' => 'guardar_form_interesados', 
  5.      'idInmueble' => '469', 
  6.      'moneda' => 'ARS', 
  7.      'pais' => '10', 
  8.      'provincia' => '1055', 
  9.      'localidad' => '43140', 
  10.      'barrio' => '10100', 
  11.      'radio' => '1', 
  12.      'tipo_oferta' => 'casas', 
  13.      'operacion' => 'temporada', 
  14.      'dormitorios' => '1', 
  15.      'banos' => '1', 
  16.      'precio' => '90', 
  17.      'otros' => 'Patioalarmacada_de_encargadointernet_wifi', 
  18.      'nombre' => 'daniel', 
  19.      'apellidos' => 'mera', 
  20.      'email' => '[email protected]', 
  21.      'email_alternativo' => '', 
  22.      'telefono' => '', 
  23.      'movil' => '', 
  24.      'movil_empresa' => '', 
  25.      'skype' => '', 
  26.      'paisI' => '53', 
  27.      'provinciaI' => '1422', 
  28.      'localidadI' => '3615', 
  29.      'Messenger' => '[email protected]', 
  30.      'Facebook' => '', 
  31.      'Twitter' => '', 
  32.      'MySpace' => '', 
  33.      'Linkedin' => '', 
  34.      'pin' => '', 
  35.      '_submit' => 'Submit' 
  36.     }; 
  37.  


Pero cuando veo el código fuente de mi navegador
Sintáxis: [ Descargar ] [ Ocultar ]
  1. <pre>$VAR1 = { 
  2.      '_submitted_form_interesados' => '1', 
  3.      'interesado' => '658 658', 
  4.      'mode' => 'guardar_form_interesados', 
  5.      'idInmueble' => '469', 
  6.      'moneda' => 'ARS', 
  7.      'pais' => '10', 
  8.      'provincia' => '1055', 
  9.      'localidad' => '43140', 
  10.      'barrio' => '1010 0', 
  11.      'radio' => '1', 
  12.      'tipo_oferta' => 'casas', 
  13.      'operacion' => 'temporada', 
  14.      'dormitorios' => '1', 
  15.      'banos' => '1', 
  16.      'precio' => '90', 
  17.      'otros' => 'Patio alarma cada_de_encargado internet_wifi', 
  18.      'nombre' => 'daniel', 
  19.      'apellidos' => 'mera', 
  20.      'email' => '[email protected]', 
  21.      'email_alternativo' => '', 
  22.      'telefono' => '', 
  23.      'movil' => '', 
  24.      'movil_empresa' => '', 
  25.      'skype' => '', 
  26.      'paisI' => '53', 
  27.      'provinciaI' => '1422', 
  28.      'localidadI' => '3615', 
  29.      'Messenger' => '[email protected]', 
  30.      'Facebook' => '', 
  31.      'Twitter' => '', 
  32.      'MySpace' => '', 
  33.      'Linkedin' => '', 
  34.      'pin' => '', 
  35.      '_submit' => 'Submit' 
  36.     }; 


Ahora lo raro es que cuando saco el length( $q->param('barrio')) el valor es 4... entonces ¿por qué al pasar $params = $q->Vars; ya saca otra cosa el length( $params->{barrio}), que me devuelve 6?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  $params = $q->Vars;
  2.  
  3.     return "<pre>".length( $params->{barrio});
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


resultado

Sintáxis: [ Descargar ] [ Ocultar ]
:? :? :?
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: No detecto el error en esta consulta SQL

Notapor explorer » 2012-09-04 12:17 @553

A ver... en principio, son dos cosas distintas:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print $q->param('barrio');   # CGI nos saca el valor del parámetro 'barrio'
  2.  
  3. $params = $q->Vars;          # Vars nos devuelve una referencia a un hash
  4. print $params->{barrio};     # del que podemos acceder a sus elementos
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


En teoría, deberían devolver el mismo valor...

Ahora bien, en el manual de CGI, en la sección FETCHING THE PARAMETER LIST AS A HASH, se dice:
Cuando se usa esto, la cosa es que debes prestar atención por los parámetros CGI multievaluados. Debido a que un hash no puede distinguir entre contexto escalar y lista, los parámetros multievaluados serán devueltos como una cadena de caracteres empaquetada, separadas por el carácter "\0" (nulo). Debes separar esta cadena de caracteres empaquetada para poder obtener los valores individuales.

Bien, ya nos acercamos: el carácter extraño que hay entre 10101 y 0 es un "\0" (byte 0). Por eso, en la pantalla del navegador no se ve, pero sí en el código.

Si, además, lo unimos con tu respuesta anterior, en la que sacas esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
    $VAR1 = '1010';
    $VAR2 = '0';
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
llegamos a la conclusión de que en el formulario, 'barrio' contiene más de un valor (hay más de una caja de texto o de formulario con el nombre 'barrio'.

Entonces, si haces
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @barrio = $q->param('barrio');      # ejecución en contexto lista
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Verás que @barrio contiene dos valores, el correcto y el '0'.
Cosa distinta es como lo ejecutabas antes
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $barrio = $q->param('barrio');      # ejecución en contexto escalar
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

En contexto escalar, solo obtenemos el primer valor de param('barrio'), por lo que solo obtenías el valor bueno (4 caracteres).

Y llegamos a
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $barrio = $params->->{barrio};      # salida de los valores, de forma empaquetada
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

El hacerlo de esta manera nos devuelve una cadena empaquetada con todos los valores unidos con "\0", y por eso su longitud ahora es 6: los 4 del primer valor, el "\0" de en medio, y el '0' del segundo valor.

Para obtener los valores, nos dicen que hay que hacer un split("\0") (no sé si se escribirá así).

Pues eso: repasa tu formulario, que tendrás más de un 'barrio'...
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: No detecto el error en esta consulta SQL

Notapor danimera » 2012-09-05 07:09 @339

¡¡¡¡ Problema solucionado !!!!

Gracias, explorer... Era un doble campo 'barrio', pero esto me ayudó a comprender lo que pasaría en esos casos :lol:
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

Anterior

Volver a Intermedio

¿Quién está conectado?

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