Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/08/2004, 19:52
iarrieta
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
Subir varias imagenes en un mismo formulario..

Hola:

Tengo este caso.

Se trata de una constructora que pretende mostrar en la pagina, fotos del progreso de la obra, dia por dia.
La idea es tener los links de las fechas (25.08.2004, 26.08.2004, 27.08.204, etc) y que, al pisar en una fecha, se muestren las fotos de ese dia.

Lo que no se es como subir las fotos pues, para cada dia se van a subir 4 fotos.

La base de datos se llama "principal" y la tabla "dates".

Inicialmente coloque estos campos: id, date, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo

(utilizo el codigo de este mismo foro para subir imagenes a la base de datos tipo blob y tambien el codigo que genera las miniaturas, ambos sacados del FAQ)

Lei por alli que debo crear tantos campos de imagen en la tabla como imagenes desee subir, pero al querer mostrarlas, no me muestra nada (supongo que porque todas tienen el mismo id)

Aqui los codigos que uso:

El formulario...

Código PHP:
<? 
if (isset($_GET['proceso'])){ 
echo 
$_GET['proceso']."<br>"

?>

<FORM enctype="multipart/form-data" method="post" action="insert_images.php">
<table width="375">
<tr>
<td width="71"><div align="left" class="normal">Date:</div></td>
<td width="292"><div align="left">
<input name="date" type="text" id="date" size="33" align="left">
</div></td>
</tr>
<tr>
<td><div align="left" class="normal">Image:</div></td>
<td><div align="left">
<input name="archivo" type="file" id="archivo" size="33" align="left">
</div></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="submit" value="Insert">
</div></td>
</tr>
</table>
</form>

El Insertar...

Código PHP:
<?php 
//Primero, arranca el bloque PHP y checkea si el archivo tiene nombre.  Si no fue asi, te remite de nuevo al formulario de inserción: 
// No se comprueba aqui si se ha subido correctamente. 
if (empty($_FILES['archivo']['name'])){ 
header("location: form_images.php?proceso=falta_indicar_fichero"); //o como se llame el formulario .. 
exit; 


//establece una conexión con la base de datos. 
$conexion mysql_connect("localhost","entre2_admin","123456") or die("No se pudo realizar la conexion con el servidor."); 
mysql_select_db("entre2_principal",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca. 

// archivo temporal (ruta y nombre). 
$binario_nombre_temporal=$_FILES['archivo']['tmp_name']; 

// leer del archvio temporal .. el binario subido. 
// "rb" para Windows .. Linux parece q con "r" sobra ... 
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal))); 

// Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo. 
$binario_nombre=$_FILES['archivo']['name']; 
$binario_peso=$_FILES['archivo']['size']; 
$binario_tipo=$_FILES['archivo']['type']; 

//insertamos los datos en la BD. 
$consulta_insertar "INSERT INTO dates (id, date, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('', '$date', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')"
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos."); 
header("location: build_progress.php");  // si ha ido todo bien 
exit; 
?>

El Miniaturas (thumbnails)...

Código PHP:
<?php  

if(isset($_GET['id'])) { 

    
$conexion=mysql_connect("localhost","entre2_admin","123456") or die ("no se ha podido conectar a la BD"); 
    
mysql_select_db("entre2_principal") or die ("no se ha podido seleccionar la BD"); 
    
$sql "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM dates WHERE id='".$_GET['id']."'"
    
$consulta mysql_query($sql,$conexion); 
    
$imagen mysql_result($consulta,0,"archivo_binario");
    
$type mysql_result($consulta,0,"archivo_tipo"); 

    
// Envio cabeceras al navegador 
    
Header ("Content-type: $type"); 

    
// Generar el thumbnail: 

    // Se crea la imagen desde el campo binario de la BD 
    
$img imagecreatefromstring($imagen); 

    
// Tamaño del Thumbnail 
    
$picsize 200
     
    
// Se obtienen los datos del ancho y alto de la imagen. 
    
$new_w imagesx($img); 
    
$new_h imagesy($img); 

    
// Se calcula la relación alto/ancho 
    
$aspect_ratio $new_h $new_w
     
    
// Se ajusta al nuevo tamaño 
    
$new_w $picsize
    
$new_h abs($new_w $aspect_ratio); 

    
// Se crea la mascara de la imagen nueva 
    
$dst_img ImageCreateTrueColor($new_w,$new_h); 

    
// Se copia y reajusta el nuevo tamaño en la nueva imagen. 
     
imagecopyresampled($dst_img,$img,0,0,0,0,$new_w,$new_h,imagesx($img),imagesy($img)); 

    
// Se entrega al buffer de salida (navegador en este caso) la imagen en formato JPEG 
    // El tercer parámetro (100) indica la calidad de la imagen: en porcentaje relación calidad/peso imagen. 
    
imagejpeg($dst_img,'',100); 


?>

Y el Mostrar...

Código PHP:
<? 
$conexion 
mysql_connect("localhost","entre2_admin","123456") or die("No se pudo realizar la conexion con el servidor."); 
mysql_select_db("entre2_principal",$conexion) or die("No se puede seleccionar BD");

//inicializo el criterio y recibo cualquier cadena que se desee buscar 
$criterio ""
$txt_criterio "";
if (isset(
$Buscacriterio)){
 
$txt_criterio=$Buscacriterio;
 
$criterio " where date like '%" $txt_criterio "%'"
}
   
$sql="SELECT * FROM entre2_principal.dates".$criterio
$result2=mysql_query($sql);
 
echo 
"<table align=center border=0 cellpadding=0 width=400>"

$columnes 2// N&uacute;mero de columnas (variable)  
if (mysql_num_rows($result2)==0){echo "<tr><td colspan=$columnes>There are not images.</td></tr> ";} 

for (
$i=1$row mysql_fetch_array ($result2); $i++) { 
$resto = ($i $columnes); # N&uacute;mero de celda del <tr> en que nos encontramos 
if ($resto == 1) {echo "<tr>";} # Si es la primera celda, abrimos <tr> 
    
echo "<td class=mini><div align=center><img src=\"mini_images.php?id=$row[id]\" border='0'></a><br>";
    echo 
"".$row[descripcion]."</div><br>"
if (
$resto == 0) {echo "</tr>";} # Si es la &uacute;ltima celda, cerramos </tr> 

if (
$resto <> 0) { # Si el resultado no es m&uacute;ltiple de $columnes acabamos de rellenar los huecos 
$ajust $columnes $resto# N&uacute;mero de huecos necesarios 
for ($j 0$j $ajust$j++) {echo "<td>&nbsp;</td>";} 
echo 
"</tr>"# Cerramos la &uacute;ltima l&iacute;nea </tr> 

echo 
"</table>"
mysql_free_result($result2)
?>

Pongo los codigos (han sido modificados un poco de los originales de este foro) para apreciar en su totalidad los procesos que uso.

Asi me funcion perfecto, pero, la persona que tenga la tarea de insertar los registros todos los dias, se encontrara con que debe copiar la fecha en el formulario e insertar una imagen de su disco duro, hacer click en submit y luego repetir esa operacion tantas veces como imagenes desee subir.

Pensando en este trabajo no seria tan duro, pero si me toca ampliar y los registros a insertar ya no son solo el campo "date" sino unos 10 mas (direccion, telefono, nombre, edad, etc), entonces tocaria copiar todos tantas veces como imagenes a subir?

Creo esta bastante claro el problema.. Alguien puede colaborarme?

Gracias