Foros del Web » Programando para Internet » PHP »

Subir foto de perfil de usuario

Estas en el tema de Subir foto de perfil de usuario en el foro de PHP en Foros del Web. Hola a todos. Estoy intentando que el usuario a través de un formulario, suba una foto de perfil, la foto se guarde en una carpeta ...
  #1 (permalink)  
Antiguo 13/08/2011, 17:10
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 1 mes
Puntos: 17
Subir foto de perfil de usuario

Hola a todos.

Estoy intentando que el usuario a través de un formulario, suba una foto de perfil, la foto se guarde en una carpeta y la ruta en la base de datos, para luego llamar a la ruta y mostrar la foto cuando sea preciso.

He estado viendo este aporte para el upload de fotos:

http://www.forosdelweb.com/wiki/PHP:...as_al_servidor

Pero no llego a ninguna parte

¿Alguien sabe de algún tutorial o ejemplo al respecto? He estado buscando y rebuscando pero encuentro el upload solo, el comprobar si el archivo es una imagen.... pero un ejemplo conciso de guardar la foto e insertar su ruta en la bd... nada de nada...

Si alguien me echa un cable lo agradecería. :)

Muchas gracias.
  #2 (permalink)  
Antiguo 13/08/2011, 17:24
Avatar de jatg  
Fecha de Ingreso: abril-2011
Ubicación: caracas
Mensajes: 152
Antigüedad: 13 años
Puntos: 15
Respuesta: Subir foto de perfil de usuario

hola follow , te lo explico en un pequeno tutorial veras que es facil

aqui vamos

¿Quien se podría imaginar el guardar imágenes en una Base de Datos? Al principio ni me pasaba por la cabeza, hasta que ya vas conociedo las herramientas y con el tiempo surgen nuevas ideas y surge la inquietud. ¿Se podrán guardar imágenes en una Base de Datos? La respuesta es que sí.
Requerimientos

PHP >= 3.0.16
MySQL
Habilitar la extension en PHP sobre GD

Creación de Base de datos y Tabla

Vamos a comenzar creando una Base de Datos, en nuestro caso se llama bd_banners y dentro de esta creamos una tabla (en nuestro caso se llama tbl_Banner) con los campos;

Id_banner (Llave, autonumérico)
Nombre (Texto)
Descripcion (Texto)
Imagen (Blob)

Conectarnos a la BD

Ahora simplemente nos conectamos a MySQL y seleccionamos nuestra Base de Datos bd_banners.

$link = mysql_connect('localhost', 'root', 'password');
if (!$link)
die('Error al conectarse con MySQL: ' . mysql_error().' <br>Número del error: '.mysql_errno());
if (! @mysql_select_db("db_AdMX",$link)){
echo "No se pudo conectar correctamente con la Base de datos";
exit();
}

Almacenar imagen en la BD

Antes de almacenar la imágen en la BD, debemos de procesarla para llegar a convertirla en datos binarios.

$image = imagecreatefromgif('imagen.gif');
ob_start();
imagegif($image);
$jpg = ob_get_contents();
ob_end_clean();

NOTA: En este ejemplo se guarda una imagen tipo GIF, por eso se utilizan las funciones imagecreateformgif e imagegif. Si se desea almacenar una imágen tipo JPEG, hay que utilizar las funciones imagecreatefromjpeg e imagejpeg. Asi solamente se cambia el tipo de imagen en las funciones. Para ver los tipos de imágenes que soporta PHP+GD pulsa aquí.

Ahora sí que vamos a almacenarla; para esto convertimos la información de la imagen en sql-safe y simplemente hacemos una consulta para guardarla.

$jpg = str_replace('##','##',mysql_escape_string($jpg));
$result = mysql_query("INSERT INTO tbl_Banner SET Imagen='$jpg'");

Extraer la imagen de la BD y mostrarla en el navegador

Ahora vamos a extraer la imagen mediante un simple SELECT y la vamos a mostrar en el navegador.

$result = mysql_query("SELECT Imagen FROM tbl_Banner WHERE Id_imagen=11");
$result_array = mysql_fetch_array($result);
header("Content-Type: image/gif");
echo $result_array[0];

Simplemente con esto guardamos la imágen en una variable y antes de mostrarla le decimos al navegador que el contenido a mostrar es una imagen GIF. Si se va a mostrar imágenes JPEG hay que cambiar image/gif por image/jpeg y asi para los diferentes formatos
__________________
www.josealexis.net
  #3 (permalink)  
Antiguo 13/08/2011, 17:25
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 13 años
Puntos: 9
Respuesta: Subir foto de perfil de usuario

no es dificil, cuando tal usuario esta logeado en la web, y quiere subir una foto a su perfil, una vez que la sube la guardas en la base de datos en una tabla por ejemplo que se llame fotos y que dentro tenga un registro url y otro registro id, en el pimer registro guardar la direccion de la imagen y en el otro el id del usuario que esta actualmente conectado. Y cuando quieres que se muestre la foto depende del usuario que sea haces una consulta a la tabla fotos comparando con "where" el id del registro con el id del usuario que esta logeado.
  #4 (permalink)  
Antiguo 13/08/2011, 17:28
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 1 mes
Puntos: 17
Respuesta: Subir foto de perfil de usuario

Se me olvidó poner lo que tengo mas o menos hecho! jejejej A ver si por lo menos alguien me dice si esto es factible o es na tontería!

El form:
Código HTML:
<form action="procesar.php" enctype="multipart/form-data" method="post">
    <label for="imagen">Imagen:</label>
    <input id="imagen" name="imagen" size="30" type="file" />
 
    <input name="submit" type="submit" value="Guardar" />
</form> 
Y ahora proceso la imagen. pero claro, pienso que debería de renombrarlas al subirlas ¿no? Ya que los usuarios pueden subir fotos con el mismo nombre.... Pero no se muy bien como hacerlo :S

Código PHP:
<?php
 
    
// conexión
    
$user "usuario_bbdd";
    
$pass "clave_bbdd";
    
$bbdd "nombre_bbdd";
 
    
// Ruta donde se guardarán las imágenes
    
$directorio $_SERVER['DOCUMENT_ROOT'].'/uploads/';
 
    
// Conecto a la BBDD
    
$dbh mysql_connect("localhost"$user$pass);
    
$db mysql_select_db($bbdd);
 
    
// Recibo los datos de la imagen
    
$nombre $_FILES['imagen']['name'];
    
$tipo $_FILES['imagen']['type'];
    
$tamano $_FILES['imagen']['size'];
 
    
// Muevo la imagen desde su ubicación
    // temporal al directorio definitivo
    
move_uploaded_file($_FILES['imagen']['tmp_name'],$directorio.$nombre);
 
?>
Y luego guardo la ruta en la bd:
Código PHP:
   // Guardo en la BBDD
    
$sql "INSERT into TABLAIMAGENES (nombre_archivo) values ('$nombre')";
    
$resultado mysql_query($sql);
 
    
// Por si quiero la ID asignada a la imagen
    
$id mysql_insert_id() 
No se si esto está bien enfocado la verdad...
  #5 (permalink)  
Antiguo 13/08/2011, 17:33
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 1 mes
Puntos: 17
Respuesta: Subir foto de perfil de usuario

Hola hackcrack, muchas gracias por contestarme, me ha venido bien tu comentario, ya que no sabía muy bien como enfocar el mostrar la foto cada vez que se viera su perfil o cuando dessee mostrar la foto de perfil.

El caso es que entonces a la foto le agrego le asigno un id, y un campo con el id del usuario... asi como tu dices le hago una comparación y le saco la foto que le corresponde a cada usuario. He entendido bien? ¿Que te parece el codigo, voy bien?
  #6 (permalink)  
Antiguo 13/08/2011, 17:40
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 1 mes
Puntos: 17
Respuesta: Subir foto de perfil de usuario

jatg, Gracias por contestar, estuve leyendo ese tutorial pero en realidad no se si esa es la forma mas adecuada de hacerlo (por lo que he leído por la red) aún así si no consigo dar con la solución de guardar la ruta y tal, lo barajaré como opción :)

Muchas gracias por contestar!
  #7 (permalink)  
Antiguo 13/08/2011, 17:42
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 13 años
Puntos: 9
Respuesta: Subir foto de perfil de usuario

exacto, esperate un cacho que te hago el codigo y te lo paso
  #8 (permalink)  
Antiguo 13/08/2011, 17:50
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 1 mes
Puntos: 17
Respuesta: Subir foto de perfil de usuario

hackcrack si me haces el favor de echarme una mano estoy en deuda eternamente! Es que estoy con el tema de las imagenes mas perdido que nada... no me aclaro. Quería meterme de lleno en hacer una galería de imagenes para cada usuario pero visto lo visto... NO!! jejejje
  #9 (permalink)  
Antiguo 13/08/2011, 17:54
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 13 años
Puntos: 9
Respuesta: Subir foto de perfil de usuario

Suponiendo que la variable de usuario es
$_SESSION['usuario']


<?php

// conexión
$user = "usuario_bbdd";
$pass = "clave_bbdd";
$bbdd = "nombre_bbdd";

// Ruta donde se guardarán las imágenes
$directorio = $_SERVER['DOCUMENT_ROOT'].'/uploads/';

// Conecto a la BBDD
$dbh = mysql_connect("localhost", $user, $pass);
$db = mysql_select_db($bbdd);

// Recibo los datos de la imagen
$nombre = $_FILES['imagen']['name'];
$tipo = $_FILES['imagen']['type'];
$tamano = $_FILES['imagen']['size'];

// Muevo la imagen desde su ubicación
// temporal al directorio definitivo
move_uploaded_file($_FILES['imagen']['tmp_name'],$directorio.$nombre);

?>

en la base de dato crea un registro que tenga de nombre id

// Guardo en la BBDD
$sql = "INSERT into TABLAIMAGENES (nombre_archivo,id) values ('$directorio.$nombre','$_SESSION['usuario']')";
$resultado = mysql_query($sql);

cuando quieres mostrar la imagen haces pones esto:

$query = mysql_query("SELECT * FROM TABLAIMAGENES WHERE id=$_SESSION['usuario'] ");
$resultado = mysql_query ($query);

<img src="<?php echo $resultado['nombre_archivo'] ?>" />

bue supuestamente tendria que funcionar con eso cualquier cosa me avisas
  #10 (permalink)  
Antiguo 13/08/2011, 18:02
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 1 mes
Puntos: 17
Respuesta: Subir foto de perfil de usuario

hackcrack eres un crack, me funciona perfect perfect. Voy a ver como renombro el archivo al subirlo para que no hayan problemas de duplicados y ya está!

Gracias de nuevo amigo! Te debo una!
  #11 (permalink)  
Antiguo 13/08/2011, 18:10
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 13 años
Puntos: 9
Respuesta: Subir foto de perfil de usuario

Ja funciono? buenisimo, para renombrarlo tienes que modificar este codigo

$nombre = $_FILES['imagen']['name'];

Etiquetas: foto, perfil, formulario, usuarios
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:13.