• Publicidad

CGI y javascript

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

CGI y javascript

Notapor adrolmar » 2009-08-04 15:40 @694

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?

Sintáxis: [ Descargar ] [ Ocultar ]
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>
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
adrolmar
 

Publicidad

Re: CGI y javascript

Notapor explorer » 2009-08-06 09:10 @423

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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: CGI y javascript

Notapor netsoul » 2009-08-06 22:02 @959

En otras palabras...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. </html>
  2. FIN
  3. [...]
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
:wink:
With Perl
Imagination is more important than knowledge. Albert Einstein.
netsoul
Perlero nuevo
Perlero nuevo
 
Mensajes: 150
Registrado: 2008-05-04 01:11 @091

Re: CGI y javascript

Notapor adrolmar » 2009-08-07 03:18 @179

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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
ip = ip.replace(/\\s/gi,"").replace(/\\\\/g,"/");
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

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
adrolmar
 


Volver a Web

¿Quién está conectado?

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