Foros del Web » Programando para Internet » PHP »

¿Cómo relacionar el nombre de una foto con el usuario que la subió?

Estas en el tema de ¿Cómo relacionar el nombre de una foto con el usuario que la subió? en el foro de PHP en Foros del Web. Hola a todos, tengo el siguiente problema, tengo una web que hasta ahora no había necesitado de que los usuarios tuviesen su propio espacio (se ...
  #1 (permalink)  
Antiguo 17/01/2014, 11:59
Avatar de AngelMarine  
Fecha de Ingreso: enero-2014
Ubicación: Madrid
Mensajes: 79
Antigüedad: 10 años, 3 meses
Puntos: 0
Pregunta ¿Cómo relacionar el nombre de una foto con el usuario que la subió?

Hola a todos, tengo el siguiente problema, tengo una web que hasta ahora no había necesitado de que los usuarios tuviesen su propio espacio (se registraban solo para acceder a determinados contenidos), ahora si necesito que estos puedan subir sus imágenes y otros datos, el caso es, que cuando el usuario suba sus fotos estas queden ligadas a el, de tal manea que solo el pueda ver sus imágenes cuando abra su sesión.

¿Cómo podría hacer lo que planteo?

Este es mi código php con que suben sus fotos:

Supongo que he de usar la base de datos donde esta la tabla de los registros de los usuarios.

Está puesto lo esencial...

<?php
error_reporting (E_ALL ^ E_NOTICE);
session_start();
if (!isset($_SESSION['random_key']) || strlen($_SESSION['random_key'])==0){
$_SESSION['random_key'] = strtotime(date('Y-m-d H:i:s'));
$_SESSION['user_file_ext']= "";
}

$upload_dir = "upload_pic";
$upload_path = $upload_dir."/";
$large_image_prefix = "resize_";
$thumb_image_prefix = "thumbnail_";
$large_image_name = $large_image_prefix.$_SESSION['random_key'];
$thumb_image_name = $thumb_image_prefix.$_SESSION['random_key'];
$max_file = "2";
$max_width = "500";
$max_height= "350";
$thumb_width = "120";
$thumb_height = "120";

$allowed_image_types = array('image/pjpeg'=>"jpg",'image/jpeg'=>"jpg",'image/jpg'=>"jpg",'image/png'=>"png",'image/x-png'=>"png",'image/gif'=>"gif");
$allowed_image_ext = array_unique($allowed_image_types);
$image_ext = "";
foreach ($allowed_image_ext as $mime_type => $ext) {
$image_ext.= strtoupper($ext)." ";
}

function resizeImage($image,$width,$height,$scale) {
list($imagewidth, $imageheight, $imageType) = getimagesize($image);
$imageType = image_type_to_mime_type($imageType);
$newImageWidth = ceil($width * $scale);
$newImageHeight = ceil($height * $scale);
$newImage = imagecreatetruecolor($newImageWidth,$newImageHeigh t);
switch($imageType) {
case "image/gif":
$source=imagecreatefromgif($image);
break;
case "image/pjpeg":
case "image/jpeg":
case "image/jpg":
$source=imagecreatefromjpeg($image);
break;
case "image/png":
case "image/x-png":
$source=imagecreatefrompng($image);
break;
}
imagecopyresampled($newImage,$source,0,0,0,0,$newI mageWidth,$newImageHeight,$width,$height);

switch($imageType) {
case "image/gif":
imagegif($newImage,$image);
break;
case "image/pjpeg":
case "image/jpeg":
case "image/jpg":
imagejpeg($newImage,$image,90);
break;
case "image/png":
case "image/x-png":
imagepng($newImage,$image);
break;
}

chmod($image, 0777);
return $image;
}

function resizeThumbnailImage($thumb_image_name, $image, $width, $height, $start_width, $start_height, $scale) {
list($imagewidth, $imageheight, $imageType) = getimagesize($image);
$imageType = image_type_to_mime_type($imageType);

$newImageWidth = ceil($width * $scale);
$newImageHeight = ceil($height * $scale);
$newImage = imagecreatetruecolor($newImageWidth,$newImageHeigh t);
switch($imageType) {
case "image/gif":
$source=imagecreatefromgif($image);
break;
case "image/pjpeg":
case "image/jpeg":
case "image/jpg":
$source=imagecreatefromjpeg($image);
break;
case "image/png":
case "image/x-png":
$source=imagecreatefrompng($image);
break;
}
imagecopyresampled($newImage,$source,0,0,$start_wi dth,$start_height,$newImageWidth,$newImageHeight,$ width,$height);
switch($imageType) {
case "image/gif":
imagegif($newImage,$thumb_image_name);
break;
case "image/pjpeg":
case "image/jpeg":
case "image/jpg":
imagejpeg($newImage,$thumb_image_name,90);
break;
case "image/png":
case "image/x-png":
imagepng($newImage,$thumb_image_name);
break;
}
chmod($thumb_image_name, 0777);
return $thumb_image_name;
}

function getHeight($image) {
$size = getimagesize($image);
$height = $size[1];
return $height;
}

function getWidth($image) {
$size = getimagesize($image);
$width = $size[0];
return $width;
}

$large_image_location = $upload_path.$large_image_name.$_SESSION['user_file_ext'];
$thumb_image_location = $upload_path.$thumb_image_name.$_SESSION['user_file_ext'];


if(!is_dir($upload_dir)){
mkdir($upload_dir, 0777);
chmod($upload_dir, 0777);
}


if (file_exists($large_image_location)){
if(file_exists($thumb_image_location)){
$thumb_photo_exists = "<img style=\"vertical-align: middle;\" src=\"".$upload_path.$thumb_image_name.$_SESSION['user_file_ext']."\" alt=\"Thumbnail Image\"/>";
}else{
$thumb_photo_exists = "";
}
$large_photo_exists = "<img src=\"".$upload_path.$large_image_name.$_SESSION['user_file_ext']."\" alt=\"Large Image\"/>";
} else {
$large_photo_exists = "";
$thumb_photo_exists = "";
}

if (isset($_POST["upload"])) {

$userfile_name = $_FILES['image']['name'];
$userfile_tmp = $_FILES['image']['tmp_name'];
$userfile_size = $_FILES['image']['size'];
$userfile_type = $_FILES['image']['type'];
$filename = basename($_FILES['image']['name']);
$file_ext = strtolower(substr($filename, strrpos($filename, '.') + 1));


if((!empty($_FILES["image"])) && ($_FILES['image']['error'] == 0)) {

foreach ($allowed_image_types as $mime_type => $ext) {

if($file_ext==$ext && $userfile_type==$mime_type){
$error = "";
break;
}else{
$error = "Only <strong>".$image_ext."</strong> images accepted for upload<br />";
}
}

if ($userfile_size > ($max_file*1048576)) {
$error.= "Images must be under ".$max_file."MB in size";
}

}else{
$error= "Select an image for upload";
}

if (strlen($error)==0){

if (isset($_FILES['image']['name'])){

$large_image_location = $large_image_location.".".$file_ext;
$medium_image_location = $medium_image_location.".".$file_ext;
$thumb_image_location = $thumb_image_location.".".$file_ext;

$_SESSION['user_file_ext']=".".$file_ext;

move_uploaded_file($userfile_tmp, $large_image_location);
chmod($large_image_location, 0777);

$width = getWidth($large_image_location);
$height = getHeight($large_image_location);

if ($height > $max_height){
$scale = $max_height/$height;
$uploaded = resizeImage($large_image_location,$width,$height,$ scale);
}else{
$scale = 1;
$uploaded = resizeImage($large_image_location,$width,$height,$ scale);
}

if (file_exists($thumb_image_location)) {
unlink($thumb_image_location);
}
if (file_exists($medium_image_location)) {
unlink($medium_image_location);
}
}

header("location:".$_SERVER["PHP_SELF"]);
exit();
}
}

if (isset($_POST["upload_thumbnail"]) && strlen($large_photo_exists)>0) {

$x1 = $_POST["x1"];
$y1 = $_POST["y1"];
$x2 = $_POST["x2"];
$y2 = $_POST["y2"];
$w = $_POST["w"];
$h = $_POST["h"];

$scale = $thumb_width/$w;
$cropped = resizeThumbnailImage($thumb_image_location,
$large_image_location,$w,$h,$x1,$y1,$scale);


header("location:".$_SERVER["PHP_SELF"]);
exit();
}

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

Aquí va el html de lo que forma la página en si, pero como ya he dicho lo esencial está puesto.

</html>
  #2 (permalink)  
Antiguo 17/01/2014, 12:05
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 15 años, 6 meses
Puntos: 36
Respuesta: ¿Cómo relacionar el nombre de una foto con el usuario que la subió?

AngelMarine,

En escencia lo que tienes que hacer es asociar las imagenes que cada usuario suba al server con su identificador unico, puedes usar una tabla adicional para esto y establecer una ralacion de uno a muchos.

Saludos y suerte...
  #3 (permalink)  
Antiguo 17/01/2014, 12:19
Avatar de AngelMarine  
Fecha de Ingreso: enero-2014
Ubicación: Madrid
Mensajes: 79
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: ¿Cómo relacionar el nombre de una foto con el usuario que la subió?

Cita:
Iniciado por alexisverano Ver Mensaje
AngelMarine,

En escencia lo que tienes que hacer es asociar las imagenes que cada usuario suba al server con su identificador unico, puedes usar una tabla adicional para esto y establecer una ralacion de uno a muchos.

Saludos y suerte...
Mmm..., ¿Podríais explicarme mejor esto?, sin ánimos de dejarte el trabajo a ti, jejeje, solo unos cuantos detalles, :

Tengo una base de datos de nombre 'registros' y dentro de esta una tabla llamada usuarios que está conformada de esta forma:

Columnas:

nombre :: apellidos :: email :: contraseña :: edad :: género :: id este id es único para cada usuario

Entonces lo esencial seria que cada imagen subida este asociado al 'id', ¿cierto?.

Pero lo de crear una tabla aparte, ¿A qué te refieres con esto?
  #4 (permalink)  
Antiguo 17/01/2014, 12:36
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 15 años, 6 meses
Puntos: 36
Respuesta: ¿Cómo relacionar el nombre de una foto con el usuario que la subió?

En la tabla usuarios tienes el campo "id" que es UNICO para cada usuario.
Puedes crear una tabla (por ejemplo) llamada imagenes, con los campos: id, idusuarios, nombre_imagen.

Cada vez que un usuario envie una imagen al servidor, tomas el nombre de esa imagen o puedes cambiarselo por otro durante el proceso de subirla al servidor y despues guardas en la tabla imagenes el nombre de la misma con el idusuarios al cual corresponda.

Lo demas es hacer un filtro de las imagenes que correspondan a cada usuario.
  #5 (permalink)  
Antiguo 17/01/2014, 12:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Cómo relacionar el nombre de una foto con el usuario que la subió?

Cita:
Iniciado por AngelMarine Ver Mensaje
Mmm..., ¿Podríais explicarme mejor esto?, sin ánimos de dejarte el trabajo a ti, jejeje, solo unos cuantos detalles, :

Tengo una base de datos de nombre 'registros' y dentro de esta una tabla llamada usuarios que está conformada de esta forma:

Columnas:

nombre :: apellidos :: email :: contraseña :: edad :: género :: id este id es único para cada usuario

Entonces lo esencial seria que cada imagen subida este asociado al 'id', ¿cierto?.

Pero lo de crear una tabla aparte, ¿A qué te refieres con esto?
¿Has oido hablar del Modelo Entidad-Relación? ¿De Bases de Datos Relacionales?

Bueno, no inventes la rueda. Usa la que ya inventaron...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 17/01/2014, 13:11
Avatar de leonaryoel  
Fecha de Ingreso: octubre-2013
Ubicación: Villa Clara
Mensajes: 64
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: ¿Cómo relacionar el nombre de una foto con el usuario que la subió?

Creo que esta es la mejor opción que puedes tomar, yo lo utilizo así y me funciona a la perfección, las imágenes no se les pierde a ningun usuario, jajaja.

Al igual puedes hacer con galerías para cada usuario, crear una tabla galería con un campo idusuario(es el que va a permitir que la galería pertenesca al usuario), luego creas otra tabla fotos con un campo idgaleria(que es el que va a permitir que la foto pertenesca a la galería del usuario).

luego con la consulta seleccionnas todos los campos de galería donde id usuario sea igual a id del usuario que pasas por guet o post y luego seleccionas todos los campos de fotos donde idgaleria sea igual id de la galería encontrada en la consulta anterior, entiendes???

esata es una buena opción, implementala y luego me dices...
  #7 (permalink)  
Antiguo 17/01/2014, 13:12
Avatar de leonaryoel  
Fecha de Ingreso: octubre-2013
Ubicación: Villa Clara
Mensajes: 64
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: ¿Cómo relacionar el nombre de una foto con el usuario que la subió?

Cita:
Iniciado por alexisverano Ver Mensaje
En la tabla usuarios tienes el campo "id" que es UNICO para cada usuario.
Puedes crear una tabla (por ejemplo) llamada imagenes, con los campos: id, idusuarios, nombre_imagen.

Cada vez que un usuario envie una imagen al servidor, tomas el nombre de esa imagen o puedes cambiarselo por otro durante el proceso de subirla al servidor y despues guardas en la tabla imagenes el nombre de la misma con el idusuarios al cual corresponda.

Lo demas es hacer un filtro de las imagenes que correspondan a cada usuario.

Etiquetas: php+bd+mysql
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 20:29.