Foros del Web » Programando para Internet » PHP »

Subir multiples archivos y guardar ruta en una DB

Estas en el tema de Subir multiples archivos y guardar ruta en una DB en el foro de PHP en Foros del Web. Hola a todos eh buscado por la web y eh visto otros temas creados en el foro pero ninguno me puede sacar del problema, lo ...
  #1 (permalink)  
Antiguo 21/03/2015, 23:16
 
Fecha de Ingreso: febrero-2015
Ubicación: Mexico
Mensajes: 46
Antigüedad: 9 años, 9 meses
Puntos: 3
Subir multiples archivos y guardar ruta en una DB

Hola a todos eh buscado por la web y eh visto otros temas creados en el foro pero ninguno me puede sacar del problema,

lo que necesito es que mediante 3 inputs type file cargar 3 archivos en este caso son pdf y necesito mandarlos a una carpeta y que su ruta de cada uno se guarde en la DB, esto es necesario ya que en otra pagina lo listo en forma de tabla y necesito que me liste esos 3 archivos en la tabla para poder verlos.

me gustaria que me ayudaran.

Gracias!!

en la tabla seria algo asi

archivos
id_archivo
nombe
ruta_archivo1
ruta_archivo2
ruta_archivo3
__________________
Agradecer no cuenta nada \o/ +1

<<-----CentOS----->>
  #2 (permalink)  
Antiguo 21/03/2015, 23:33
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Subir multiples archivos y guardar ruta en una DB

¿Y en qué parte tienes problemas con el código que has elaborado para dar solución a tu problema? Porque al menos lo has intentado con los ejemplos que dices haber encontrado y no estarás esperando a que te demos todo hecho, ¿verdad?

Si te sirve de ayuda: Subida de múltiples archivos.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 21/03/2015, 23:50
 
Fecha de Ingreso: febrero-2015
Ubicación: Mexico
Mensajes: 46
Antigüedad: 9 años, 9 meses
Puntos: 3
Respuesta: Subir multiples archivos y guardar ruta en una DB

Bueno mira estoy usando este codigo para subir los archivos a la carpeta y funciona bien.
PERO no se en que parte y como hacer para que me guarde la ruta en la base de datos, no se que variables declarar y donde hacer la query.

index.php
Código PHP:
<html>
<
head>
    <
meta charset="utf-8">
    <
title>Multiple uploads con php</title>
</
head>
<
body>
    <
form action="upload.php" method="post" accept-charset="utf-8" enctype="multipart/form-data">
        <
label>Archivo 1:</label><input type="file" name="userfile[]" /><br /><br />
        <
label>Archivo 2:</label><input type="file" name="userfile[]" /><br /><br />
        <
label>Archivo 3:</label><input type="file" name="userfile[]" /><br /><br />
        <
label>Archivo 4:</label><input type="file" name="userfile[]" /><br /><br />
        <
input type="submit" value="Subir imágenes" />
    </
form>
</
body>
</
html
upload.php
Código PHP:
<?php
//solo se puede acceder si es una peticion post
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    
//llamamos a la clase multiupload
    
require_once("multiupload.php");
    
//array de campos file del formulario
    
$files $_FILES['userfile']['name'];
    
//creamos una nueva instancia de la clase multiupload
    
$upload = new Multiupload();
    
//llamamos a la funcion upFiles y le pasamos el array de campos file del formulario
    
$isUpload $upload->upFiles($files);
    
}else{
    throw new 
Exception("Error Processing Request"1);
}
?>
multiupload.php
Código PHP:
<?php
class Multiupload
{

    
/**
    *sube archivos al servidor a través de un formulario
    *@access public
    *@param array $files estructura de array con todos los archivos a subir
    */
    
public function upFiles($files = array())
    {
        
//inicializamos un contador para recorrer los archivos
        
$i 0;

        
//si no existe la carpeta files la creamos
        
if(!is_dir("archivos/")) 
            
mkdir("archivos/"0777);
         
        
//recorremos los input files del formulario
        
foreach($files as $file
        {
            
//si se está subiendo algún archivo en ese indice
            
if($_FILES['userfile']['tmp_name'][$i])
            {
                
//separamos los trozos del archivo, nombre extension
                
$trozos[$i] = explode("."$_FILES["userfile"]["name"][$i]);

                
//obtenemos la extension
                
$extension[$i] = end($trozos[$i]);

                
//si la extensión es una de las permitidas
                
if($this->checkExtension($extension[$i]) === TRUE)
                {

                    
//comprobamos si el archivo existe o no, si existe renombramos 
                    //para evitar que sean eliminados
                    
$_FILES['userfile']['name'][$i] = $this->checkExists($trozos[$i]);           

                    
//comprobamos si el archivo ha subido
                    
if(move_uploaded_file($_FILES['userfile']['tmp_name'][$i],"archivos/".$_FILES['userfile']['name'][$i]))
                    {
                        echo 
"subida correctamente";
                        
//aqui podemos procesar info de la bd referente a este archivo
                    

                
//si la extension no es una de las permitidas
                
}else{
                    echo 
"la extension no esta permitida";
                }
            
//si ese input file no ha sido cargado con un archivo
            
}else{
                echo 
"sin imagen";
            }
            echo 
"<br />";
            
//en cada pasada por el loop incrementamos i para acceder al siguiente archivo
            
$i++;     
        }   
    }

    
/**
    *funcion privada que devuelve true o false dependiendo de la extension
    *@access private
    *@param string 
    *@return boolean - si esta o no permitido el tipo de archivo
    */
    
private function checkExtension($extension)
    {
        
//aqui podemos añadir las extensiones que deseemos permitir
        
$extensiones = array("jpg","png","gif","pdf");
        if(
in_array(strtolower($extension), $extensiones))
        {
            return 
TRUE;
        }else{
            return 
FALSE;
        }
    }

    
/**
    *funcion que comprueba si el archivo existe, si es asi, iteramos en un loop 
    *y conseguimos un nuevo nombre para el, finalmente lo retornamos
    *@access private
    *@param array 
    *@return array - archivo con el nuevo nombre
    */
    
private function checkExists($file)
    {
        
//asignamos de nuevo el nombre al archivo
        
$archivo $file[0] . '.' end($file);
        
$i 0;
        
//mientras el archivo exista entramos
        
while(file_exists('archivos/'.$archivo))
        {
            
$i++;
            
$archivo $file[0]."(".$i.")".".".end($file);       
        }
        
//devolvemos el nuevo nombre de la imagen, si es que ha 
        //entrado alguna vez en el loop, en otro caso devolvemos el que
        //ya tenia
        
return $archivo;
    }
}
?>
AGRADECERIA MUCHO SU AYUDA.
__________________
Agradecer no cuenta nada \o/ +1

<<-----CentOS----->>
  #4 (permalink)  
Antiguo 22/03/2015, 00:12
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Subir multiples archivos y guardar ruta en una DB

Si asignas $_FILES['userfile']['name'] a $files y luego envías esa variable al método, ¿por qué sigues intentando trabajar con $_FILES['userfile']['name'] dentro del método? Además, si estás usando el bucle foreach, ya no haría falta el uso de un contador, que en este caso es la variable $i.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 22/03/2015, 00:27
 
Fecha de Ingreso: febrero-2015
Ubicación: Mexico
Mensajes: 46
Antigüedad: 9 años, 9 meses
Puntos: 3
Respuesta: Subir multiples archivos y guardar ruta en una DB

@Alexis88

Entiendo lo que dices, igualmente ese codigo lo eh agarrado de internet y lo entiendo en su mayoria y se que se puede depurar y hacer mas limpio el codigo solo que por el momento mi prioridad es poner la ruta de cada uno de los archivos que se suben en la DB para asi llamarlos posteriormente.

tengo una pequeña duda,
normalmente cuando comenze a leer como subir archivos a un servidor si se trataba de uno usaba este codigo para subir y guardar la ruta:
Código PHP:
Ver original
  1. $archivo= $_FILES["file"]["tmp_name"];
  2.     $destino= "archivos/".$_FILES["file"]["name"];
  3.     $name = $_FILES["file"]["name"];
  4.  
  5.     move_uploaded_file($archivo, $destino);
  6.     $ruta="../archivos/".$name; //guardar ruta en DB

ahora se me acaba de ocurrir tal vez algo tonto o mal hecho pero lo quise hacer probar y fue esto:
Código PHP:
Ver original
  1. $archivo= $_FILES["file"]["tmp_name"];
  2.     $destino= "archivos/".$_FILES["file"]["name"];
  3.     $name = $_FILES["file"]["name"];
  4.  
  5.     move_uploaded_file($archivo, $destino);
  6.     $ruta="../archivos/".$name; //guardar ruta en DB
  7.  
  8.        
  9.  
  10.  
  11.     $archivo2= $_FILES["file2"]["tmp_name"];
  12.     $destino2= "archivos/".$_FILES["file2"]["name"];
  13.     $name2 = $_FILES["file2"]["name"];
  14.  
  15.     move_uploaded_file($archivo2, $destino2);
  16.     $ruta2="../archivos/".$name2; //guardar ruta en DB

Con esto "de alguna manera" hace lo que quiero a manera super simple, subir 2 archivos y guardar la ruta de cada uno de ellos, mi pregunta sobre esto es ¿que hay de malo en usar el codigo anterior? (posiblemente me digas que uno de los puntos malos es usar codigo de manera innecesaria) pero que otras cosas pueden resultar mal al hacer eso??
__________________
Agradecer no cuenta nada \o/ +1

<<-----CentOS----->>
  #6 (permalink)  
Antiguo 22/03/2015, 00:38
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Subir multiples archivos y guardar ruta en una DB

El código original no funciona porque el método no reconoce a $_FILES['userfile']['name'] debido a que nunca recibe dicha variable, solo recibe a $files. Es lo que te dije en mi anterior respuesta.

La idea la tienes y como lo que recibes es un array con archivos, solo te queda usar un bucle y aplicar esas líneas de código en cada archivo.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 22/03/2015, 00:41
 
Fecha de Ingreso: febrero-2015
Ubicación: Mexico
Mensajes: 46
Antigüedad: 9 años, 9 meses
Puntos: 3
Respuesta: Subir multiples archivos y guardar ruta en una DB

Entiendo @Alexis88.

Leeré mas al respecto y realizare mas pruebas para poder entender del todo el manejo de archivos con php.

Gracias por tu orientación.
__________________
Agradecer no cuenta nada \o/ +1

<<-----CentOS----->>
  #8 (permalink)  
Antiguo 22/03/2015, 00:49
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 8 meses
Puntos: 1284
Respuesta: Subir multiples archivos y guardar ruta en una DB

Hola:

El nombre de la variable del formulario es "userfile[]"; y ese juego de corchetes indica que se trata de un array, cuya longitud se puede averiguar con count($_FILES["userfile"]), y antes del nombre debes indicar el índice...

Código PHP:
Ver original
  1. for ($i = 0, $total = count($_FILES["userfile"]; $i < $total; $i++) {
  2.  $nombre = $_FILES["userfile"][$i]["name"];
  3.  // resto de procesamiento...
  4. }

Fíjate en el uso del índice $i.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo

Etiquetas: multiples, ruta, tabla
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 03:52.