Comunidad de diseño web y desarrollo en internet online

alguien cacha como subir fotos a una db mysql

Citar            
MensajeEscrito el 03 Sep 2005 02:12 am
alguien cacha como subir fotos a una db mysql, yo encontre este codigo pero solo me sube archivos de menos de 100kb y solo gif.
Ojala alguien me ayude.
Este es el codigo:


Para poder utilizar este código, necesitais disponer de una base de datos denominada 'prueba', con una tabla denominada 'prueba'.
Los campos de dicha base de datos son:
id - smallint (autonumerico)
anchura - smallint
altura - smallint
tipo - char(15)
imagen - blob

Se precisan dos archivos: imagen_agregar.php y imagen_mostrar.php


Código :

<?
########## imagen_agregar.php ##########
# http://www.lawebdelprogramador.com
?>
<html>
<body>
<?
$link=mysql_connect("localhost","usuario","password");
mysql_select_db("prueba",$link);
//echo "<BR>".$userfile; //nombre del archivo de la imagen temporal
//echo "<BR>".$userfile_name; //nombre del archivo
//echo "<BR>".$userfile_size; //tamaño
//echo "<BR>".$userfile_type; //tipo
if ($userfile!="none" && $userfile!="")
{
   if ($userfile_type=="image/jpeg" || $userfile_type=="image/pjpeg" || $userfile_type=="image/gif" || $userfile_type=="image/bmp")
   {
      $info=getimagesize($userfile);
      //echo "<BR>".$info[0]; //anchura
      //echo "<BR>".$info[1]; //altura
      //echo "<BR>".$info[2]; //1-GIF, 2-JPG, 3-PNG
      //echo "<BR>".$info[3]; //cadena de texto para el tag <img
      $x=addslashes(fread(fopen($userfile,"r"),filesize($userfile)));

      //agregamos los campos a la tabla 'Programadores'
      $result=mysql_query("INSERT INTO prueba (anchura,altura,tipo,imagen) VALUES (".$info[0].",".$info[1].",'$userfile_type','$x')",$link);
      $id=mysql_insert_id();
      echo "Imagen agregada con el id ".$id."<BR>";
      echo "<img src='imagen_mostrar.php?id=".$id."'>";
   }else{
      $error="El tipo de archivo tienes que ser JPG, GIF o BMP.";
   }
}else{
   if ($userfile!="")
      $error="No ha seleccionado ninguna imagen...";
}
mysql_close($link);
if ($error!="")
{
   echo "</center><P><font face='Arial' size=2 color='#ff0000'> Error: ".$error."</font><br>";
}
?>

<form ENCTYPE="multipart/form-data" action="imagen_agregar.php" method="POST">
   <INPUT NAME="userfile" TYPE="file">
   <p><input type="submit" value="Guardar Imagen" class="boton">
</form>
</body>
</html>


Código :

<?
########## imagen_mostrar.php ##########
# deve recibir el id de la imagen a mostrar
# http://www.lawebdelprogramador.com
$link=mysql_connect("localhost","usuario","password");
mysql_select_db("prueba",$link);
//buscamos el banner a mostrar
$result=mysql_query("SELECT * FROM prueba WHERE id=$id",$link);
$row=mysql_fetch_array($result);
header("Content-type:".$row["tipo"]); 
echo $row["imagen"];
?>


[moderador]fuero agregadas las etiquetas code[/moderador]

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie
Citar            
MensajeEscrito el 03 Sep 2005 08:02 am
if ($userfile_type=="image/jpeg" || $userfile_type=="image/pjpeg" || $userfile_type=="image/gif" || $userfile_type=="image/bmp")
{

con esta linea chekeas el tipo de archivo que es, a parte de gif, puedes subir bmp, y jpeg ... que mas quieres? pues puedes poner las terminaciones de png y ... poko mas diria yo

Sobre lo del tamaño yo no veo ninguna restriccion en la programacion asi que imagino que sera por parte de la tabla, del mysql o del propio php [este aguanta un maximo de 2MB por defecto asi que lo dudo]

Por otra parte no entiendo, y dudo que entienda en u futuro, porque la gente guarda imagenes en bases de datos. es mucho mas facil y comodo subir la imagen y guardar la ruta, asi la DB es menos pesada [MUCHO menos pesada] lo que lleva que las buskedas, backups y demas se hagan con mayor rapidez, ademas de que es mas flexible.... y las imagenes son accesibles sin DB

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

firefox
Citar            
MensajeEscrito el 04 Sep 2005 08:12 pm
Si yo tengo modelada una db con link a los archivos, pero era para cachar como se podia subir imagenes no mas.

yo se k los comandos que se usan para esto son :
-para copiar.
@copy($archivo,$nuevonombre);
-para eliminar.
unlink($nuevonombre);
*Pero la duda es cuando quieres limpiar la tabla que tiene las fotos, primero tengo que eliminar la ruta de los archivos y luego los campos de la db, y al usar muchas veces la sentencia unlink, podra surgir algun error, o la tarea de eliminar se demora demasiado.
esop.

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie
Citar            
MensajeEscrito el 05 Sep 2005 02:47 am
Opino igual que ICEM4N, es una perdida de tiempo guardar las imagenes en una BD

Por Aoyama

BOFH

6224 de clabLevel

6 tutoriales
12 articulos

Genero:Masculino   Anime Bloggers Bastard Operators From Hell

Webdesigner & Developer, en mis ratos libres bebo café por litros.

firefox
Citar            
MensajeEscrito el 05 Sep 2005 11:34 am
también estoy con ice y aoyama, es PÉSIMA idea guardar imagenes en bases de datos por las causas que mencionó ice
y como punto a parte, copy() se utiliza para cuando tienes archivos ya subidos y quieres cambiarlos de lugar, NO es función para subirlos.

Por fael

BOFH

2443 de clabLevel

3 tutoriales
2 articulos

 

firefox
Citar            
MensajeEscrito el 05 Sep 2005 01:24 pm

ICEM4N escribió:


[este aguanta un maximo de 2MB por defecto asi que lo dudo]

Esto es configurable en el php.ini o en los archivos de configuración de apache (salvo por .htaccess)
en el php.ini hay que buscar la linea que dice
upload_max_filesize y cambiarle el valor de 2 a mas si asi lo deseas.
en el caso de querer cambiarlo desde apache deberás incluir esta linea:
php_admin_flag upload_max_filesize "100M"
y cambiar donde dice 100M por la cantidad de tu preferencia.

ICEM4N escribió:


Por otra parte no entiendo, y dudo que entienda en u futuro, porque la gente guarda imagenes en bases de datos. es mucho mas facil y comodo subir la imagen y guardar la ruta.

es mas que todo cuestión de preferencia, una imagen en una Base de datos nunca estorba, una imagen en una carpeta es una molestia, cuando se trata de uploads publicos, hay que tomar en cuenta que un upload a una carpeta puede significar una importante entrada a un servidor para un Defacer o un Phisher, lo cual obviamente no es nada conveniente.
sin embargo, con precaución se pueden limitar estos riezgos. sin embargo con bases de datos esto no es necesario. ya que el archivo no se ejecuta; el archivo se lee y se muestra.
a demás el tema de el tratamiento de los datos, es mucho mas sencillo y mas ligero hacer strlen($reg['foto'])
que filesize('./carpeta/'.$archivo);
es algo mas tedioso, pero luego es mas fácil.

para en caso de los uploads no uses copy()

Código :

@copy($archivo,$nuevonombre);

lo ideal es usar move_uploaded_file()
asi:

Código :

move_uploaded_file($archivo,$nuevonombre);

porque la idea es subirlo, no sacarle una copia.
luego del upload, asegurate de quitarle los permisos de ejecución al archivo con chmod();
asi:

Código :

chmod($nuevonombre,0755);

que seria:
todos los permisos par el propietario, lectura y escritura para los demas

Por jhony192

791 de clabLevel

1 tutorial

Genero:Masculino  

Just Another Programmer

firefox
Citar            
MensajeEscrito el 05 Sep 2005 01:36 pm
Para que te des una idea más clara de como hacerlo
http://www.cristalab.com/tutoriales/112/subir_archivos_con_php_por_ftp

Insisto no sólo es una perdida de tiempo, sino un estorbo a la hora de realizar un backup. Lo siento Coderic, pero no comparto tu idea de que es cuestión de preferencia, es cuestión de optimización y rendimiento, y sigue siendo una mala práctica. Así modifiques el php.ini o el htaccess

Por Aoyama

BOFH

6224 de clabLevel

6 tutoriales
12 articulos

Genero:Masculino   Anime Bloggers Bastard Operators From Hell

Webdesigner & Developer, en mis ratos libres bebo café por litros.

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.