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í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 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ó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
?>
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());
$con= mysql_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ó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ó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 1 :
$old = imagecreatefromgif($imgsrc);
$img = imagecreate($srcx,$srcy);
imagecolorallocate($img, 255, 255, 255);
imagecopy($img,$old,0,0,0,0,$srcx,$srcy);
break;
case 2 :
$img = imagecreatefromjpeg($imgsrc);
break;
case 3 :
$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, $img, 0, 0, 0, 0, $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;
}
}
?>