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> </td>
<td> </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ú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ú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 última celda, cerramos </tr>
}
if ($resto <> 0) { # Si el resultado no es múltiple de $columnes acabamos de rellenar los huecos
$ajust = $columnes - $resto; # Número de huecos necesarios
for ($j = 0; $j < $ajust; $j++) {echo "<td> </td>";}
echo "</tr>"; # Cerramos la última lí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