Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/05/2011, 08:03
khryztall
 
Fecha de Ingreso: mayo-2011
Mensajes: 47
Antigüedad: 13 años
Puntos: 1
subida de varios archivos almacenamiento en la base de datos y descarga de los mismos

Bueno con el fin de aportarle algo a esta web q me ha dado tanto les traigo este pequeño aporte espero q les sea util.

Subir archivos es ahora de vital importancia en cualquier web, subir uno es relativamente facil pero subir varios ya es otro cuento, pero todo va por partes.

1ero. subir un archivo.

lo primero es crear el formulario de subida

Código HTML:
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST" name="frmLogin" enctype="multipart/form-data">							
Archivo:
<input name="file"  type="file" />
<input type="submit" value="Inscribir" name="iniciar" />
<input type="button" value="Reset" onclick="valid.reset(); return false"/>
</form> 
como vemos en el action tengo
Código PHP:
"<?php echo $_SERVER['PHP_SELF'];?>"
lo que indica q la misma pagina q contiene el formulario es la procesa el formulario, pero en realidad puede ser cualquier pagina donde lo quieran enviar.

Lo mas importante es que la cabecera del formulario tenga esta sentencia:
Código HTML:
enctype="multipart/form-data"
, para que pueda procesar los archivos del formulario.

segundo el codigo php

Aclaracion: el codigo es una modificacion de dos codigos encontrados en este mismo foro, pero no recuerdo los usuarios, si alguien lo sabe q me envie un mensaje para poder darles credito.

Código PHP:
$foto = isset($_POST["file"])? $_POST["file"]: '';//verifica si se envio el archivo

//se configuran los parametros de subida
$folder "docs/"// Carpeta a la que queremos subir los archivos
$maxlimit 50000000000// Máximo límite de tamaño (en bits)
$allowed_ext "rar,jpg,bmp,jpeg"// Extensiones permitidas (usa una coma para separarlas)
$overwrite "no"// Permitir sobreescritura? (yes/no)
$match ""
$filesize $_FILES['file']['size']; // toma el tamaño del archivo
$str "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
$filename "";
$error="";

//se le da un nombre aleatorio al archivo
for($i=0;$i<12;$i++) 
{
$filename .= substr($str,rand(0,62),1);}                                        

if(!
$filename || $filename==""// mira si no se ha seleccionado ningún archivo
{$error "- Ningún archivo selecccionado para subir.<br>";}

elseif(
file_exists($folder.$filename) && $overwrite=="no")// comprueba si el archivo existe ya
$error "- El archivo <b>$filename</b> ya existe<br>";}

// comprobar tamaño de archivo

if($filesize 1// el archivo está vacío
{$error .= "- Archivo vacío.<br>";}
elseif(
$filesize $maxlimit// el archivo supera el máximo
{$error .= "- Este archivo supera el máximo tamaño permitido.<br>";}

$sep=explode('image/',$_FILES["file"]["type"]);
$tipo=$sep[1];

if(
$tipo == "gif" || $tipo == "jpeg" || $tipo == "jpg" || $tipo == "bmp")
{
$match "1"// Permite el archivo}                    

if(!$match)
{
$error .= "- Este tipo de archivo no está permitido: $tipo<br>";}    

if(
$error)
{print 
"Se ha producido el siguiente error al subir el archivo:<br> $error"// muestra los errores}

else
{
move_uploaded_file($_FILES['file']['tmp_name'], $folder.$filename.'.'.$tipo);} 
como podemos ver al dar un nombre aleatorio al archivo la probabilidad de sobre escritura es una en 100000000000000000000000000000, pero si no quieres generar un nombre aleatorio puedes remover la parte del for y el filename y el se guardara con el nombre original y en caso de existir otro en el servidor simplemente se sobreescribira o no dependiendo el valor q tenga la variable $overwrite.

Nota: es estrictamente necesario que el name del input en el q se guarda el archivo sea igual a parametro q toman las variables q manejan el archivo en este caso file

tercero guardarlo en la base de datos:

para q subirlo sino sabemos donde quedara, por eso lo guardaremos en la base de datos asi:
Código PHP:
$conexion = new mysqli("servidor","user","pass","base_datos");    
if(
$conexion)
{    

$insercion "INSERT INTO tabla VALUES ('".$folder.$filename.".".$tipo."')";
$result $conexion->query($insercion);        
$row_cnt $conexion->affected_rows;

if(
$row_cnt 0)
{echo 
"archivo almacenado en la base de datos";}    

else
{echo 
"archivo no almacenado";}                            

}
else
{echo 
"no hay conexion";}