Foros del Web » Programando para Internet » PHP »

no se si se pueden meter fotos a mysql por medio de multipart/form-data

Estas en el tema de no se si se pueden meter fotos a mysql por medio de multipart/form-data en el foro de PHP en Foros del Web. cuando tratar de subir las fotos por medio de un formulario solo me salen los nombres de las fotos pero no me sale la misma. ...
  #1 (permalink)  
Antiguo 27/04/2003, 17:04
 
Fecha de Ingreso: abril-2003
Ubicación: Guatemala
Mensajes: 93
Antigüedad: 21 años
Puntos: 1
no se si se pueden meter fotos a mysql por medio de multipart/form-data

cuando tratar de subir las fotos por medio de un formulario solo me salen los nombres de las fotos pero no me sale la misma.
mi pregunta es si se pueden meter a mysql o no....y si se puede como lo hago...

gracias

Jose Miguel
  #2 (permalink)  
Antiguo 27/04/2003, 17:14
Avatar de camargo  
Fecha de Ingreso: abril-2002
Ubicación: Kerétaro, Méjiko
Mensajes: 1.045
Antigüedad: 22 años
Puntos: 2
mira, el Cluster recomienda subir las fotos al serv y solo guardar la ruta en el mysql,, pero como tu estas pidiendo la respuesta a tu pregunta, te la dare:

deben existir 2 campos en tu tabla:

imagen LONGBLOB,
filetype char(50)

EL FORMULARIO:

<form name="envio" method="post" action="sending.php" enctype="multipart/form-data">
<input type="file" name="form_data">
<input type="submit" name="enviar" value="Enviar">
</form>

donde envias tu info a la bd, debes poner esta:

Código PHP:
<?

$data 
addslashes(fread(fopen($form_data"r"), filesize($form_data)));


mysql_query("INSERT INTO TABLA (imagen,filetype) VALUES ('$data','$form_data_type')");

?>
Para obtener la imagen q has subido a tu bd

Código PHP:
<?

    $hazquery 
"select imagen,filetype from TABLA where id LIKE '$id'"//la obtengo x separado con el id
    
$resultexe = @MYSQL_QUERY($hazquery);

    
$data = @MYSQL_RESULT($resultexe,0,"imagen");
    
$type = @MYSQL_RESULT($resultexe,0,"filetype");

    
Header"Content-type: $type");
    echo 
$data;
Espero te sirva,, y si has entendido postea el problema y lo suluciono..

Suerte
__________________
http://www.chorcha.com
  #3 (permalink)  
Antiguo 27/04/2003, 18:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
jeje carmargo .. Últimamente he cambiado un poco de opinión no siendo tan "cerrado" como lo era antes xDD..

Si el tamaño de las imagenes no es grande (hablemos de 50K max?) pero tal vez son muchas .. vendría bien meter las imagenes (o archivos) a tu BD .. Los access a BD "dicen" que son mas rápidos que al sistema de archivos del servidor ...

Pero, si las imagenes (archivos en general) son "pocas" y de gran peso (hablemos de algunos MegaBytes ..) sería recomendable guardarlas en el sistema de archivos (y en tu BD solo la referencia del nombre/ubicación fisica) del archivo ...

Si hay de todo un poco .. podrías probar ambos métodos y ver que tal responden (en cuanto a tiempos de ejecución) ...

Recuerda tambien que el espacio fisico que ocupe tu Base de datos en un servidor usando algun servicio de Hosting suele estar limitado a X MegaBytes .. y suele ser MUCHO menos que lo que contratas para el resto del sitio (FTP total) .. De esto hay que "informarse" antes, pues la alternativa la tienes por si hay problemas en ese punto.

En resumen .. "Cada proyecto hay q evaluarlo" .. Pero si preguntas por ese método hemos de suponer que ya lo tienes así decidido (yo solo comento esos detalles por si alguien lee esto y todavía está por decidirse ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 27/04/2003, 18:21
 
Fecha de Ingreso: abril-2003
Ubicación: Guatemala
Mensajes: 93
Antigüedad: 21 años
Puntos: 1
mi problema es

estoy haciendo una pagina de clasificados en la cual la gente me tiene que subir imagenes de lo que quieren vender....entonces si me suben las fotos a algun lugar no sabria de quien es .... entonces pense que lo mejor seria meterlo en la bd.... pero recuerdense que todavia estoy aprendiendo .....

no he podido hacer que me sirviera......no la puedo ver...
me dieron el codigo alli arriba y creo que lo hice todo bien
  #5 (permalink)  
Antiguo 27/04/2003, 18:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
sicuesn ..

Tanto si subes tu imagen y la dejas en un directorio de tu servidor .. como si la metes fisicamente a una Base de datos .. SIEMPRE puedes guardarte mas datos asociados a esa imagen en otros campos del registro que creas para esa imagen ..
Para eso . esos formularios "multipart" te permiten poner mas campos de texto (<input>) para que le pidas datos sobre esa imagen o se los asigna tu programación a la hora de colocar fisicamente esa imagen en la BD (sea en binaro o solo una referencia del nombre de la imagen y/o ruta fisica de donde esté en tu servidor ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 27/04/2003, 18:33
Avatar de camargo  
Fecha de Ingreso: abril-2002
Ubicación: Kerétaro, Méjiko
Mensajes: 1.045
Antigüedad: 22 años
Puntos: 2
Puedes poner un limite en tamaño (Kb) ej: 150 kb
solo aceptar imagenes .gif, .jpg, y asi,, que no ocupen mucho peso como los .bmp

y tambien poner un limite en el ancho y alto de la imagen
esto te ahorrara espacio, tiempo y velocidad...

algunas cosas puedes realizarlas incluso en javascript y otras definitivamente en php...

Cluster las imagenes en la BD son un poco mas seguras, y aparte yo las uso para mi sistema de noticias q generalmente no pesan mas de 30kb c/una,, aunque son muchas.. y aun asi voy mas rapido que un lince..xDD.. jeje ..Salu2

Salu2
__________________
http://www.chorcha.com
  #7 (permalink)  
Antiguo 27/04/2003, 18:42
Avatar de Pandragon  
Fecha de Ingreso: abril-2003
Ubicación: Alicante - España
Mensajes: 66
Antigüedad: 21 años
Puntos: 0
No obstante, te aconsejo que antes de ponerte manos a la obra y realizar tus páginas, revises la configuración de php de tu hosting, en especial la funcion open_basedir, si esta función es diferente de on no podrás introducir la imagen como tal en tu tabla.

En lo referente al tema de si es aconsejable guardar las imágenes en tu base de datos, deberíamos puntualizar el tamaño de las imágenes y la cantidad.

Tengo algo más de 1600 imágenes con un peso inferior a 100 k, en principio las tenía guardadas en un directorio y accedia a ellas mediante una consulta a base de datos de directorio/archivo. Pero con el tiempo me encontré sin espacio donde guardarlas, pero me fijé que no tenía limitación de espacio en bd en el servidor donde las tenía alojadas, así que me decanté por esa opción.

Un saludo

Última edición por Pandragon; 27/04/2003 a las 18:48
  #8 (permalink)  
Antiguo 27/04/2003, 18:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
.. Camargo ..

En tu caso particular .. OK, te conviene meterlo en tu BD las imagenes (en binario) ..

Lo de seguridad .. mm bueno, es mas sencillo meter tu imagen en binario en la BD que andar pensando en proteger directorios (via .httaccess) .. o subirlas FUERA de tu /www/ (de tu DocumentRoot) .. Pero si te das cuenta es igual de seguro un método q otro, solo que el "tradicional" requiere de mas "trabajo" por parte del programador/administrador del sistema.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 27/04/2003, 19:20
 
Fecha de Ingreso: abril-2003
Ubicación: Guatemala
Mensajes: 93
Antigüedad: 21 años
Puntos: 1
no se como jalar la imagen de mysql

probe con el codigo que me pusiseron arriba y se supone que las imagenes estan en mysql....pero no se como jalarlas para poder verlas
  #10 (permalink)  
Antiguo 27/04/2003, 19:42
Avatar de Pandragon  
Fecha de Ingreso: abril-2003
Ubicación: Alicante - España
Mensajes: 66
Antigüedad: 21 años
Puntos: 0
Prueba lo siguiente:

crea un archivo el_que_sea.php

Código PHP:
  $hazquery "select imagen,filetype from TABLA where id LIKE '$id'"//la obtengo x separado con el id
    
$resultexe = @MYSQL_QUERY($hazquery);

    
$data = @MYSQL_RESULT($resultexe,0,"imagen");
    
$type = @MYSQL_RESULT($resultexe,0,"filetype");

    
Header"Content-type: $type");
    
header("content-disposition: ; filename=\"$data"";
    echo $data; 

En la página donde quieras introducir la imagen pon:

Código PHP:
<?php echo "<img src="el_que_sea.php">" ?>
Tambien puedes revisar este post y ver los quebraderos de cabeza que me dio a mi:

http://forosdelweb.com/showthread.ph...hreadid=126559

un saludo
  #11 (permalink)  
Antiguo 27/04/2003, 22:15
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5
Pues yo, para saber de quien es cada imagen que suben mis clientes (publiciudad.com), le pongo a la imagen de nombre el mismo ID del Cliente...

Por ejemplo "129.jpg"

Ademas las paso por algunos filtros (tipo de archivo, peso en kb, medidas especificas, etc...)

Y en la BD solo guardo un valor que me deja saber una de tres cosas:

jpg
gif
no

obviamente los registros que tienen en el campo "imagen" el valor "no", quiere decir que no tienen logo, si tiene "gif" quiere decir que es un archivo GIF, lo mismo para "jpg"...

__________________
Manoloweb
  #12 (permalink)  
Antiguo 28/04/2003, 09:24
Avatar de kawoq  
Fecha de Ingreso: mayo-2002
Ubicación: Xela
Mensajes: 491
Antigüedad: 21 años, 10 meses
Puntos: 0
Bueno ok, con los códigos es cuestión de probar, pero ¿se puede probar el código en un servidor local como Apache? es decir sin subirlo al web, y probarlo solo en tu pc. ¿O necesariamente se tiene que probar directamente en la web?

Gracias y Saludos.
  #13 (permalink)  
Antiguo 28/04/2003, 10:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
kawoq ..

Si te instalas Apache+PHP+Mysql .. ya tendras en tu PC lo mismo que tienes en Internet en tu "servidor" ... Es mas .. si dispones de una conexión 24Horas y bastante ancho de banda podrías prescindir incluso de tu "servidor" en internet . pues tu PC ahora sería "el Servidor" ..


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 28/04/2003, 10:13
Avatar de Pandragon  
Fecha de Ingreso: abril-2003
Ubicación: Alicante - España
Mensajes: 66
Antigüedad: 21 años
Puntos: 0
Con respecto al tema:

Tengo en mi server local la siguiente configuración:

file_uploads: on
upload_tmp_dir: c\foxserv\uploadtemp
upload_mas_filesize: 2M

Pero el archivo temporal me lo guarda en:

c:\documents and settings\user\config\temp

Con lo cual no consigo que me guarde el archivo en mi bd

¿A que puede ser debido?

Un saludo


Última edición por Pandragon; 28/04/2003 a las 10:16
  #15 (permalink)  
Antiguo 28/04/2003, 10:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pandragon ...

El PHP.ini que "manda" es el que diga tu:

<?
phpinfo();
?>

Ahí mismo deberías ver el dato de la directiva: upload_tmp_dir y ver donde apunta. Ha de ser la misma la que tengas en tu php.ini con la que te iforme phpinfo() .. tal vez estas modificando el php.ini que no corresponde.

Acuerdate tambien de reiniciar tu servidor si haces cambios en tu php.ini ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #16 (permalink)  
Antiguo 28/04/2003, 10:34
Avatar de kawoq  
Fecha de Ingreso: mayo-2002
Ubicación: Xela
Mensajes: 491
Antigüedad: 21 años, 10 meses
Puntos: 0
Ok gracias cluster, creo que esto me esta dando mucho problema, estoy intentando con todo lo que encuentro en los mensajes, y ahora he probado de la forma que cita Camargo,
pero me marca el siguiente error:

Warning: fopen("", "r") - Invalid argument in c:\archivos de programa\apache group\apache\htdocs\paginas\rigoqueme\php\almacena r2.php on line 11

Cita:
Warning: fread(): supplied argument is not a valid File-Handle resource in c:\archivos de programa\apache group\apache\htdocs\paginas\rigoqueme\php\almacena r2.php on line 11

Este es el id que tendra en la base de datos: 0
y el archivo almacenar es el siguiente:
Código PHP:
<?php 

if ($submit) { 

    
$localhost"localhost:3306";
    
$kawoq"root";
    
$db="rqch";
    
$db mysql_connect("$localhost","$kawoq"); 

    
mysql_select_db("$kawoq",$db);
$data addslashes(fread(fopen($form_data"r"),  filesize($form_data))); //LINEA 11
    
$sql mysql_query ("INSERT INTO noticia (fecha,titulo,resumen,cuerpo,imagen,filetype) VALUES ('$fecha','$titulo','$resumen',$cuerpo','$data','$form_data_type')"); 
    
$idmysql_insert_id(); 
    print 
"<p>Este es el id que tendra en la base de datos: <b>$id</b>";  


?>
  #17 (permalink)  
Antiguo 28/04/2003, 10:42
Avatar de Pandragon  
Fecha de Ingreso: abril-2003
Ubicación: Alicante - España
Mensajes: 66
Antigüedad: 21 años
Puntos: 0
Cluster mi

phpinfo()

Dice:

file_uploads: on
upload_tmp_dir: c\foxserv\uploadtemp
upload_mas_filesize: 2M

Y la verdad es que me estoy volviendo loco.


kawoq.

revisa tu php.ini y mira la siguiente variable:

open_basedir


y revisa tambien las que son objeto de mi consulta.

Un saludo
  #18 (permalink)  
Antiguo 28/04/2003, 10:43
Avatar de kawoq  
Fecha de Ingreso: mayo-2002
Ubicación: Xela
Mensajes: 491
Antigüedad: 21 años, 10 meses
Puntos: 0
Bueno creo que detecte el error, el error sale cada vez que no inserto una imagen, ya cuando la inserto desde una capeta ya no sale.

Ahora el problema es que no almacena a la base de datos. ¿Podrán ayudarme?
  #19 (permalink)  
Antiguo 28/04/2003, 10:44
Avatar de Pandragon  
Fecha de Ingreso: abril-2003
Ubicación: Alicante - España
Mensajes: 66
Antigüedad: 21 años
Puntos: 0
kawoq,

Bienvenido al club, tengo el mismo problema.
  #20 (permalink)  
Antiguo 28/04/2003, 10:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
kawoq .. Si no insertas una imagen .. como ya has comprobado $fom_data tiene valor NULL .. así que si haces algun condicional tipo:

Código PHP:
if (isset($form_data)){
   
$data= .. lo que tienes de fread() etc ...
} else {
   
$data="";

Por otro lado .. personalmente NO me gusta usar las variabels como "globales" como así lo están usando UDs. .. Usen el array superglobal $_FILES

mas info:
http://www.php.net/manual/es/features.file-upload.php

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #21 (permalink)  
Antiguo 28/04/2003, 10:55
Avatar de Pandragon  
Fecha de Ingreso: abril-2003
Ubicación: Alicante - España
Mensajes: 66
Antigüedad: 21 años
Puntos: 0
Cluster yo uso para recibir el cuestionario:

Código PHP:
<?php 
/* guardar_archivo.php */
$tabla=$HTTP_POST_VARS['tabla'];
$archivo=$_FILES['archivo']['tmp_name'];
$tamano=$_FILES['archivo']['size'];
$tipo=$_FILES['archivo']['type'];
$nombre=$_FILES['archivo']['name'];
$titulo=$HTTP_POST_VARS['titulo'];
$tamanio=$HTTP_POST_VARS['tamanio'];
$enlace=$HTTP_POST_VARS['enlace'];
$pagina=$HTTP_POST_VARS['pagina'];
$usuario=$HTTP_POST_VARS['usuario'];
$fechadate("d/m/y");
?>
y para guardarlo

Código PHP:
<?php

if ($archivo !="none")
{
$fp=fopen($archivo"rb");
$imagen=fread($fp,$tamano);
$imagen=addslashes($imagen);
fclose($fp);

$qry="INSERT INTO ".$tabla." VALUES
(0,'$fecha','$titulo','$nombre','$imagen','$tipo','$tamanio','$enlace',0,'$pagina','$usuario')"
;

mysql_query($qry);

if(
mysql_affected_rows($divXHispano)>0)
echo 
"Se ha guardado el archivo en la base de datos.";
else 
echo 
"No se ha podido guardar el archivo en la base de datos.";
}
else 
echo 
"No se ha podido subir el archivo al servidor.";

?>
y no entiendo por que no me funciona a nivel local
  #22 (permalink)  
Antiguo 28/04/2003, 11:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
kawoq .. ¿Seguro que tu BD se llama root? .. y no "rqch"?

Menudo lio .. tienen ahí:

$db="rqch";
$db = mysql_connect("$localhost","$kawoq");
mysql_select_db("$kawoq",$db);[/PHP]

debería ser:
Código PHP:
$conexion=mysql_connect("$localhost","$kawoq") or die (mysql_error()); 
mysql_select_db($db,$conexion) or die(mysql_error));

// etc ...

mysql_query ("INSERT INTO noticia (fecha,titulo,resumen,cuerpo,imagen,filetype) VALUES  ('$fecha','$titulo','$resumen',$cuerpo','$data','$form_data_type')",$conexion) or die (mysql_error()); 
Y .. sigo insistiendo que deberían usar los arrays superglobales:
$_FILES['form_data'], $_FILES['form_data']['type'] .. etc (el link del manual ya lo dí ..). Eso para la parte "UPLOAD" ..

Un saludo, ..
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #23 (permalink)  
Antiguo 28/04/2003, 11:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pandragon .. please .. inicia un nuevo tema con tu problema .. esto ya es un lio con problemas de uno .. y problemas del otro .. cada uno usa su própio código y cada uno tiene sus fallos o errores los cuales deben de indicarlos!.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #24 (permalink)  
Antiguo 28/04/2003, 11:14
Avatar de kawoq  
Fecha de Ingreso: mayo-2002
Ubicación: Xela
Mensajes: 491
Antigüedad: 21 años, 10 meses
Puntos: 0
ok gracias por la recomendación de el link, verificare lo que dices,
y con respecto a los temas, postee mi mensaje acá por el hecho de que use el codigo que camargo sugirió, pues no crei conveniente abrir otro tema si fue de este de donde se tomo el código, de todas formas gracias por la recomendación y tendré cuidado al postear los mensajes para mantener ordenado el foro.

Gracias por los links y respuestas, lo intentaré
Saludos

Última edición por kawoq; 28/04/2003 a las 11:17
  #25 (permalink)  
Antiguo 28/04/2003, 12:03
Avatar de kawoq  
Fecha de Ingreso: mayo-2002
Ubicación: Xela
Mensajes: 491
Antigüedad: 21 años, 10 meses
Puntos: 0
Gracias Cluster, con el código que me diste me fui dando realmente cuenta de mis errores, y ahora ya logre conectar y almimentar desde mi formulario a la BD. los errores eran:

de Sintaxis, y que estaba llamando a una variable inexistente.

codigo anterior:
Código PHP:
<?php 

if ($submit) { 

    
$localhost"localhost:3306";
    
$kawoq"root";
    
$db="rqch";
    
$db mysql_connect("$localhost","$kawoq"); 

    
mysql_select_db("$kawoq",$db);
    
$data addslashes(fread(fopen($form_data"r"),  filesize($form_data))); //LINEA 11
    
$sql mysql_query ("INSERT INTO noticia (fecha,titulo,resumen,cuerpo,imagen,filetype) VALUES  ('$fecha','$titulo','$resumen',$cuerpo','$data','$form_data_type')"); 
    
$idmysql_insert_id(); 
    print 
"<p>Este es el id que tendra en la base de datos: <b>$id</b>";  


?>
Código modificado:
Código PHP:
<?php 
if ($submit) { 
    
$localhost"localhost:3306";
    
$usuario"root";
    
$db="rqch";
    
$conexion mysql_connect("$localhost","$usuario"); // en el código anterior llamaba a una BD que no existia
    
mysql_select_db("$db",$conexion);
    
$data addslashes(fread(fopen($form_data"rb"), filesize($form_data)));
    
mysql_query ("INSERT INTO noticia (fecha,titulo,resumen,cuerpo,imagen) VALUES ('$fecha','$titulo','$resumen','$cuerpo','$data')",$conexion) or die (mysql_error()); //la variable $form_data_type, no existía y me hacia falta un apostrofe en $cuerpo
    
$idmysql_insert_id(); 
    print 
"<p>Este es el id que tendra en la base de datos: <b>$id</b>";
    
MYSQL_CLOSE();  

?>
Bueno, ya metiendo el código en la página index(portada), ya logre llamar al Campo Titulo, y Resumne, ahora con el campo imagen, antes me salía una X como la que te indica que la imagen no esta en el directorio, o no se despliega por que se yo motivo, pero ahora, ya no me sale la X, pero tampoco me sale la imagen.

Seguire probando, gracias. Por la ayuda
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 20:35.