Comunidad de diseño web y desarrollo en internet online

for each + insert + upload

Citar            
MensajeEscrito el 05 Feb 2010 03:33 pm
Hola gente,

Tengo y funciona bastante bien, las funciones para subir a dos carpetas (minis y originales) una foto pequeña y su par en grande. A su vez que inserta el nombre de ambas imágenes en la tabla de la base de datos.
Ahora, me interesa, para no tener que duplicar esas funciones por cada archivo que se cargue desde el formulario, en el caso que se cargue más de un par de imágenes usar el for each para que por cada dupla que venga del formulario las suba a las carpetas debidas y las inserte en la tabla.
Cómo sería este for each? Porque estuve leyendo por php.net, cristal y otros foros, pero no termino de entender...

Código PHP :

if(isset($_POST['submit'])){
   $error = false;
   // si hay imagen grande.
   if (is_uploaded_file($_FILES['fotog']['tmp_name'])) {
      //revisamos que sea jpg
      if ($_FILES['fotog']['type'] == "image/jpeg" || $_FILES['fotog']['type'] == "image/pjpeg"){
         //nombre de la imagen
         $fotog = time().".jpg";
         //movemos la imagen.
         move_uploaded_file($_FILES['fotog']['tmp_name'], "../originales/".$fotog);
      }else{
         $error = true;
         $errormsg = "Formato no válido para archivo de imagen";
      }
   } else {
      //imagen no se pudo subir o no seleccionaron.
      $error=true;
      $errormsg = "Error al cargar imagen: " . $_FILES['fotog']['name'];
   }//fin file upload.
      
   //continuamos con el insert.
   //si hay error no hay imagen.
   if($error){
      $fotog = "N/A";
   }
   
   // si hay imagen grande.
   if (is_uploaded_file($_FILES['fotop']['tmp_name'])) {
      //revisamos que sea jpg
      if ($_FILES['fotop']['type'] == "image/jpeg" || $_FILES['fotop']['type'] == "image/pjpeg"){
         //nombre de la imagen
         $fotop = time().".jpg";
         //movemos la imagen.
         move_uploaded_file($_FILES['fotop']['tmp_name'], "../minis/".$fotop);
      }else{
         $error = true;
         $errormsg = "Formato no válido para archivo de imagen";
      }
   } else {
      //imagen no se pudo subir o no seleccionaron.
      $error=true;
      $errormsg = "Error al cargar imagen: " . $_FILES['fotop']['name'];
   }//fin file upload.
      
   //continuamos con el insert.
   //si hay error no hay imagen.
   if($error){
      $fotop = "N/A";
   }
   
   
   $campos = "fotog,fotop";
   $valores = "'$fotog','$fotop'";
   //nos conectamos a la bd.
   $cnx = conectar();
   $res = mysql_query("INSERT INTO photos ($campos) VALUES ($valores)") or die (mysql_error());
   //cerramos la conexión.
   mysql_close($cnx);
   $mensaje = "<p class='error'>Se ha cargado una nueva foto con éxtio.</p>";
   //exit;
}


Muchas gracias.
Salut y vita!
Emiliano

Por boratlon

Claber

139 de clabLevel



 

msie7
Citar            
MensajeEscrito el 06 Feb 2010 02:49 am
En el formulario HTML, los inputs de los archivos ponles de name="fotog[]" y name="fotop[]" esto hará que se cree un array con índice numérico basado en cero que puedes recorrer con foreach fácilmente. Para que no te pierdas y sepas exactamente qué y cómo estás recibiendo la información desde el formulario, haz un script que contenga esto:

<?php
echo "<pre>";
var_dump($_FILES);
echo "</pre>";
?>

Y haz que el formulario apunte a ese script. Esto te mostrará un volcado completo del array $_FILES de una sola vez.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 06 Feb 2010 03:50 am
Hola, gracias por la respuesta...
Ya había encontrado algo en PHP.net, pero ahora tengo otra duda
tengo los siguientes códigos, en el primero no logro que renombre los archivos usando la función time() y sólo copia un archivo, y con el segundo no sé cómo crear un nuevo nombre al archivo con la función time().
Si podés darme una mano, mil gracias.

Código PHP :

$uploadfile = $uploaddir . basename($_FILES[fotog][name][$key]);
      if (is_uploaded_file($_FILES['fotog']['tmp_name'][$key])) 
      {
         //revisamos que sea jpg
         if ($_FILES['fotog']['type'][$key] == "image/jpeg" || $_FILES['fotog']['type'][$key] == "image/pjpeg")
         {
            //nombre de la imagen
            $fotog = time().".jpg";;
            //movemos la imagen.
            move_uploaded_file($_FILES['fotog']['tmp_name'][$key], "../originales/".$fotog);
         }else{
            $error = true;
            $errormsg = "Formato no válido para archivo de imagen";
         }
      } else {
         //imagen no se pudo subir o no seleccionaron.
         $error=true;
         $errormsg = "Error al cargar imagen: " . $_FILES['fotog']['name'][$key];
      }//fin file upload.
         
      //continuamos con el insert.
      //si hay error no hay imagen.
      if($error){
         $fotog = "N/A";
      }



PHP2

Código PHP :

$uploadfile = $uploaddir . basename($_FILES[fotog][name][$key]); 
      //echo $uploadfile;
      if (move_uploaded_file($_FILES['fotog']['tmp_name'][$key], $uploadfile)) 
      { 
         echo $value . ' uploaded<br>';
      }


Salut!
Emiliano

Por boratlon

Claber

139 de clabLevel



 

chrome
Citar            
MensajeEscrito el 06 Feb 2010 03:10 pm
Lo que pasa es que el proceso es muy rápido y ocurre en el mismo segundo de time().

¿Por qué no mejor generas una cadena aleatoria?.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 06 Feb 2010 03:38 pm
Hola.. gracias de nuevo por la mano... pero soy novato y no sé qué me estás diciendo? perdón...

Por boratlon

Claber

139 de clabLevel



 

chrome
Citar            
MensajeEscrito el 07 Feb 2010 02:34 am
La función time() devuelve la cantidad de segundos transcurridos desde las 0:00 del 1/1/1970 (se llama fecha Unix), en tu script la copia de archivo es tan rápida que terminas generando el mismo nombre de archivo para dos archivos distintos y uno pisa al otro.

En vez de usar time() usa una función que te genere una cadena aleatoria del tipo 'jksjuwebjssfjgsf' y usa esa como nombre de archivo.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 08 Feb 2010 12:22 am
Hola de nuevo y gracias una vez más...
O sea, lo que me decís que haga una función randon? y así va air creando con distintos nombres los archivos?
Muchas gracias... Saludos

Por boratlon

Claber

139 de clabLevel



 

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.