Página 2 de 2

Re: No detecto el error en esta consulta SQL

NotaPublicado: 2012-09-04 11:16 @511
por danimera
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 ]
:? :? :?

Re: No detecto el error en esta consulta SQL

NotaPublicado: 2012-09-04 12:17 @553
por explorer
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'...

Re: No detecto el error en esta consulta SQL

NotaPublicado: 2012-09-05 07:09 @339
por danimera
¡¡¡¡ Problema solucionado !!!!

Gracias, explorer... Era un doble campo 'barrio', pero esto me ayudó a comprender lo que pasaría en esos casos :lol: