Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/11/2010, 14:38
Avatar de auttranadhie
auttranadhie
 
Fecha de Ingreso: noviembre-2008
Ubicación: Madrid (España)
Mensajes: 156
Antigüedad: 15 años, 5 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.