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

Hola

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 = '&nbsp;&nbsp;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" /> 
El scritpt que uso para subir es:

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; 
?>
Para mostrar, uso el de miniaturas:

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); 


?>
y luego el de mostrar en la página de resultados:

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>&nbsp;</td>";} 
echo 
"</tr>";

}
echo 
"</table>";
?>
Quisiera hacer el sistema de nuevo desde 0 pero no tengo tiempo ahora.

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!!!