Foros del Web » Programando para Internet » PHP »

subir archivos al servidor y meterlos en carpetas diferentes

Estas en el tema de subir archivos al servidor y meterlos en carpetas diferentes en el foro de PHP en Foros del Web. Hola Soy una novata total del php y me he atascado en lo siguiente: tengo un formulario para subir archivos al servidor en el que ...
  #1 (permalink)  
Antiguo 21/11/2010, 04:01
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1
Antigüedad: 13 años, 4 meses
Puntos: 0
subir archivos al servidor y meterlos en carpetas diferentes

Hola Soy una novata total del php y me he atascado en lo siguiente:

tengo un formulario para subir archivos al servidor en el que una de las input es de tipo select (hay que seleccionar entre la categoria 1 o categoria 2). mi problema es que quiero guardar el archivo:

en una carpeta1 si se trata de un archivo de la categoria 1

en una carpeta2 si se trata de un archivo de la categoria 2

ahora mismo lo tengo de manera que todos los archivos sea cual sea su categoria se van a una carpeta general porque no se asignarles otra ruta.

Otra cosa quiero que el archivo sea renombrado automaticamente demanera que el nuevo nombre sea el id (int, unsigned,primary, A-I(autoincremento)) de una tabla de datos
porque si un usuario sube un archivo con un nombre que ya existe ya empiezan los problemas y asi yo podria tambien identificar que usuario envio ese archivo.
agradezco su ayuudaaaaaaaaaa. no pude hoy ni dormir....

Última edición por merchitass; 21/11/2010 a las 04:31
  #2 (permalink)  
Antiguo 21/11/2010, 14:38
Avatar de auttranadhie  
Fecha de Ingreso: noviembre-2008
Ubicación: Madrid (España)
Mensajes: 156
Antigüedad: 15 años, 4 meses
Puntos: 8
Respuesta: subir archivos al servidor y meterlos en carpetas diferentes

Hola:

Aunque me imagino que los moderadores considerarán que esta pregunta no pertenece al subforo de configuración, trataré de responderte, porque acabo de pasar por lo mismo y lo he podido resolver.

Trataré de responderte a las dos cuestiones que planteas.

Supongo que tendrás dos ficheros PHP: uno para cargar el fichero (lo llamaremos "cargar.php") y otro para procesar los datos (lo llamaremos "procesar.php").

En cargar.php debes tener dos elementos:

1. Un cuadro de texto (INPUT) de tipo FILE para seleccionar el fichero. Lo llamaremos "mi_fichero".

2. Un cuadro combinado (SELECT) para elegir las carpetas. Podemos escribirlo como:

<select name="cbo_carpeta">
<option value=0>Selecciona una carpeta</option>
<option value=1>Carpeta A</option>
<option value=2>Carpeta B</option>
</select>

En procesar.php deberás tener lo siguiente:

Código PHP:
<?php
// Una matriz que me recoja los tipos de ficheros que admitirás
$permitidos 
    array(
"jpeg" => "image/jpeg",
    
"png" => "image/png",
    
"gif" => "image/gif");

if (
$_FILES['mi_fichero']['tmp_name'] <> ''// Si el usuario ha seleccionado el fichero
{
    if(
in_array($_FILES['mi_fichero']['type'], $permitidos)) // El tipo de fichero está permitido
    
{
        if (
$_POST["cbo_carpeta"] <> 0// El usuario ha seleccionado una carpeta y estableces a cuál en función del valor del cuadro combinado
        
{
            switch([
"cbo_carpeta"] )
            {
                case 
1:
                    
$dir "carpetaA/";
                break;
                case 
2:
                    
$dir "carpetaB";
                break;
            }
            foreach(
$permitidos as $index => $value// Obtenemos la extensión del fichero
            
{
                if (
$_FILES['mi_fichero']['type'] = $value)
                {
                    
$extension $index;
                }
            }
            
// Haces la consulta (INSERT) a la base de datos
            
mysql_query("INSERT …");
            
$nuevo_id mysql_insert_id(); // Obtienes el último ID de la última consulta
            // Subes el fichero al directorio con el nombre según el ID que acabas de obtener en formato relleno de ceros hasta 8 y la extensión.
            
move_uploaded_file($_FILES['mi_fichero']["tmp_name"],$dir.str_pad($nuevo_id8"0"STR_PAD_LEFT).$extension);
        }
        else
        {
            echo 
"No has seleccionado ninguna carpeta";
        }
    }
    else
    {
        echo 
"El tipo de fichero no está permitido";
    }    
}
else
{
    echo 
"No has seleccionado ningún fichero";
}
?>
Nota: en el valor del SELECT, en vez de establecer 1, 2, etc., puedes usar directamente el nombre de los directorios y ya te saltarías el paso del switch(), pero no te olvides de la barra inclinada. En mi opinión soy más de hacerlo con números por si los nombres de directorio también los guardaras en una tabla.

Espero que te sirva. A mí sí me funciona. Un saludo.
  #3 (permalink)  
Antiguo 21/11/2010, 23:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Tema movido desde Configuración PHP a PHP

Etiquetas: carpetas, diferentes, subir, servidores
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 04:56.