Foros del Web » Programando para Internet » Javascript »

Problema con paso de variables!!

Estas en el tema de Problema con paso de variables!! en el foro de Javascript en Foros del Web. Resulta que tengo una sentencia Sql="select nit,nombre,digito from nits where digito like '%9%' order by nit" y necesito pasarla como parametro en una funcion: <a ...
  #1 (permalink)  
Antiguo 25/08/2005, 08:32
 
Fecha de Ingreso: marzo-2004
Ubicación: Bucaramanga
Mensajes: 71
Antigüedad: 20 años, 1 mes
Puntos: 0
Problema con paso de variables!!

Resulta que tengo una sentencia Sql="select nit,nombre,digito from nits where digito like '%9%' order by nit" y necesito pasarla como parametro en una funcion:
<a href="#" onClick="enviar('<?=$sql?>');">Excel</a>

pero como el parametro tiene " ' " no me hace el traspaso bien o me produce un error,luego la funcion enviar la quiero para que me pase ese parametro por URL a otra pagina.

De antemano gracias por sus aportes y ayudas

Pd: variable sql es una variable PHP;
  #2 (permalink)  
Antiguo 25/08/2005, 09:25
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
En php se usa el = para escribir? ¿has probado con un echo?
  #3 (permalink)  
Antiguo 25/08/2005, 10:07
 
Fecha de Ingreso: marzo-2004
Ubicación: Bucaramanga
Mensajes: 71
Antigüedad: 20 años, 1 mes
Puntos: 0
Probe con el echo y es lo mismo y me trae como respuesta NaN
  #4 (permalink)  
Antiguo 25/08/2005, 10:08
 
Fecha de Ingreso: marzo-2004
Ubicación: Bucaramanga
Mensajes: 71
Antigüedad: 20 años, 1 mes
Puntos: 0
Y si le quito la " ' " osea:
<a href="#" onClick="enviar(<?=$sql?>);">Excel</a>
La pagina dice que tiene errores y no se ejecuta la funcion enviar
  #5 (permalink)  
Antiguo 25/08/2005, 10:21
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Déjame ver lo que le llega al navegador en esta línea

<a href="#" onClick="enviar('<?=$sql?>');">Excel</a>

...osea, una vez procesado el php en el servidor.

Déjame ver también la función js enviar()
  #6 (permalink)  
Antiguo 25/08/2005, 10:28
 
Fecha de Ingreso: marzo-2004
Ubicación: Bucaramanga
Mensajes: 71
Antigüedad: 20 años, 1 mes
Puntos: 0
$sql="select nit,nombre,digito from nits where digito like '%3%' order by nit";
<a href="#" onClick="enviar('<? echo $sql?>','<?=$etiquetas?>');">Excel</a>


function enviar(sql,titulos){
window.open('hoja_excel.php?sql='+sql+'&titulos='+ titulos);
}
  #7 (permalink)  
Antiguo 25/08/2005, 10:30
 
Fecha de Ingreso: marzo-2004
Ubicación: Bucaramanga
Mensajes: 71
Antigüedad: 20 años, 1 mes
Puntos: 0
tunait ya he pasado sentencias que no poseen comilla somple y me la ejecuta bien, el problemas es por esta no se si tambien por El "%"
  #8 (permalink)  
Antiguo 25/08/2005, 11:08
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Me refería a que me pongas lo que le llega al navegador. Lo que me pones es antes de llegar al navegador. Si no veo cómo llegan los datos al javascript no puedo hacer nada.

Ejecuta la página y pide código fuente y dime lo que pone en esa línea
  #9 (permalink)  
Antiguo 25/08/2005, 13:35
 
Fecha de Ingreso: marzo-2004
Ubicación: Bucaramanga
Mensajes: 71
Antigüedad: 20 años, 1 mes
Puntos: 0
Aqui esta:

<a href="#" onClick="enviar('select nit,nombre,digito from nits where digito like '%3%' order by nit','Nit,Nombre,Digito');">Excel</a>
  #10 (permalink)  
Antiguo 25/08/2005, 13:37
 
Fecha de Ingreso: marzo-2004
Ubicación: Bucaramanga
Mensajes: 71
Antigüedad: 20 años, 1 mes
Puntos: 0
Como te dije el problema es la comilla simple que se trae la cadena $sql.
  #11 (permalink)  
Antiguo 26/08/2005, 00:42
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
ok, ya veo.

mira puedes solucionarlo de la siguiente manera:

antes de escribir la variable $sql debes cambiarle el valor al string substituyendo las comillas simples dentro de la cadena por el código js que escriba el código numérico del caracter.

Si tienes esto
Código PHP:
<?php
$sql 
"select nit,nombre,digito from nits where digito like '%3%' order by nit";
?>
antes de escribirlo en el link html le haces un reemplazo

Código:
<?php
$sql = "select nit,nombre,digito from nits where digito like '%3%' order by nit";
$sql = str_replace("'","' + String.fromCharCode(39) + '",$sql);
?>
de esa forma le llegará así al navegador

Código PHP:
<a href="#" onclick="enviar('select nit,nombre,digito from nits where digito like ' + String.fromCharCode(39) + '%3%' + String.fromCharCode(39) + ' order by nit','Nit,Nombre,Digito');">Excel</a
con eso yá funciona correcto

yá me contarás

un saludo
  #12 (permalink)  
Antiguo 26/08/2005, 08:55
 
Fecha de Ingreso: marzo-2004
Ubicación: Bucaramanga
Mensajes: 71
Antigüedad: 20 años, 1 mes
Puntos: 0
Sonrisa

Probe el codigo y esta perfecto, me funciono muy bien, gracias me has sido de gran ayuda y ademas muy oportuna tus respuestas.

Pero si no es molestia me podrias explicar un poco mejor como funciona la linea que hace el truco.

  #13 (permalink)  
Antiguo 26/08/2005, 09:53
 
Fecha de Ingreso: marzo-2004
Ubicación: Bucaramanga
Mensajes: 71
Antigüedad: 20 años, 1 mes
Puntos: 0
Tengo un nuevo problema, cuando paso la variable sql a la otra pagina
por ejemplo cuando la consulta es como esta:
sql:
select nit,nombre,digito from nits where nit like '%122%' order by nit
Js:
function enviar(sql,titulos){
window.open('hoja_excel.php?sql='+sql+'&titulos='+ titulos);
}
el resultado en la otra pagina es algo asi:

select nit,nombre,digito from nits where nit like \'2%\' order by nit

Esto me ocurre con los numeros Ejm: '%55500%' me devuelve -->\'U500%\'

No se porque no me las pasa correctamente.


Lo realiza correctamente cuando son letras ó numeros de un digito.
ejem:
select nit,nombre,digito from nits where nombre like '%lopez%' order by nit

Bueno espero no molestarlos mas, ojala me puedan ayudar con esto tambien
Tunait me has sido de grana ayuda.
  #14 (permalink)  
Antiguo 26/08/2005, 10:28
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Ufa es verdad

Bueno, enviando al url la sentencia sql codificada para url deja de hacer cosas raras.

Debes alterar sólo esto en tu función js

Código:
function enviar(sql,titulos){ 
window.open('hoja_excel.php?sql='+escape(sql)+'&titulos='+titulos);
}
Creo que lo que estaba sucediendo es que al recoger el valor de la url confundía los %55 y similares con el urlencode. Así como los espacios los envía como %20 el %55 debía interpretarlo como otro caracter codificado.
Enviando el valor codificado directamente desde el javascript parece que se soluciona

dime si te funciona ok ahora
  #15 (permalink)  
Antiguo 26/08/2005, 10:42
 
Fecha de Ingreso: marzo-2004
Ubicación: Bucaramanga
Mensajes: 71
Antigüedad: 20 años, 1 mes
Puntos: 0
Sonrisa

Bueno Tunait me has dejado con una gran impresion, tienes una solucion ha cada embrollo, me funciono excelente, y sobre todo la prontitud de tus respuestas.

Te estoy muy agradecido y espero no seguir molestando "si no es necesario".

Saludos
  #16 (permalink)  
Antiguo 26/08/2005, 10:43
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Cita:
Iniciado por jeffcar
Probe el codigo y esta perfecto, me funciono muy bien, gracias me has sido de gran ayuda y ademas muy oportuna tus respuestas.

Pero si no es molestia me podrias explicar un poco mejor como funciona la linea que hace el truco.

Pues lo que hace es en vez de usar el caracter correspondiente a la comilla simple escribir en su lugar su código numérico de caracter.

Si en php le pides un echo chr(39) te escribirá una comilla simple, en asp le pides un response.write chr(39) escribirá lo mismo y la forma en javascript es con String.fromCharCode(39)

document.write(String.fromCharCode(39))

eso escribirá la comilla simple.

Así la comilla no estorba anidada dentro de la cadena que hay que enviar a la función js y a la función yá le llega directamente con la comilla escrita.

Obviamente en la llamada a la función el String.fromCharCode() no puede estar dentro del string (no es como php que acepta una variable dentro de un string) así que hay que hacer una concatenación

'select nit,nombre,digito from nits where digito like ' + String.fromCharCode(39) + '%55500%' + String.fromCharCode(39) + ' order by nit'

finalmente para que se escriba así desde php se hace un reemplazo de cada comila simple por lo necesario para que quede la sentencia js correcta e voilá
  #17 (permalink)  
Antiguo 26/08/2005, 10:56
 
Fecha de Ingreso: marzo-2004
Ubicación: Bucaramanga
Mensajes: 71
Antigüedad: 20 años, 1 mes
Puntos: 0
Sonrisa

te lo agradezco, muy instructivo, lo aplicare donde sea necesario.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:24.