Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/09/2009, 11:31
iarrieta
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 6 meses
Puntos: 0
Respuesta: Ayuda para subir varias imagenes a carpeta y ruta a bd

Quiero decir que quizas solo hagan falta algunas lineas en cada codigo y podria adaptarlo.

he estado estudiando y en base a un curso en pdf que consegui por alli, hice mis propios codigos basicos con comentarios propios para referencia, por ejemplo subir UNA imagen a carpeta:

Código PHP:
<form name="formulario" id="formulario" method="post" action="<? echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">
<input type="file" name="archivo" id="archivo" />
<input type="submit" name="submit" value="Cargar Archivo" />
</form>

<?
$ruta 
"img/"// Aquí indicamos la ruta de la carpeta donde guardaremos la imagen

/* Todos los datos cargados con HTTP y POST (method="post") se almacenan en el array $_FILES.
Nuestro campo "archivo" del formulario se convierte entonces en $_FILES['archivo]. Es una array asociativa como ya las hemos visto antes.
La array $_FILES contiene todos los datos del archivo cargado, como el nombre, el tamaño, el Mime-Type (.gif o .jpg) y el nombre temporal del archivo.
Después de cargar el archivo, PHP le asigna un nombre temporal y lo almacena en una carpeta temporal.
*/

if (isset ($_FILES['archivo']) && $_FILES['archivo']['size'] > 0) {  // Comprobamos si se cargo el archivo y si es mayor a 0 bytes, es decir, si es un archivo real
    
$tamanomax 500000// Creamos una variable con el tamaño máximo en bytes, en este caso 500Kb. PHP acepta hasta 2Mb
    
/* Para leer las propiedades de $_FILES['archivo'] simplemente agregamos otra key a su lado ['']
Para mayor comodidad, las propiedades se guardan como variables a utilizar en el código.    
*/
    
$nombretemp $_FILES['archivo']['tmp_name']; // Nombre temporal con el que se guarda el archivo en el servidor
    
$nombrearchivo $_FILES['archivo']['name']; // El nombre original del archivo
    
$tamanoarchivo $_FILES['archivo']['size']; // El tamaño del archivo cargado en bytes
    
/* La función GetImageSize() reconoce los archivos GIF, JPG, PNG y SWF y devuelve su altura, anchura y su tipo.
La función devuelve un array en matriz de 4 elementos:
    Index 0 corresponde a la anchura
    Index 1 corresponde a la altura
    Index 2 es un número en función al tipo de archivo de imagen (1: GIF, 2: JPG, 3: PNG y 4: SWF)
    Index 3 contiene la cadena de caracteres correcta en formato width="xxx" y height"xxx"
*/
    
$tipoarchivo GetImageSize ($nombretemp); // Aquí con GetImageSize leemos todos los datos del archivo temporal cargado y los almacenamos en la variable $tipoarchivo
    
/* El index 2 del array $tipoarchivo me indica con los números 1 - 2 - 3 si se trata de un GIF, un JPG o un PNG
Preguntamos si es GIF, JPG o PNG. Si eleminamos este if aceptará cualquier archivo
*/
    
if ($tipoarchivo[2] == || $tipoarchivo[2] == || $tipoarchivo[2] == 3) { // GIF, JPG o PNG?
    
if ($tamanoarchivo <= $tamanomax) { // Comprobamos el tamaño del archivo
    
/* La función move_uploaded_file() se encarga de trasladar el archivo temporal a una ubicación determinada por nosotros.
Se compone con el nombre del archivo temporal, la ruta en la que se va a guardar y su nombre real con el que quedará guardado
*/
    
if (move_uploaded_file ($nombretemp$ruta $nombrearchivo)) {
        echo 
"<p>La imagen se cargó con éxito!.<br>\n
        Tamaño de imagen: $tamanoarchivo bytes<br>\n
        Nombre: $nombrearchivo</p>"
;
    } else {
        echo 
"No se ha podido cargar la imagen";
    }
    } else {
        echo 
"La imagen tiene más de $tamanomax bytes y es muy pesada!";
    }
    } else {
        echo 
"No es una imagen GIF o JPG";
    }
    echo 
"<form action='{$_SERVER['PHP_SELF']}' method='post'>
          <input type='submit' value='OK'></form>"
;
    }
    
$filehandle opendir($ruta); // Abrimos la carpeta y devolvemos un "handle", una especie de apuntador, guardándolo en la variable $filehandle
    
/* La función readdir() lee los nombres de los archivos en la carpeta y los devuelve. para ello necesita el handle del archivo: readdir($filehandle)
Para luego utilizar el nombre del archivo, debo guardarlo en una variable: $file = readdir($filehandle)
Como generalmente hay más de un archivo en la carpeta, necesitamos un bucle que se mantenga activo hasta que readdir() haya leido todos los nombres en la carpeta,
para lo que entonces usamos al bucle while.
*/
    
while ($file readdir($filehandle)) {
        if (
$file != "." && $file != "..") { // Las funciones opendir() y readdir() devuelven en el echo los puntos de jerarquía en las carpetas, por lo que los filtramos
            
$tamano GetImageSize ($ruta $file); // Aqui con GetImageSize leemos el tamaño del archivo y se lo establecemos abajo con $tamano[3]
            
echo "<p><img src='$ruta$file' $tamano[3]><br></p>\n";
        }
    }
    
closedir($filehandle); // FIn de lectura de la carpeta
?>
Se que la mayoria de los cambios recientes se refiere a las variables globales, creo recordar que asi se llaman: $POST, $FILE, etc

Lo que quiero decir es que si he estado aprendiendo "el nuevo PHP" pero como no sabia realmente mucho del "viejo", quizas me quede un poco cuesta arriba generar desde 0 un nuevo sistema para la inmobiliaria en cuestion, por lo que pido ayuda a ver si quizas se pueda, en base a mis viejos codigos, modificar algunas cosas para adaptarlo.

Lo otro es que aprendi en su momento a subir como blob y lo domino, pero quisiera desarrollarlo ahora subiendo a carpeta (he leido que es mas "sano"). Se me tranca un poco la logica cuando pienso en como subir VARIAS imagenes de golpe (sus rutas) a la base de datos y luego para mostrarlas.

Quizas sea pan comido pero el cerebro no me ha estado funcionando muy bien despues de mandarme 2 manuales completos de php5, jejeje