Foros del Web » Programando para Internet » PHP »

[Aporte]galería de imágenes

Estas en el tema de [Aporte]galería de imágenes en el foro de PHP en Foros del Web. Hola a todos/as, Ya que son muchas las peticiones para subir imagenes al servidor, he creado esta pequena aplicación para hacer una galería de imagenes ...
  #1 (permalink)  
Antiguo 07/03/2010, 16:10
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 15 años, 3 meses
Puntos: 66
[Aporte]galería de imágenes

Hola a todos/as,

Ya que son muchas las peticiones para subir imagenes al servidor, he creado esta pequena aplicación para hacer una galería de imagenes relacionada con un usuario.

Es una aplicación muy básica por lo que necesitará de vuestros aportes para ir mejorando.

Si os parece bien iré modificando el código que expongo a continuación a medida que vallamos aportando ideas.

El objetivo sería en primer lugar divertirnos y luego ver hasta donde se puede llegar con php-mysql, css y jscript.

Pues nada más a quien le apetezca aportar aquí dejo el código base:

La aplicación se encuentra funcionando en: http://www.linkalis.com/galeria/index.php

código index.php
Código PHP:
<?php 
session_start
();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<?php
include("galeria_usuario.php");
if(isset(
$_GET['img_r']))
echo 
"<br/><br/><img border=0 src='images/".$_GET['img_r']."' />";
?>
</body>
</html>
código galeria_usuario.php

Código PHP:
<?php
$_SESSION
["usuario"]=1;//asignamos el valor al identificador de usuario
include("galeria.php");
$mi_galeria= new galeria();
$mi_galeria->usuario "user";//usuario base de datos
$mi_galeria->pass "*****";//pass base de datos
$mi_galeria->host "localhost";//host
$mi_galeria->db "name";//nombre base de datos
$mi_galeria->v_ancho=400;//ancho max de las imagenes
$mi_galeria->v_ancho_tumb=50;//ancho de los thumbnails
$mi_galeria->str_dir="images/";//directorio imagenes
$mi_galeria->user=$_SESSION["usuario"];//usuario imagenes
$mi_galeria->desc=$_POST["desc"];//descripci&oacute;n imagen
if(isset($_FILES["file"])){
$mi_galeria->tmp_img=$_FILES["file"]["tmp_name"];//directorio temporal
$mi_galeria->str_img=$_FILES["file"]["name"];//nombre imagen
$mi_galeria->max_size=$_FILES["file"]["size"];//tamaño imagen
$mi_galeria->tipo=$_FILES["file"]["type"];//tipo imagen
$mi_galeria->create_table();//crea la tabla images asociada al usuario
$mi_galeria->subir_img();//sube las imagenes
echo $mi_galeria->msg;//muestra los mensajes
}
?>
<form action="galeria_usuario.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
  <label>Imagen<br />
  <input type="file" name="file" />
  </label>
  <p>
    <label>Descripción<br />
    <textarea name="desc" cols="40" rows="4" id="desc"></textarea>
    </label>
  </p>
  <p>
    <label>
    <input type="submit" name="Submit" value="Enviar" />
    </label>
  </p>
</form>
<?php
$mi_galeria
->ver_galeria();//muestra la galeria
?>
la clase galeria.php

Código PHP:
<?php
/*
-Requisitos-
-php5
-librería GDI activada
-permisos de escritura en el directorio de las imagenes
*/
class galeria {

public 
$usuario='';
public 
$pass='';
public 
$host='';
public 
$db='';
public 
$v_ancho;
public 
$v_ancho_tumb;
public 
$tmp_img='';
public 
$str_img='';
public 
$str_dir='';
public 
$user='';
public 
$msg='';
public 
$desc='';
public 
$max_size='';
public 
$tipo='';

/////////////////////////////////conecta con la base de datos
    
function conect(){
        
$con_md mysql_pconnect($this->host$this->usuario$this->pass ) or trigger_error(mysql_error());
        
$conmysql_select_db($this->db$con_md);
        return 
$con;
        }
////////////////////////////////pendiente
    
function __construct(){
        }
///////////////////////////////crea la tabla images    
    
function create_table(){
        
$this->conect();
        
$sql 'CREATE TABLE `images` ('
        
' `id_image` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, '
        
' `id_user` INT(11) NOT NULL, '
        
' `name_image` VARCHAR(60) NOT NULL, '
        
' `fecha_image` DATE NOT NULL, '
        
' `desc_image` VARCHAR(225) NOT NULL'
        
' )'
        
' ENGINE = myisam;';
        
mysql_query($sql);
        }
/////////////////////////////sube la imagen y crea el thumbnail
    
function subir_img(){
        if(
$this->valida_img()){        
            
$this->conect();
            
$this->str_img str_replace(" ","_",$this->str_img);    
            if(
move_uploaded_file($this->tmp_img$this->str_dir.$this->str_img)){    
                if(
$this->v_ancho 0){
                    
$imgsrc=$this->str_dir.$this->str_img;
                    
$imgnew=$this->str_dir.$this->str_img;
                    
$ancho=getimagesize($imgsrc);
                    
$factor=$this->v_ancho/$ancho[0]; 
                    
$newx=$ancho[0]*$factor;
                    
$newy=$ancho[1]*$factor
                    
$quality=80;         
                    
$this->fun_resizejpg($imgsrc,$imgnew,$newx,$newy,$quality);
                }
                    
$imgsrc=$this->str_dir.$this->str_img;
                    
$imgnew=$this->str_dir."tumb_".$this->str_img;
                    
$ancho=getimagesize($imgsrc);
                    
$factor=$this->v_ancho_tumb/$ancho[0]; 
                    
$newx=$ancho[0]*$factor;
                    
$newy=$ancho[1]*$factor
                    
$quality=80;         
                    
$this->fun_resizejpg($imgsrc,$imgnew,$newx,$newy,$quality);
                    if(
strlen($this->desc)==0)
                    
$this->desc="Sin descripci&oacute;n";
                    
$insertSQL sprintf("INSERT INTO images (id_user, name_image, fecha_image, desc_image) VALUES (%s, %s, %s, %s)",
                           
$this->GetSQLValueString($this->user"int"),
                           
$this->GetSQLValueString($this->str_img"text"),
                           
$this->GetSQLValueString(date('Y-m-d'), "date"),
                           
$this->GetSQLValueString($this->desc"text"));
                if(
mysql_query($insertSQL) or die(mysql_error()))
                    
$this->msg="Imagen insertada correctamente";
                else
                    
$this->msg="La imagen no pudo ser insertada 1";
            }
            else
                
$this->msg="La imagen no pudo ser insertada 2";
        }
        else
            return 
$this->msg;
    }
////////////////////////////muestra la galeria
    
function ver_galeria(){
        
$this->conect();
        
$user_galeria=$this->user;
        
$sql="SELECT * FROM images WHERE id_user = $user_galeria";
        
$sqlquery=mysql_query($sql);
                
        while(
$row=mysql_fetch_array($sqlquery)){
            
//echo "<div>Imagen subida el ".$row["fecha_image"]."</div>";
            //echo "<div>Descripi&oacute;n ".$row["desc_image"]."</div>";
            
echo "<a href=index.php?img_r=".$row["name_image"]."><img border=0 src='".$this->str_dir."tumb_".$row["name_image"]."' /></a> ";
            
        }

    }
//////////////////////////validar la imagen tipo y tamaño    
    
function valida_img(){
        if(
$this->max_size 120000){
            
$this->msg="La imagen no debe exceder 1Mb";
            return 
false;
        }
            else{
                switch (
$this->tipo) {
                case 
"image/jpeg":
                    return 
true;
                    break;
                case 
"image/png":
                    return 
true;
                    break;
                case 
"image/gif":
                    return 
true;
                    break;
                default:
                
$this->msg="La imagen debe ser jpg, png o gif";
                echo 
"Archivo: ".$this->tipo."<br/>";
                return 
false;
                }
            }            
    }
//////////////////////////redimensiona la imagen        
    
function fun_resizejpg($imgsrc,$imgnew,$newx,$newy,$quality){  
        if( 
file_exists($imgsrc) )     {  
        list(
$srcx,$srcy,$ext) = getimagesize($imgsrc);       
        switch( 
$ext)       {    
        case 
:     
        
$old imagecreatefromgif($imgsrc);                     
        
$img imagecreate($srcx,$srcy);
        
imagecolorallocate($img255255255);                             
        
imagecopy($img,$old,0,0,0,0,$srcx,$srcy); 
        break;               
        case 
:     
        
$img imagecreatefromjpeg($imgsrc); 
        break;                           
        case 
:     
        
$img imagecreatefrompng($imgsrc);
         break;    
        case 
6:     
        
$img imagecreatefromwbmp($imgsrc);  
        break;               
        default:
        
print_r(getimagesize($imgsrc)); 
        return 
false;       }                
        
$tamx=$srcx;         
        
$tamy=$srcy;        
        if(
$srcx>$newx)
        
$pv=($srcx>$srcy)?$srcx/$newx:$srcy/$newy;        
        elseif(
$srcy>$newy)
        
$pv=($srcy>$srcx)?$srcy/$newy:$srcx/$newx;        
        if(isset(
$pv)){    
        
$srcx=ceil($srcx/$pv);     
        
$srcy=ceil($srcy/$pv);     }               
        
$new imagecreatetruecolor ($srcx$srcy);             
        
imagecopyresampled ($new$img0000$srcx$srcy$tamx$tamy);                     
        
imagejpeg($new,(substr($imgnew,0,strrpos($imgnew,"."))).".jpg",$quality);        
        
imagedestroy($img);              
        return 
true;    
        } 
        else 
        return 
false;
        }
/////////////////////////////evalua los datos
    
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;
    }

}
?>
__________________
Tu álbum de cromos online!!

Última edición por santris; 18/05/2010 a las 15:38
  #2 (permalink)  
Antiguo 08/03/2010, 14:24
 
Fecha de Ingreso: septiembre-2009
Mensajes: 281
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: [Aporte]galería de imágenes

Gracias por tu aporte pero tendo los siguientes problemas:
me sale estos mensajes de error:
Warning: imagecreatefromwbmp() [function.imagecreatefromwbmp]: 'images/18.jpg' is not a valid WBMP file in C:\xampp\htdocs\repasos\subir fotos\galeria.php on line 114

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\xampp\htdocs\repasos\subir fotos\galeria.php on line 129

Warning: imagedestroy(): supplied argument is not a valid Image resource in C:\xampp\htdocs\repasos\subir fotos\galeria.php on line 131
Imagen insertada correctamente

y Ademas sube la foto pero en fondo negro te dejo la imagen.
http://img697.imageshack.us/img697/5033/76624924.png

Me gustaria por favor cual es el problema
  #3 (permalink)  
Antiguo 08/03/2010, 14:49
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 15 años, 3 meses
Puntos: 66
Respuesta: [Aporte]galería de imágenes

Tienes activada la librería GDI?

Que tipo de archivo es?
__________________
Tu álbum de cromos online!!
  #4 (permalink)  
Antiguo 08/03/2010, 15:52
 
Fecha de Ingreso: septiembre-2009
Mensajes: 281
Antigüedad: 15 años, 1 mes
Puntos: 0
Pregunta Respuesta: [Aporte]galería de imágenes

SANTRIS YA LO HICE FUNCIONAR PERO NO TOTALMENTE DE DESCRIBO LO Q QUIERO HACER
UN FORMULARIO DONDE YA SE LLENARON LOS DATOS DE UNA DETERMINADA PERSONA Y ME APARACEN ASI
http://img402.imageshack.us/img402/4310/50153330.png
En la parte de la opciones existe una opcion historial donde me muestra esto:

http://img52.imageshack.us/img52/5959/32835650.png
QUIERO REALIZAR LO MISMO QUE HACES PERO DENTRO DE UNA FORMULARIO QUE ME MUESTRA SUS DATOS Y QUE SOLO QUIERO ADICIONAR SU FOTO SI TIENE Y ALGUN COMENTARIO.
PARA ESTO REALICE ALGUNOS CAMBIO EN TU CODIGO EN MI TABLA LLAMADA JUGADORES SOLO AUMENTE NAME_IMAGE, LUEGO EN MI FORMULARIO HISTORIA HICE ESTO
Código HTML:
<form name="form1" action="index.php?mod=jugadores&pag=historial" method="post"  enctype="multipart/form-data">
   <input name="hdn_id" type="hidden" value="<?php echo $item_jugador->id ?>" />

   <table border="0" align="center" class="tabla">
  
  <tr>
    <td id="carlos" style="text-align:left">Nombre</td>
    <td ><input type="text" name="nombre" size="15" maxlength="256" value="<?php echo $item_jugador->nombre; ?>" readonly="true"/><input type="text" name="paterno" size="15" maxlength="256" value="<?php echo $item_jugador->paterno; ?>" readonly="true"/><input type="text" name="materno" size="15" maxlength="256" value="<?php echo $item_jugador->materno; ?>" readonly="true"/></td>
  </tr>
  <tr>
    <td id="carlos" style="text-align:left">Lugar y Fecha de Nacimiento </td>
    <td><input type="text" name="lugar" size="10" maxlength="256"  value="<?php echo $item_jugador->lugar ?>" readonly="true"/>-- <input type="text" name="fecha_n" size="10" maxlength="256" value="<?php echo $item_jugador->fecha_n ?>" readonly="true"/>-- <input type="text" name="nacionalidad" size="10" maxlength="256" value="<?php echo $item_jugador->nacionalidad ?>" readonly="true"/></td>
  </tr>
  <tr>
    <td id="carlos" style="text-align:left">Edad</td>
    <td><input type="text" name="edad" size="2" maxlength="256" value="<?php echo $item_jugador-> edad ?>"  readonly="true" /> años</td>
  </tr>
    <td id="carlos" style="text-align:left">FOTOS </td>
     <td>
			 <?php
		include("galeria_usuario.php");
		if(isset($_GET['img_r']))
		echo "<br/><br/><img border=0 src='images/".$_GET['img_r']."' />";
		?>
	 
	 </td>
  </tr>
  <tr>
				<td colspan="2" align="center"> <input type="submit" value="Guardar" class="btn" />  
				<input  type="button" value="Cancelar" onClick="location.href = 'index.php?mod=jugadores&pag=listado'" class="btn">
 </tr>
  </form > 
SOLO AUMENTO EN MI FORM LA OPCION enctype="multipart/form-data", BIEN UNA VEZ QUE ME MUESTRA SUS DATOS Y QUE ELIJO UNA FOTO DE LA PERSONA ME DIRIGE A ESTA RUTA action="index.php?mod=jugadores&pag=historial"
Y ES ESTA.

Código PHP:
case 'historial':
        if(!empty($_SESSION['usuario_id'])||($_SESSION['usuario_nivel']==3)||($_SESSION['usuario_nivel']==2)){
            
            //subir imagen
            
            $_SESSION["usuario"]=1;//asignamos el valor al identificador de usuario
            include("modulos/jugadores/vistas/galeria.php");
            $mi_galeria= new galeria();
            $mi_galeria->usuario = "root";//usuario base de datos
            $mi_galeria->pass = "";//pass base de datos
            $mi_galeria->host = "localhost";//host
            $mi_galeria->db = "bd_asociacion";//nombre base de datos
            $mi_galeria->v_ancho=400;//ancho max de las imagenes
            $mi_galeria->v_ancho_tumb=50;//ancho de los thumbnails
            $mi_galeria->tmp_img=$_FILES["file"]["tmp_name"];//directorio temporal
            $mi_galeria->str_img=$_FILES["file"]["name"];//nombre imagen
            $mi_galeria->str_dir="images/";//directorio imagenes
            $mi_galeria->user=$_SESSION["usuario"];//usuario imagenes
            $mi_galeria->desc=$_POST["desc"];//descripci&oacute;n imagen
            if(isset($_FILES["file"])){
            //$mi_galeria->create_table();//crea la tabla images asociada al usuario
            $mi_galeria->subir_img();//sube las imagenes
            echo $mi_galeria->msg;//muestra los mensajes
            }
            ?>
              
              <input type="file" name="file" />
              </label>
            
            
            <?php 
            $mi_galeria
->ver_galeria();//muestra la galeria
             


            
            
                
if (empty($id)) {
                
                    if (
$MOD['jugadores']->setHistorial($comentario,$passwd,$name_image)){
                        echo 
"<center> <img src=modulos/imagenes/cargando.gif alt=cargando/></center>";
                        echo 
"<center>Historial exitoso!. Espere unos instantes</center>";
                        echo 
"<meta http-equiv=\"refresh\" content=\"3;URL=index.php?mod=jugadores&pag=listado\">\n";
                    } else {
                        echo 
"El registro no fue exitoso";
                    }
                } else {
                    if (
$MOD['jugadores']->setHistorial($comentario,$passwd,$name_image,$id)){
                        echo 
"<center> <img src=modulos/imagenes/cargando.gif alt=cargando/></center>";
                        echo 
"<center>Historial Guardado exitosamente!. Espere unos instantes</center>";
                        echo 
"<meta http-equiv=\"refresh\" content=\"3;URL=index.php?mod=jugadores&pag=listado\">\n";
                    } else {
                        echo 
"<center>El historial no fue exitosa</center>";
                    }
                }
        
        } else {
        
           echo 
" <center> Usted no tiene permisos </center>";
        }
        break;
BIEN COMO EN TU CODIGO EN GALERIA.PHP YA ESTAS CREANDO UNA TABLA Y ADEMAS INSERTANDO ESA PARTE LO PUSE COMO COMENTARIO Y AUMNETE A MI FUNCION SETHISTORIAL ESO
Código PHP:
        function setHistorial($comentario,$passwd$name_image,$id 0
        {
            global 
$MOD;
            
                if (empty(
$id)) {
                    
$consulta $MOD['mysql']->consulta('INSERT INTO jugadores (comentario,passwd,name_image) VALUES ( \''.$comentario.'\',\''.$passwd.'\',\''.$name_image.'\')');
                
                } else {
            
$consulta $MOD['mysql']->consulta('UPDATE jugadores SET comentario=\''.$comentario.'\',passwd=\''.$passwd.'\', name_image=\''.$name_image.'\' WHERE id='.$id);
                
               }
            
            return 
$consulta;
        } 
BIEN EL PROBLEMA ES EL SIGUIENTE CUANDO CARGO UNA IMAGEN NO SUBE ESTA FOTO NI EN CARPETA IMAGEN Y TAMPOCO LO INSERTA EN MI TABLA Q ESTA YA CREADA Y OTRA COSA MAS COMO PODRIA HACER PARA Q ANTES DE HACER CLICK EN EL BOTON SUBMIT DE MI HISTORIAL ME PUEDA VISUALIZAR ESA IMAGEN ??

GRACIAS POR EL APORTE
  #5 (permalink)  
Antiguo 08/03/2010, 16:24
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 15 años, 3 meses
Puntos: 66
Respuesta: [Aporte]galería de imágenes

Estás incluyendo un formulario dentro de otro, ya que el archivo galeria_usuario.php ya contiene un form.

Código PHP:
             <?php
        
include("galeria_usuario.php");
        if(isset(
$_GET['img_r']))
        echo 
"<br/><br/><img border=0 src='images/".$_GET['img_r']."' />";
        
?>
     
     </td>
  </tr>
  <tr>
                <td colspan="2" align="center"> <input type="submit" value="Guardar" class="btn" />  
                <input  type="button" value="Cancelar" onClick="location.href = 'index.php?mod=jugadores&pag=listado'" class="btn">
 </tr>
  </form >
__________________
Tu álbum de cromos online!!
  #6 (permalink)  
Antiguo 09/03/2010, 10:00
 
Fecha de Ingreso: septiembre-2009
Mensajes: 281
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: [Aporte]galería de imágenes

tendria q borra esta parte:
<?php
include("galeria_usuario.php");
if(isset($_GET['img_r']))
echo "<br/><br/><img border=0 src='images/".$_GET['img_r']."' />";
?>
  #7 (permalink)  
Antiguo 09/03/2010, 10:45
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 15 años, 3 meses
Puntos: 66
Respuesta: [Aporte]galería de imágenes

Cita:
Iniciado por vili86 Ver Mensaje
tendria q borra esta parte:
<?php
include("galeria_usuario.php");
if(isset($_GET['img_r']))
echo "<br/><br/><img border=0 src='images/".$_GET['img_r']."' />";
?>
En principio la aplicación está diseñada para crear una galería de imagenes de un usuario, la idea es que primero se registre el usuario y luego pongas la opción de insertar una galería.
Como ya dije es muy básica he iré añadiendo nuevos métodos a la clase y propiedades al objeto.

Si quieres darle otra funcionalidad deberias entender como funciona para cojer las partes que mejor se adapten a tus necesidades.

Referente a tu pregunta, no debes quitar esa parte pues es la que tiene el include a galeria.php.

Saludos
__________________
Tu álbum de cromos online!!
  #8 (permalink)  
Antiguo 09/03/2010, 14:04
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 15 años, 3 meses
Puntos: 66
Respuesta: [Aporte]galería de imágenes

He añadido un nuevo metodo a la clase que valida la imagen en tamaño(max 1 Mb) y tipo(jpg, png y gif);

Código PHP:
    function valida_img(){
        if(
$this->max_size 120000){
            
$this->msg="La imagen no debe exceder de 1Mb";
            return 
false;
        }
            else{
                switch (
$this->tipo) {
                case 
"image/jpeg":
                    return 
true;
                    break;
                case 
"image/png":
                    return 
true;
                    break;
                case 
"image/gif":
                    return 
true;
                    break;
                default:
                
$this->msg="La imagen debe ser jpg, png o gif";
                echo 
"Archivo: ".$this->tipo."<br/>";
                return 
false;
                }
            }            
    } 
Y las propiedades del objeto:

Código PHP:
$mi_galeria->max_size=$_FILES["file"]["size"];//tamaño imagen
$mi_galeria->tipo=$_FILES["file"]["type"];//tipo imagen 
Ambas modificaciones se encuentran ya implementadas en el aporte original.
__________________
Tu álbum de cromos online!!

Etiquetas: Ninguno
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 17:25.