Gracias a este foro desarrolle alguna vez un sistema para una inmobiliaria en el que ingresaba los datos de la propiedad en la base de datos a través de un formulario y luego, con otro formulario de campos FILE auto incrementables y un campo común CODIGO, varias imágenes a la base de datos como blob.
Para mostrarlas usaba primero un script sacado de aquí pata thums y listo. Todo bien hasta que apareció php5 y los nuevos parámetros. Comencé a tener problemas siempre que usaba el código y en los servidores tenían que ponerme un archivo php.ini con algunos cambios, entre ellos seguro era el register_globals en ON.
He estado documentándome y ya he visto como se trabaja ahora para register_globals OFF.
Quisiera poder modificar mis códigos para trabajar en base al nuevo "estilo" y también cambiar de subir las imágenes a BD a subirlas a carpeta con las rutas en la BD, quizás convertir a la vez en thumbs para otra carpeta o quizas convertirlas al mostra, no se.
En fin, actualizar mi sistema para trabajar actualizado y sin problemas. Para alguien como yo que ha aprendido PHP gracias a este foro y alos golpes, me queda algo dificil lograrlo solo y con la desventaja de no tener tiempo suficiente.
Quisiera en lo posible algo de ayuda para ver como hacerlo de la mejor manera.
----------------------------
la base de datos tiene 2 tablas, una PROPIEDADES con todos los datos textuales y una IMAGENES solo para las fotos con un campo común CODIGO.
El formulario para las imágenes (resumido) es con javascript:
Código HTML:
<script type="text/javascript"> var numero = 0; //Esta es una variable de control para mantener nombres //diferentes de cada campo creado dinamicamente. evento = function (evt) { //esta funcion nos devuelve el tipo de evento disparado return (!evt) ? event : evt; } //Aqui se hace lamagia... jejeje, esta funcion crea dinamicamente los nuevos campos file addCampo = function () { //Creamos un nuevo div para que contenga el nuevo campo nDiv = document.createElement('div'); //con esto se establece la clase de la div nDiv.className = 'archivo'; //este es el id de la div, aqui la utilidad de la variable numero //nos permite darle un id unico nDiv.id = 'file' + (++numero); //creamos el input para el formulario: nCampo = document.createElement('input'); //le damos un nombre, es importante que lo nombren como vector, pues todos los campos //compartiran el nombre en un arreglo, asi es mas facil procesar posteriormente con php nCampo.name = 'archivo[]'; //Establecemos el tipo de campo nCampo.type = 'file'; //Establecemos el size de campo nCampo.size = '45'; //Ahora creamos un link para poder eliminar un campo que ya no deseemos a = document.createElement('a'); //El link debe tener el mismo nombre de la div padre, para efectos de localizarla y eliminarla a.name = nDiv.id; //Este link no debe ir a ningun lado a.href = '#'; //Establecemos que dispare esta funcion en click a.onclick = elimCamp; //Con esto ponemos el texto del link a.innerHTML = ' Eliminar'; //Bien es el momento de integrar lo que hemos creado al documento, //primero usamos la función appendChild para adicionar el campo file nuevo nDiv.appendChild(nCampo); //Adicionamos el Link nDiv.appendChild(a); //Ahora si recuerdan, en el html hay una div cuyo id es 'adjuntos', bien //con esta función obtenemos una referencia a ella para usar de nuevo appendChild //y adicionar la div que hemos creado, la cual contiene el campo file con su link de eliminación: container = document.getElementById('adjuntos'); container.appendChild(nDiv); } //con esta función eliminamos el campo cuyo link de eliminación sea presionado elimCamp = function (evt){ evt = evento(evt); nCampo = rObj(evt); div = document.getElementById(nCampo.name); div.parentNode.removeChild(div); } //con esta función recuperamos una instancia del objeto que disparo el evento rObj = function (evt) { return evt.srcElement ? evt.srcElement : evt.target; } </script> <input name="codigo" type="text" id="codigo" size="10" /> <input name="archivo[]" type="file" id="archivo[]"size="45" />
Código PHP:
<?php
header ("Location: index.php");
include("connect.php");
for ($i=0; $i <count($archivo); $i++){
//echo $i."<br>";
// archivo temporal (ruta y nombre).
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'][$i];
// leer del archivo temporal .. el binario subido.
$binario_contenido = addslashes(fread(fopen($binario_nombre_temporal, "rb"), filesize($binario_nombre_temporal)));
// Obtener del array FILES (superglobal) los datos del binario .. nombre, peso y tipo.
$binario_nombre=$_FILES['archivo']['name'][$i];
$binario_peso=$_FILES['archivo']['size'][$i];
$binario_tipo=$_FILES['archivo']['type'][$i];
//insertamos los datos en la BD.
$consulta_insertar = "INSERT INTO imagenes (id, codigo, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('', '$codigo', '$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.");
}
exit;
?>
Código PHP:
<?php
if(isset($_GET['id'])) {
include("connect.php");
$sql = "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM imagenes 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 = 100;
// 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);
}
?>
Código PHP:
<?
include ("connect.php");
if (isset($_GET['codigo'])){
$sql="SELECT * FROM imagenes WHERE codigo='".$_GET['codigo']."'";
$result=mysql_query($sql);
echo "<br><br><br>";
echo "<table width=365>";
echo "<tr>";
echo "<td align=left>";
echo "<font class=titulo_codigo>GALERIA DE IMAGENES</font>";
echo "<div align=left><hr size=1 width=350 noshade='noshade' color=#7b3f20></div>";
echo "<br>";
echo "<div align=left><font class=texto_codigo>Click en cualquier imagen para iniciar la galería</font></div>";
echo "</td></tr></table>";
$existeregistro=1;
$tamPag=15;
$columnes=3;
if(!isset($_GET["pagina"])){
$pagina=1;
$inicio=1;
$final=$tamPag;
}
else{
$pagina = $_GET["pagina"];
}
$limitInf=($pagina-1)*$tamPag;
$numPags=ceil($numeroRegistros/$tamPag);
if(!isset($pagina)){
$pagina=1;
$inicio=1;
$final=$tamPag;
}
else{
$seccionActual=intval(($pagina-1)/$tamPag);
$inicio=($seccionActual*$tamPag)+1;
if($pagina<$numPags){
$final=$inicio+$tamPag-1;
}
else{
$final=$numPags;
}
if ($final>$numPags){
$final=$numPags;
}
}
}
mysql_free_result($result);
$sql_dos="SELECT * FROM imagenes WHERE codigo='".$_GET['codigo']."' ORDER BY id LIMIT ".$limitInf.",".$tamPag;
$result_dos=mysql_query($sql_dos);
if ($existeregistro ==1){
echo "<table align=center border=0 cellpadding=0 width=365>";
for ($i=1; $row = mysql_fetch_array ($result_dos); $i++){
$resto = ($i % $columnes);
if ($resto == 1) {echo "<tr>";}
echo "<td valign=top>";
echo "<a href='propiedad_grande.php?id=$row[id]&codigo=$row[codigo]'><img src=\"mini_galeria.php?id=".$row['id']."\" class=borde_imagen></a>";
if ($resto == 0) {echo "</tr>";}
}
if ($resto <> 0) {
$ajust = $columnes - $resto;
for ($j = 0; $j < $ajust; $j++) {echo "<td> </td>";}
echo "</tr>";
}
}
echo "</table>";
?>
Se podrá modificar algunas lineas en los diferentes códigos para que funcione actualizado?
El cambio de blob a guardar en carpeta y ruta en BD es muy diferente al que utilizo? Cómo quedaría la tabla IMAGENES para guardar indefinidas rutas de imagenes para cada propiedad?
El form para subir varias imagenes de golpe, se puede hacer mejor?
Gracias por su ayuda!!!