Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Web » CGI y javascript  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 4 mensajes ] 
 
Nota 2009-08-04 15:40 @694
Avatar de Usuario
Perlero Nuevo
Registrado: 2009-08-04 13:53 @620
Ubicación: Valencia, España
Mensajes: 46
CGI y javascript
Hola a todos,

Mi problema es el siguiente: estoy creando un formulario sencillo mediante HTML, con toda la validación correspondiente en JavaScript, para gestionar la configuración de un servicio. Básicamente necesito que al ejecutar el formulario me cargue datos del fichero de configuración (si existe previamente) y los coloque en los textbox del formulario. Una vez modificados esos campos, al hacer submit, el CGI, de nuevo, capta los datos y así actualiza el fichero. Algo así como los entornos HTML de configuración de los routers domésticos.

Tengo todo el código HTML con el JavaScript y funciona en local pero al desplegarlo desde el servidor con Perl no funciona (he tratado de comprobar los caracteres que necesitan ser escapados, pero algo se me "escapa" definitivamente xD).

Por otra parte he mirado algunos tutoriales sobre el módulo CGI, pues creo que ahorran mucho trabajo, pero no consigo encontrar documentación sencilla pero a la vez que reúna todo lo que necesito, que no es más que captar los parámetros de la query_string y desplegar el código con los diferentes campos del formulario rellenos con los datos del hash (que cargo con los datos del fichero). Supongo que para desplegar JavaScript dentro del HTML no podré usar los métodos del módulo CGI.

Ni siquiera sé si se puede gestionar todo desde un único script Perl (que cargue de fichero si se abre el formulario, o en caso de producirse un submit guarde a fichero).

¿Alguna sugerencia de por qué no funciona el JavaScript si se despliega desde el CGI?

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. #### funcion mostrarForm ############
  4.  
  5. print "Content-type: text/html\n\n";   
  6.  
  7. print<<"FIN";
  8. <HTML>
  9. <HEAD><TITLE>CONFIGURACION THE CROW</TITLE>
  10. <SCRIPT type="text/javascript">
  11. <!--
  12. function datoErroneo(id){
  13.         document.getElementById(id).value = "";
  14.         document.getElementById(id).style.backgroundColor = "#FFD700"; 
  15. }
  16.  
  17. function datoCorrecto(id,valor){
  18.         document.getElementById(id).style.backgroundColor = "#FFFFFF"; 
  19.         document.getElementById(id).value = valor;
  20. }
  21.  
  22. function esRed(dir){
  23.         dir = dir.split(".");
  24.         return (dir[3]=="0");
  25. }
  26.  
  27. // (..................)
  28.  
  29. function validarNombre(nombre,id){
  30.         patron = /[*-+^@#\\s]/;
  31.         // averiguamos si es nombre de HOST o de DOMINIO
  32.         aux = (id.indexOf("HOST") != -1)?"HOST":"DOMINIO";     
  33.  
  34.         if(!patron.test(nombre)){
  35.                 datoCorrecto(id,nombre);               
  36.                 //alert("NOMBRE DE " + aux + " correcto");
  37.                 return true;
  38.         }else{
  39.                 datoErroneo(id);               
  40.                 //alert("NOMBRE DE " + aux + " incorrecto");
  41.                 return false;
  42.         }
  43. }
  44.  
  45. function habilitarVRRP(valor){
  46.         // habilitar interfaz,id de red, prioridad e IP de VRRP
  47.         document.getElementById("ifname").disabled = !valor;
  48.         document.getElementById("vrid").disabled = !valor;
  49.         document.getElementById("prio").disabled = !valor;
  50.         document.getElementById("ip").disabled = !valor;
  51.         return;
  52. }
  53.  
  54. function habilitarPuertos(valor){
  55.         // habilitar puertos si inet activado
  56.         document.getElementById("ALLOWED_TCP").disabled = !valor;
  57.         document.getElementById("ALLOWED_UDP").disabled = !valor;
  58.         return;
  59. }
  60.  
  61. function habilitarDHCP(valor){
  62.         // habilitar servidor DHCP
  63.         document.getElementById("dhcp-helper").disabled = !valor;
  64.         return;
  65. }
  66.  
  67. function validarPrioridad(prio,id,tipo){
  68.         switch(tipo){
  69.                 case "1":       if(prio.length==0 || isNaN(prio) || prio<1 || prio>255){
  70.                                                 datoErroneo(id);
  71.                                                 return false;
  72.                                         }
  73.                                         break;
  74.  
  75.                 case "2":       if(prio.length==0 || isNaN(prio) || prio<1 || prio>99999){
  76.                                                 datoErroneo(id);               
  77.                                                 return false;
  78.                                         }
  79.                                         break;
  80.  
  81.                 case "3":       if(prio.length==0 || isNaN(prio) || prio<1 || prio>4){
  82.                                                 datoErroneo(id);               
  83.                                                 return false;
  84.                                         }      
  85.                                         break;
  86.         }
  87.         datoCorrecto(id,prio*1);
  88.         return true;
  89. }
  90.  
  91. function validarInterfaz(ifaz,id){
  92.         patron = /[*-+^@#\\s]/;
  93.        
  94.         if(!patron.test(ifaz)){
  95.                 datoCorrecto(id,ifaz);         
  96.                 //alert("INTERFAZ correcto");
  97.                 return true;
  98.         }else{
  99.                 datoErroneo(id);               
  100.                 //alert("INTERFAZ incorrecto");
  101.                 return false;
  102.         }
  103. }
  104.  
  105. function validarNumRedes(num,id){
  106.         if(isNaN(num) || num<0 || num>10){
  107.                 datoErroneo(id);               
  108.                 //alert("CANTIDAD incorrecta");
  109.                 return false;
  110.         }
  111.         datoCorrecto(id,num * 1);      
  112.         //alert("CANTIDAD correcta");
  113.         return true;
  114. }
  115.  
  116. //-->
  117.  
  118. </SCRIPT>
  119. </HEAD>
  120. <BODY>
  121. <FORM name=formulario ENCTYPE=TEXT/PLAIN METHOD=POST><br>
  122. Direccion IP del dispositivo (Ej.:192.168.4.35/24): <INPUT TYPE=text id=IPADDR NAME=IPADDR style=text-align:center SIZE=18 MAXLENGTH=18 onchange=validarIPLarga(value,id)><br><br>
  123.  
  124. (....)
  125.  
  126. </html>

_________________
"Dios nos dió boca para pedir y el kernel de Linux para conceder/denegar servicios" (popular)


Nota 2009-08-06 09:10 @423
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: CGI y javascript
Bienvenido a los foros de Perl en español, adrolmar.

¿Dónde está la palabra "FINAL", como delimitador final del bloque?

_________________
JF^D Perl programming


Nota 2009-08-06 22:02 @959

Perlero Frecuente
Registrado: 2008-05-04 01:11 @091
Ubicación: Ciudad del Este, Paraguay
Mensajes: 140
Re: CGI y javascript
En otras palabras...
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. </html>
  2. FIN
  3. [...]
:wink:

_________________
With Perl
Imagination is more important than knowledge. Albert Einstein.


Nota 2009-08-07 03:18 @179
Avatar de Usuario
Perlero Nuevo
Registrado: 2009-08-04 13:53 @620
Ubicación: Valencia, España
Mensajes: 46
Re: CGI y javascript  RESUELTO
Primero ¡¡agradecer las respuestas!!

Acorté el código porque es enorme, y por si se veía por algún lado algún carácter especial a escapar...

¡Ya lo solucioné! Era una "maldita barra \" jeje, bueno en este caso 4:
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
ip = ip.replace(/\\s/gi,"").replace(/\\\\/g,"/");

Leí, no recuerdo dónde, que tenía que escapar doblemente los caracteres especiales si manejaba Javascript desde Perl, y así fue.

Tengo otra dudilla: he leído mucho sobre el tema pero en la practica no doy con la solución... mi intención es hacer de un campo de un hash un array, pero a la hora de acceder a los componentes del array del hash no me aclaro.

Cuando salga del curro ya en casa pongo exactamente las cosas que he probado ;)

Gracias a todos

_________________
"Dios nos dió boca para pedir y el kernel de Linux para conceder/denegar servicios" (popular)


Responder al tema  [ 4 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO