[perl] ayuda en perl
Bolo Lacertus
lacertus@servidor.unam.mx
Fri, 24 Mar 2000 15:18:18 -0600
Saludos!!!
Mmmm, ok, mando un script, basado en algo similar que hicimos en la UNAM
para publicar materiales sencillos, modificado para que que genere una
lista de registros de formato:
"campo1","campo2","campo3","campo4",imagen.ext
Las comillas son por seguridad ya que algunos DBMS las exigen, no le
pondré filtros para evitar las comillas en los campos, pero recomiendo
fuertemente que "limpies" las cadenas para evitar todo tipo de
caracteres indeseables.
Para simplificar aún mas el programa, le pongo que guarde solo cuatro
campos, literalmente "campo1","campo2","campo3","campo4" capturados en
la forma y un campo de tipo archivo de la misma.
El script va a necesitar que le cambies los nombres de los campos y que
le agreges mas en caso de que los necesites, pero en general debe jalar
bien (no lo he probado, pero es una versión reducida de uno que tenemos
en producción por lo que en el peor de los casos rompí algunos ciclos o
deje errores de sintaxis al eliminar cosas).
Sin embargo, esto hace todo lo que necesitas, agrego despues del script
nuestros segmentos de HTML como ejemplos de lo que abría que poner el
inircv.htmlp y finrcv.htmlp.
Carla Lorena Larios wrote:
> Necesito ayuda con un rollo de un formulario en la web el cual debe
> capturar informacion, en texto y una
> famosa foto que los usuarios deben enviar..........
-------------inicia programa------------
#!/usr/bin/perl
# Programa recepcion de texto y archivos para presentacion por paginas
2.0
# Daniel Sol Llaven
# 25 de Abril del 2000
#Librerias
use CGI;
use rutinas;
#Variables de configuracion
#Localizacion de los archivos de salida.
#Directorio para poner las imagenes
$media="/usr/users/pumasi/html-docs/media";
#Archivo para colocar los registros
$registros="/usr/users/pumasi/registros.csv";
#Ok, nosotros solemos colocar el HTML que el CGI responde en arvhivos
# Separados de modo que luego sea mas facil cambiar el formato, a estos
# archivos los llamamos HTMLP
#Encabezado de respuesta (que estara bajo el directorio $textos)
$textos="/usr/users/pumasi/html-docs/htmlp";
$htmlpinicio="inircv.htmlp";
#Terminacion de respuesta (tambien bajo $textos)
$htmlpfin="finrcv.htmlp";
#inicialización del CGI
$def=new CGI;
#Verificación de parámetros
if(($def->param('campo1') eq "") ||($def->param('campo2') eq "")
||($def->param('campo3') eq "") ||($def->param('campo4') eq ""))
{
#no se recibieron todos los campos del Resumen
error(4,"Modo incorrecto de ejecutar el CGI");
}
if(!open(AE,"$textos/$htmlpinicio"))
{
error(1,"Archivo de presentacion");
}
#Enviar el inicio de la forma
print "Content-type: text/html\n\n";
while(<AE>)
{
print;
}
close AE;
#Recepcion del archivo
$archivo=$def->param('archivo');
if($archivo eq "")
{
#error, no se entrego ningun archivo
print "<h1>Error!</h1>El archivo no se recibió con éxito
o no ";
print "se invoco el script de modo adecuado, por favor vuelva a
intentar, ";
print "asegurandose de dar los datos correctos del
archivo<p>\n</body></html>";
print $def->dump;
exit;
}
print "El nombre del archivo enviado es <b>$archivo</b>";
if($archivo=~/^\//)
{
print " y parece ser de\n<b>UNIX</b>";
}
else
{
if($archivo=~/\w\:\\/)
{
print "y parece ser de\n<b>DOS</b>";
}
}
#idealmente, se verifica el tipo del archivo, y en caso de ser texto se
# reformatea colocando los codigos adecuados. En este caso solo lo
guardamos
# es decir, suponemos archivo binario.
#obtener el nombre, sin extención.
if($archivo=~m/([\w\d]+)\.(\w+)/i)
{
#tomar nomrbe y extención del archivo original, pero en minusculas
$nombre=lc($1);
$nombrefe=lc($2);
}
else
{
#archivo enviado no reconocido como imagen
error(1);
}
#Escribir el archivo recibido
#print "Archivo binario recibido<p>\n";
open(AS,">$media/$nombre.$nombrefe");
$cb=0;
while(read($archivo,$chrs,1024))
{
#escribe bloques de 1024 caracteres a la salida hasta que haya error
print AS $chrs;
$cb++; #contador de bloques
}
close AS;
if($cb==0)
{
#El archivo estaba vacio o no se recive por otro motivo.
if(-z "$pathf")
{
print "rm $pathf<br>\n";
system("rm $pathf");
}
error(6);
}
#Datos de la forma
open(AD,">>$registros");
print AD "\"".$def->param('campo1')."\","\""
.$def->param('campo2')."\","\""
.$def->param('campo3')."\","\""
.$def->param('campo4')."\",$nombre.$nombrefe\n";
#notese que el nombre del archivo no esta entre comillas y que no
incluye la
# ruta, ya que se considera como conocida al poner todas las imágenes en
el
# mismo directorio.
#Enviar la terminacion de la forma de respuesta
open(AE,"$textos/$htmlpfin");
while(<AE>)
{
print;
}
close AE;
exit(0);
#Inicio de subrutinas
sub error
{
#rutina que imprime los mensajes de error adecuados.
@errores=("La extensión del archivo enviado no corresponde con
un tipo valido de gráfica",
"El nombre del archivo de texto es inválido, solo caracteres
alfanuméricos por favor",
"El archivo enviado como de texto contiene caracteres
inválidos",
"Proporcione todos los datos para la ficha de resumen",
"Error de base de datos",
"El archivo enviado no tiene información"
);
#Se indica el error
my($errno)=shift @_;
$errno--;
print "<B>ERROR</B><br>$errores[$errno]<p>";
print "<u>Por favor regrese a la forma anterior y vuelva a
intentar</u><p>";
# se termina la forma HTML
print "$comando<br>\n"; #por si el error 5
open(AE,"$textos/$htmlpfin");
while(<AE>)
{
print;
}
close AE;
exit(0);
}
-------------fin de programa------------
Archivos con el HTML que el CGI responde
------------inircv.htmlp------------
<HEAD><TITLE>Recepción de archivos</TITLE></HEAD>
<BODY BACKGROUND="/pumasi/media/WHITE5.GIF">
<TABLE WIDTH=87% ALIGN=RIGHT>
<TR>
<TD WIDTH=3% BGCOLOR="#E0B010"><FONT COLOR="#E0B010">1</FONT></TD>
<TD WIDTH=1% BGCOLOR="#E0B010"><FONT COLOR="#E0B010">1</FONT></TD>
<TD><FONT FACE="VERDANA"><FONT COLOR="#E0B010">
<H2>Proceso de recepción de archivos</H2></FONT>
En la recepción de su archivo enviado mediante HTTP:<p>
------------------------------------
------------finrcv.htmlp------------
<hr>
Sistema PUMASI, generado por
<A HREF="http://132.248.71.81/cgi-bin/lacertus/hola">
Daniel Sol Llaven 1997</A>
</TABLE>
</BODY>
------------------------------------
--
Bolo Lacertus: lacertus@servidor.dgsca.unam.mx ==~\___\
http://proteo.dgsca.unam.mx/cgi-bin/lacertus/hola =__vvvv
--------- Pie de mensaje --------------------------------
Visite: http://tlali.iztacala.unam.mx/~randrade/perl.shtml
Cancelar inscripcion:
mail to: majordomo@tlali.iztacala.unam.mx
text : unsubscribe perl