Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-09-2006
cisco cisco is offline
Registrado
 
Registrado: sep 2006
Posts: 7
Poder: 0
cisco Va por buen camino
error al pasar un parámetro string desde php a javascript

Hola a todos,

Estoy haciendo mis primero pinitos con php y javascript. La verdad es que es muy autodidacta....
Lo que me a llevado hasta aquí es un pequeño problema por el cual llevo muchas horas invertido y no encuentro su solución (incluso buscando info por internet).

Voy al tajo,

Tengo una web hecha en php con su correspondiente html (utilizo el CodeCharge Studio). Los ficheros implicados son: Index.php, Index.html y Funciones.js.

Desde Index.php intercepto cuatro parámetros y los envío a una función javascript situada en Funciones.js (está declarada en Index.html). El problema surge cuando uno de los parámetros que intento enviar es de tipo string, hasta el punto de que si anulo este y dejo los tres restantes (de tipo float e integer) el c´dogio funciona de maravilla.

A continuación os presento el código:

http://.... Index.php?s_MATRICULA=12345-JVC&s_A=2.4&s_B=5&s_C=6.78

Los parámetros los intercepto en el Index.php de la siguiente forma:

Código PHP:
$Matricula CCGetFromGet("s_MATRICULA","0");
$A =  CCGetFromGet("s_A","0");
$B CCGetFromGet("s_B","0");
$C CCGetFromGet("s_C","0"); 
Luego siguiendo el mismo Index.php, intento enviar estos parámetros después de un proceso de filtrado a una función javascript que hace un cálculo algo complejo.

Código PHP:
$MapaHTML->SetValue("<body onload='Ver_Parametros('" $Matricula "'," $A "," $B "," $C ")'>"); 
La función Ver_Parametros está implementada en Funciones.js de la siguiente forma:

Código PHP:
function Ver_Mapa_Posicion(matricula,a,b,c) {
     
// Para comprobar que el parametro string se passa correctamente
  
alert(matricula);
  
alert(a);
  
alert(b);
  
alert(b);

Por supuesto, Funciones.js está declarada en Index.html dentro del Head

Cuando cargo la página Index.php con sus parámetros (una vez subida al servidor), me encuentro que no se ejecuta la función. En cambio si quito el parámetro string Matricula entonces si que funciona (se visualizan los tres parámetros A, B,C). Creo que el problema viene por el paso del parámetro MAtricula de tipo string que hace que la función no se ejecute, además no me da ningún error.

¿Alguno de vosotros me podría ayudar, o darme alguna pista?.. Si quereis mi opinión, creo que la solución debe ser la cosa más tonta de la faz de la tierra, pero soy incapaz de solucionarlo. Estos errores son lo que más cuestan de encontrar....

Gracias y un fuerte abrazo.

Lluís
Responder Con Cita
  #2  
Antiguo 26-09-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

He notado lo siguiente es esta línea:

Código PHP:
$MapaHTML->SetValue("<body onload='Ver_Parametros('" $Matricula "'," $A "," $B "," $C ")'>"); 
y es que te falta un punto de concatenación antes de $Matricula:

Código PHP:
$MapaHTML->SetValue("<body onload='Ver_Parametros('" $Matricula "'," $A "," $B "," $C ")'>"); 
No se si sea un error al poner tu código en el foro o lo tengas en realidad así, y la verdad tampoco se si sea este la causa de tu error, pero podrías verificar eso...

Por otro lado, puede que la cadena pasada en $Matricula tenga algún caracter especial que no se pueda pasar por parámetro sin usar códigos especiales, por ejemplo á = &aacute;...

Espero que te de una pista sobre tu problema...


Saludos...
Responder Con Cita
  #3  
Antiguo 26-09-2006
cisco cisco is offline
Registrado
 
Registrado: sep 2006
Posts: 7
Poder: 0
cisco Va por buen camino
Gracias maeyanes. EL error de concatenación ha sido mio al escribirlo en el foro, puesto que he cambiado nombres de variables.

Respecto al contenido del string, son matrículas de coches, sin carácteres especiales salvo el -.

Haber si alguien me puede echar un cable.

Saludos
Responder Con Cita
  #4  
Antiguo 26-09-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola de nuevo...

Checa esta página a ver si te puede ayudar un poco con tu problema: http://www.zend.com/zend/tut/tutoria...1&anc=0&view=1



Saludos...
Responder Con Cita
  #5  
Antiguo 26-09-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Entre el paso original del parámetro:

Código:
?s_MATRICULA=12345-JVC
y el

Código:
alert(matricula);
hay dos cosas:

1. La obtención del parámetro con php mediante una función CCGetFromGet que desconcemos.

2. Un proceso de filtrado que mencionas pero no describes.

Sería interesante saber qué pasa con ese parámetro antes de llegar a la función de JS; es decir, usar un echo en PHP para ver si CCGetFromGet hace lo que piensas que hace y para ver cómo queda el parámetro luego del filtrado.

Otra cosa es que si la función JS no se muestra, aun cuando no aparezca un error, muy posiblemente si lo hay. Si estás usando IE para probar, debe aparecer un icono a la izquierda de la barra de estado (abajo) con un circulito amarillo con cruz. Si das doble click ahí te aparece una ventana que te "indica" el error. Lo entrecomillo porque la información de IE es bastante mala.

Si aún no lo usas, yo te recomiendo que hagas las pruebas con FireFox, cuya consola JavaScript te ahorrará horas de rastreo de errores de JS.

// Saludos
Responder Con Cita
  #6  
Antiguo 26-09-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Román
Si aún no lo usas, yo te recomiendo que hagas las pruebas con FireFox, cuya consola JavaScript te ahorrará horas de rastreo de errores de JS.
Una extensión para FireFox de nombre FireBug me parece muy recomendable también. Tampoco debe faltarte la extensión WebDeveloper.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 26-09-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ah sí, muy buenas

// Saludos
Responder Con Cita
  #8  
Antiguo 27-09-2006
cisco cisco is offline
Registrado
 
Registrado: sep 2006
Posts: 7
Poder: 0
cisco Va por buen camino
Primero de todo agradecer a Dec esas útiles herramientas que me he descargado para el Firefox y que sin ellas era como ir por una habitación oscura. Pues bien, una vez instaladas he podido observar donde está el error, pero no su solución. Creo que es lo que pensava, pues este dichoso parámetro string, no lo coge como tal y debe cortar la función o algo asi. Para verlo mejor e cambiado el parámetro string por BT-3669-BC.

Estos son los dos errores que me salen con el debug de firefox:

Código PHP:
BT is not defined

y en la siguiente línea

syntax error
Ver_Mapa_Posicion

Este es el código html exacto que me muestra el debuger de Firefox (con sus formato de colores igual)

<body onload='Ver_Mapa_Posicion('BT-3669-BC',41.736375,1.83221333333,12,24)'>

Se vuelve a apreciar que el parámetros string no lo paso correctamente. Al menos eso es lo que parece, pues creo que solo debería estar en rojo la cadena de texto, y además, el último parentesis de la función debería ser azul.

Respecto lo que comenta Roman, la función CCGetFromGet es propia del CodeCharge Studio y se utiliza para cojer un parámetro de entrada al cargar la web en php. Esta función cumple perfectamente su cometido, y no me da ningún problema. Respecto al filtrado, no lo he comentado por que está dentro de la función Ver_Mapa_Posicion(...y este no se llega a ejecutar. Inluso lo he llegado a eliminar dejando solo los Alerts que puse al principio de este post, pero no se ejecutan.

Una ayuda Please... ¿Como puedo passar este parámetro string?

Saludos


Responder Con Cita
  #9  
Antiguo 27-09-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Creo ver donde está tu problema. Los valores de los atributos de las etiquetas HTML deben ir entre comillas dobles (") y no comillas simples.

Has que PHP forme esta cadena como:

Código PHP:
<body onload="Ver_Mapa_Posicion('BT-3669-BC',41.736375,1.83221333333,12,24)"
Espero que con esto soluciones tu problema...


Saludos...
Responder Con Cita
  #10  
Antiguo 27-09-2006
cisco cisco is offline
Registrado
 
Registrado: sep 2006
Posts: 7
Poder: 0
cisco Va por buen camino
Hola Marcos,

Si este es el código en PHP y $Matricula=:"BT-3669-BC";

Código PHP:
$MapaHTML->SetValue("<body onload='Ver_Parametros('" $Matricula "'," $A "," $B "," $C ")'>"); 
¿Como puedo montar dicha cadena?, es que con tu último ejemplo lo haces sin variables...

Gracias y un fuerte abrazo.
Responder Con Cita
  #11  
Antiguo 27-09-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Prueba con:

Código PHP:
BodyTag := sprintf("<body onload=\"Ver_Parametros('%s', %d, %d, %d')\">"$Matricula$A$B$C);
$MapaHTML->SetValue(BodyTag); 
Para más información, busca la ayuda sobre la función sprintf de PHP...


Saludos...
Responder Con Cita
  #12  
Antiguo 27-09-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
También podría ser así:

Código PHP:
// Añadimos las comillas para js desde antes
$Matricula '"'.$Matricula.'"';

$MapaHTML->SetValue("<body onload='Ver_Parametros(" $Matricula "," $A "," $B "," $C ")'>"); 
// Saludos
Responder Con Cita
  #13  
Antiguo 27-09-2006
cisco cisco is offline
Registrado
 
Registrado: sep 2006
Posts: 7
Poder: 0
cisco Va por buen camino
Thumbs up Por Finnnn!!!!!!!!!!

YEAH! , ya está funcionando

Finalmente he optado por la solución de Roman, es esta (Un Copy & Paste)

Código PHP:
$Matricula '"'.$Matricula.'"';

$MapaHTML->SetValue("<body onload='Ver_Parametros(" $Matricula "," $A "," $B "," $C ")'>"); 

Que torpe soy.... . Ya me imaginaba que sería la mayor de las tonterías.

Respecto los del sprintf no lo he probado, pues me ha parecido más complicado visto la solución de Roman.

Pues nada, Un fuerte SALUDO a todos y muchas gracias por la solución.
Responder Con Cita
  #14  
Antiguo 27-09-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por cisco
Ya me imaginaba que sería la mayor de las tonterías
No es ninguna tontería. Cualquiera se confunde con tantas comillas involucradas. En este caso estamos hablando de comillas tanto en php como en js.

// Saludos
Responder Con Cita
  #15  
Antiguo 27-09-2006
cisco cisco is offline
Registrado
 
Registrado: sep 2006
Posts: 7
Poder: 0
cisco Va por buen camino
Cita:
Empezado por roman
No es ninguna tontería. Cualquiera se confunde con tantas comillas involucradas. En este caso estamos hablando de comillas tanto en php como en js.

// Saludos
Te entiendo, escribí ese comentario debido a las mil pruebas que realizé y no caí en ese ejemplo. Es más, posiblemente anduve muy cerca de esa solución.

Está claro que todo el mundo se puede confundir con este tipo de errores.

Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ejecutar función de JavaScript a partir del nombre de su identificador (string) dec HTML, Javascript y otros 12 24-08-2006 01:30:45
pasar parametro pharaonhx Conexión con bases de datos 3 10-05-2006 19:02:50
Pasar parametro a un QuickReport desde un formulario DobleSiete Impresión 3 12-01-2005 13:14:25
pasar parametro a un procedimiento desde select hibero Firebird e Interbase 2 01-06-2004 19:58:42


La franja horaria es GMT +2. Ahora son las 00:17:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi