Foros del Web » Programando para Internet » PHP »

Cual es la mejor forma de hacer una galeria de fotos

Estas en el tema de Cual es la mejor forma de hacer una galeria de fotos en el foro de PHP en Foros del Web. Hola amigos, necesito hacer una galeria de fotos con la siguiente logica. Primero, las fotos las cargarian los usuarios y quedarian relacionadas con la categoria ...
  #1 (permalink)  
Antiguo 01/02/2006, 07:32
 
Fecha de Ingreso: diciembre-2005
Mensajes: 33
Antigüedad: 12 años
Puntos: 0
Exclamación Cual es la mejor forma de hacer una galeria de fotos

Hola amigos, necesito hacer una galeria de fotos con la siguiente logica. Primero, las fotos las cargarian los usuarios y quedarian relacionadas con la categoria en una db.

esta es la tabla de la db tantis:

CREATE TABLE fotolog (
id_fotolog int(10) NOT NULL auto_increment,
user_f varchar(255) NOT NULL default '',
categoria varchar(255) NOT NULL default '',
ruta varchar(255) NOT NULL default '',
comentario varchar(255) NOT NULL default '',
fecha date NOT NULL default '0000-00-00',
archivo varchar(255) NOT NULL default '',
PRIMARY KEY (id_fotolog)
) TYPE=MyISAM;


este es el formulario

Código HTML:
<form action="<?=$PHP_SELF?>" method="post" enctype="multipart/form-data" name="form1">
  <table width="95%"  border="0">
    <tr>
      <td colspan="2">&nbsp;</td>
    </tr>
    <tr>
      <td width="51%">autor: <?php echo $_SESSION['MM_Username']?> </td>
      <td width="49%">titulo/categoria      
      <input name="categoria" type="text" id="categoria"></td>
    </tr>
    <tr>
      <td colspan="2"><span class="FORMULARIOS">Archivo</span>
        <input name="archivo_" type="file" class="campos" id="archivo_">
        <input name="archivo" type="text" id="archivo"></td>
    </tr>
    <tr>
      <td colspan="2">Comentario de la foto: 
      <input name="comentario" type="text" id="comentario"></td>
    </tr>
    <tr>
      <td colspan="2"><input name="boton" type="submit" id="boton" value="Enviar">
      <input name="fecha" type="hidden" id="fecha" value="<? echo date("y"),"/",date("m"),"/",date("d")?>">
      <input name="user" type="hidden" id="user2" value="<?php echo $_SESSION['MM_Username']?> ">      
      <input type="hidden" name="hiddenField" value="<?php echo FORM.archivo?>"><? echo $HTTP_POST_FILES['archivo']['tmp_name']?></td>
    </tr>
  </table>
  <input type="hidden" name="MM_insert" value="form1"> 

CODIGO PHP

Código PHP:
<?php require_once('../Connections/conex_tan.php'); ?>

<?
if($boton) {
   if (
is_uploaded_file($HTTP_POST_FILES['archivo']['tmp_name'])) {
     
copy($HTTP_POST_FILES['archivo']['tmp_name'], $HTTP_POST_FILES['archivo']['name']);
     
$subio true;
//   }
function GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}

$editFormAction $_SERVER['PHP_SELF'];
if (isset(
$_SERVER['QUERY_STRING'])) {
  
$editFormAction .= "?" htmlentities($_SERVER['QUERY_STRING']);
}

?>
<?php
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  
$insertSQL sprintf("INSERT INTO fotolog (user_f, categoria, ruta, comentario, fecha) VALUES (%s, %s, %s, %s, %s)",
                       
GetSQLValueString($_POST['user'], "text"),
                       
GetSQLValueString($_POST['categoria'], "text"),
                       
GetSQLValueString($_POST['archivo'], "text"),
                       
GetSQLValueString($_POST['comentario'], "text"),
                       
GetSQLValueString($_POST['fecha'], "date"));

  
mysql_select_db($database_conex_tan$conex_tan);
  
$Result1 mysql_query($insertSQL$conex_tan) or die(mysql_error());

  
$insertGoTo "cargar_nuevo_fotolog.php";
  if (isset(
$_SERVER['QUERY_STRING'])) {
    
$insertGoTo .= (strpos($insertGoTo'?')) ? "&" "?";
    
$insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  
header(sprintf("Location: %s"$insertGoTo));
}

mysql_select_db($database_conex_tan$conex_tan);
$query_fotolog "SELECT * FROM fotolog";
$fotolog mysql_query($query_fotolog$conex_tan) or die(mysql_error());
$row_fotolog mysql_fetch_assoc($fotolog);
$totalRows_fotolog mysql_num_rows($fotolog);
?>
<?
}
////
if($subio) {
   echo 
"El archivo subio con exito";
} else {
   echo 
"El archivo no cumple con las reglas establecidas"
}
die();
}
?>
Disculpen la ensalada, pero en si quiero hacer dos cosas a la vez. Primero que el usuario pueda hacer el upload del archivo, y segundo que completanto algunos datos, el codigo hace un insert en la tabla fotolog, grabando fecha, autor, categoria y ruta de archivo. 1er problema: Cuando quiero grabar la ruta del campo donde pongo el boton examinar no tengo forma de que lo tome, por ende, me da null. 2do error: como hago para que guarde la ruta relativa al sitio. Por ejemplo, si en el campo de upload despues del examinar se ve c:\fotos\pepe.jpg, yo quiero que grabe en la db, ../fotolog/pepe.jp

Por otro lado, en la galeria de imagenes se listarian de la siguiente forma. Tengo dos iframes(lista y cuerpo), en uno, el listado de todas las categorias, donde con clickear, te carga la categoria en el iframe cuerpo, mostrando la foto y el comentario. 1er error: Hay algun script que genere automaticamente las thumbnails? Por que sino las veo todas desproporcionadas? dos:

Espero no molestar mucho con esto. Agradecere alguna pista de como hacerlo ya que es mi debut con este codigo. Saludos y muchas gracias nuevamente
  #2 (permalink)  
Antiguo 01/02/2006, 08:47
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 11 años, 10 meses
Puntos: 0
Por que no usas algo ya pre-desarrollado? como 4images o algo asi?
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #3 (permalink)  
Antiguo 01/02/2006, 13:44
 
Fecha de Ingreso: diciembre-2005
Mensajes: 33
Antigüedad: 12 años
Puntos: 0
Por que no me imagine que fuera tan dificil..
  #4 (permalink)  
Antiguo 02/02/2006, 06:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si, es cierto que tienes una buena "ensalada", pero de uso de variables externas de PHP.

Por un lado usas variables asumidas como globales .. como cuando haces:

if($boton) {

Debería ser:

if (isset($_POST['boton'])){

También usas $PHP_SELF cuando deberías usar $_SERVER['PHP_SELF'] o en general los "arrays supergobales" para todo ..

Por otro lado usas $HTTP_POST_FILES cuando deberías usar $_FILES .. y para "rematar la ensalada" usas funciones que genera "Dreamweaver" como GetSQLValueString() para procesar esas variables externas .. En fin ... creo que primero deberías "standarizar" tu uso de variables, aclararte y luego ver otro tipo de problemas, por qué .. el uso indiscrimiado de todo tipo de acceso a tus variables te podría estar dando estos problemas que tienes (dependiendo de la configuración de PHP: register_globals ..).

En las primeras FAQ's de este foro de PHP tienes un par relacionadas con este tema, te invito a leerlas.

Sobre el código que prestentas .. en general está todo erroneo.

Tu usas un campo llamado "archivo_" y de tipo "file" que es donde TU seleccionas tu archivo a subir al tu servidor. Ese es el nombre del campo que contiene tu archivo bajo el array $_FILES (o $HTTP_POST_FILES) y a su vez en ese array tienes propiedades del archivo que subistes como: su nombre original (NO RUTA del cliente .. es decir de donde estaba en el PC que lo subió), el nombre "temporal" que PHP le dá a todo archivo al subirlo vía PHP, su tamaño ("size") .. o el formato MIME del archivo ("type") ...

No sé por qué estás usando por ahí un campo de texto que llamas "archivo" (sin ese _) y es el que pretendes accederlo en $HTTP_POST_FILES['archivo'] cuando ahí NO vas a tener NADA de archivos!.

También usas copy() para el proceso de mover ese archivo temporal de donde PHP lo sube hacia su destino definitivo. Debes usar move_uploaded_file() NO copy() (te dará problemas de otro ambito en algunos casos).

Por otro lado tienes algunos errores de concepto:

Cita:
1er problema: Cuando quiero grabar la ruta del campo donde pongo el boton examinar no tengo forma de que lo tome, por ende, me da null.
Así funciona el campo "file" .. cara a PHP NO se entrega esa información de la ruta, sólo el nombre original del archivo. Nunca la ruta original que tenía en el PC que subió el archivo. Ahora .. vía javascript puedes tomar ese valor del campo file, añadirlo en otro campo de tu formulario (en un campo hidden) y que suba ambos datos al servidor en tu formulario HTML hacia tu script PHP .. Pero, realmente no le veo sentido a tomar esa ruta original .. Piensa que estás trabajando en arquitectura "cliente-servidor" .. NO que ese mismo "PC" que ahora usas como "servidor" también hace de "cliente".

Cita:
2do error: como hago para que guarde la ruta relativa al sitio. Por ejemplo, si en el campo de upload despues del examinar se ve c:\fotos\pepe.jpg, yo quiero que grabe en la db, ../fotolog/pepe.jp
En $_FILES['archivo_']['name'] vas a obtener "pepe.jpg" y sólo eso .. tu veras si quieres añadir (concatenar) a esa variable una "constante" tuya que sea "../fotolog/" .. tipo:

$nombre_archivo_ruta="../fotolog/".$_FILES['archivo_']['name'];

y eso quede como parte de tu INSERT para tu BD en el campo que corresponda o destines para guardar esa ruta. Pero . .realmente, NUNCA deberías guardar una RUTA como parte de tus datos .. ¿que pasaría si un día te dá por cambiar de ruta tus archivos? .. Lo ideal es que esa ruta (como "constante") la uses -sólo- cuando accedas a tus imagenes concatenandola en tu tipico:

echo "<img scr=\"../fotolog/".$row['archivo']."\">";

O como hagas para presentar tus imagenes.

Si tu organizas tus imagenes en "directorios" .. ahí tendrías que guardar mejor o definir un campo extra en tu BD que defina la "categoría" y si lo deseas ahí relacionar "categoria" -> "ruta absoluta/relativa" que corresponda. Pero .. realmente gestionando archivos en una BD donde todo archivo que se mueve por ella es gestionado por tus scripts PHP (que controlan lo que sube .. lo que borras .. lo que mueves .. etc) no tiene en principio ningún sentido organizar en "directorios" esos archivos pues ... teóricamente NUNCA deberías acceder a esos archivos a "manipularlos" (subir, borrar, etc ...) por donde están físicamente (tal vez por FTP . .etc) sino siempre por tus scripts PHP. Así que perfectamente bajo este critério tus archivos los tendrías en un sólo directorio y ya será tu "modelo de datos" el que se encargue de clasificar tus archivos por ese campo "categoria" que definas.

Cita:
Por otro lado, en la galeria de imagenes se listarian de la siguiente forma. Tengo dos iframes(lista y cuerpo), en uno, el listado de todas las categorias, donde con clickear, te carga la categoria en el iframe cuerpo, mostrando la foto y el comentario.

1er error: Hay algun script que genere automaticamente las thumbnails? Por que sino las veo todas desproporcionadas?
En las FAQ's de este foro de PHP tienes ejemplos y más si buscas por el término. Ahora .. eso de que "tus thumbnails" se hagan automáticamente deberías especificar que deseas hacer. Tienes un par de opciones:

1) cuando tu archivo sube al servidor .. en ese instante generas tu thumnail (como archivo).
2) Cada vez que pidas tu thumnail de tu imagen original .. la generas.

Ambos métodos tienen sus pró's y contras. El primero optimiza proceso del servidor (pues el thumbnail se genera una sóla vez .. o cuando cambies esa imagen ..) el segundo optimiza "espacio" en tu servidor .. pues el thumbnail lo generas "al vuelo" (no un archivo) y es entregado directamente al cliente (navegegador).

Sobre los problemas con el "upload" del archivo en sí .. te recomiendo ver la documentación oficial de PHP al respecto:

http://www.php.net/manual/es/features.file-upload.php

Y FAQ's del foro PHP pues tienes más ejemplos.

Sobre generar thumbnails .. en las FAQ's tienes ejemplos .. pero también puedes ir viendo la documentación oficial sobre tratamiento de imagenes sobre PHP:

www.php.net/gd

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:29.