Foros del Web » Programación para mayores de 30 ;) » Programación General »

Procesar variables de un formulario con multipart

Estas en el tema de Procesar variables de un formulario con multipart en el foro de Programación General en Foros del Web. Hola, tengo un CGI escrito en C con el siguiente formulario: printf("</pre><form method=post action=\"conf_metadata\" enctype=\"multipart/form-data\">"); printf("<center>"); printf("<p><h3>EntityDescriptor</h3> <input name=ed size=60> "); printf("<p><h3>Encryption certificate</h3> <input type=\"file\" ...
  #1 (permalink)  
Antiguo 13/10/2009, 09:46
 
Fecha de Ingreso: noviembre-2008
Mensajes: 4
Antigüedad: 15 años, 5 meses
Puntos: 0
Procesar variables de un formulario con multipart

Hola, tengo un CGI escrito en C con el siguiente formulario:

printf("</pre><form method=post action=\"conf_metadata\" enctype=\"multipart/form-data\">");
printf("<center>");
printf("<p><h3>EntityDescriptor</h3> <input name=ed size=60> ");
printf("<p><h3>Encryption certificate</h3> <input type=\"file\" name=ce size=20> <img src=\"cifrado2.gif\" width=120 height=80 align=middle>");
printf("<p><h3>Signing certificate</h3> <input type=\"file\" name=cs size=20> <img src=\"firma2.gif\" width=120 height=80 align=middle>");
printf("</center>");
printf("<h3>Type of Metadata</h3>\n");
printf("<p><input type=checkbox name=mg value=1> <h4>Generic</h4>\n");
printf("<input type=checkbox name=mf value=1 disabled> <h4>Federation profiles</h4>\n");
printf("<input type=checkbox name=mn value=1 disabled> <h4>Federation and name identifier profiles</h4></p><br>\n");
printf("<input type=submit name=send value=\" SEND DATA \">\n");


y me gustaría obtener del POST los datos que rellena el usuario (el campo "ed", el contenido de los ficheros "ce" y "cs") y la opción elegida en el checkbox.

¿Alguien me podría decir si existe código C o proporcionar un ejemplo de cómo procesar un formulario multipart/form-data?¿Se podría hacer con JavaScript? Lo que pasa esq necesito tener esos datos en el lado del servidor y mi código está en C. ¿Alguien me podría aconsejar acerca de cómo procesar estos datos?

Gracias
  #2 (permalink)  
Antiguo 14/10/2009, 20:07
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
Respuesta: Procesar variables de un formulario con multipart

No puedes usar Perl en vez de C ? son muy parecidos y en Perl es bien fácil, con el módulo CGI simplemente llamas a una función que te traiga todas las variables del form...

Si te interesa checkea los tutos de www.perlenespanol.com

Saludos
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 15/10/2009, 02:10
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 17 años, 11 meses
Puntos: 11
Respuesta: Procesar variables de un formulario con multipart

Obtener los parámetros enviados por POST es muy fácil: llegan por la entrada estándar. Solo tienes que ir leyéndola e interpretar los diversos pares de parámetro/valor, separados por '&', algo que también es fácil de hacer con strtok().

Aquí tienes un resumen:

Código:
int main()
{
     void destripa(char *lin);
     char linea[MAX];
     
     strcpy(linea,"");
     fgets(linea, MAX, stdin);
     destripa(linea);
}

void destripa(char *lin)
{
     int tam;
     char *txt;
     char *p;

     tam=strlen(lin);
     txt=(char *)malloc(tam);

     strcpy(txt,lin);

     printf ("Content-Type: text/html\n\n");
     printf("<html><body><h3>Analisis de los datos enviados mediante POST<h3>\n");
     p = strtok(txt, "&");
     while (p)
     {
       printf("<b>Pareja Nombre/Valor :<b> <font color=\"RED\">%s<font><br>\n", p);
       p = strtok(NULL, "&");
     }
     printf ("<body><html>\n");

}
El main() se encarga de declarar las variables que vamos a usar, y de leer de la entrada estándar (stdin).

Luego, la función destripa(), con la ayuda de strtok() y un puntero, va leyendo lo leído y sacando los pares parámetro/valor. En este ejemplo salen a la salida estándar, pero podrían ser almacenados para ser usados en otras partes del programa.

Código completo

Con Perl es un poco más corto.
__________________
JF^D Perl Programming en Español
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 18:17.