Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Envio De Imagenes (https://www.clubdelphi.com/foros/showthread.php?t=31878)

CARLOS E 20-05-2006 03:05:29

Envio De Imagenes
 
Hola, tengo la siguiente duda:
TRABAJO CON PHP EN LA VERSION 4.4
necesito almacenar en mi base de datos en mysql las imagenes que me sean enviadas desde la pagina del cliente, para esto hice unas paginas de Prueba, una donde se carga la imagen "guardar.php" y otra donde muestra el resultado de la carga "resul_img.php" con en siguente codigo:

guardar.php
Código PHP:

<html>
<
body>
<
form ENCTYPE="multipart/form-data" action="resul_img.php" method="POST">
<
input type="hidden" name="MAX_FILE_SIZE" value="1000000000">
<
INPUT NAME="userfile" TYPE="file">
<
p><input type="submit" value="Enviar">
</
form>
</
body>
</
html

resul_img.php
Código PHP:

<html>
<body>
<? 
$link
=mysql_connect("localhost","root","");
mysql_select_db("bdregistros",$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)));
$result=mysql_query("INSERT INTO imagenes (id_img,anchura,altura,tipo,imagen) VALUES ('0'".$info[0].",".$info[1].",'$userfile_type','$x')",$link);
$id=mysql_insert_id();
echo 
"Imagen agregada con el id ".$id."<BR>";
}else{
$error="El tipo de archivo tienes que ser JPG, GIF o BMP.";
}
}else{
$error="No ha seleccionado ninguna imagen...";
echo 
$error;
}
mysql_close($link);
if (
$error!="")
{
echo 
"</center><P><font face='Arial' size=2 color='#ff0000'> Error: ".$error."</font><br>";
}
?>
</body>
</html>

Este codigo lo he copiado y adaptado a mi base de datos.

Me indica en la pagina de resultado que no he seleccionado ninguna imagen.

:confused: ¿A que podria deberse que ni siquiera me imprime los valores de la variables $userfile_xxx ?. por que no se pasan los atributos de "userfile" desde la pagina guardar.php?

:confused: ¿Es correcto que el campo de la tabla donde guardo la imagen sea de tipo longblob?


Agradeceria su respuesta pues soy nuevo en esto...

dec 20-05-2006 06:10:35

Hola,

Cita:

:confused: ¿A que podria deberse que ni siquiera me imprime los valores de la variables $userfile_xxx ?. por que no se pasan los atributos de "userfile" desde la pagina guardar.php?
Ayer o anteayer tuve que repasar el Manual de manejo de envío de archivos con PHP. Creo que en ese documento tienes la solución a tu problema, al menos para lo que toca a que no recibas información en las variables "$userfile_xxx".

Es posible que la directiva "register globals" de PHP esté desactivada y por eso no puedas acceder a esas variables, o, por mejor decir, esas variables no contienen la información que precisas.

En su lugar, según el manual hay que utilizar el "Array global" "$_FILES". Porque además tienes que tener en cuenta que la directiva "register globals" no se recomienda que esté activada.

Yo creo que echando un vistazo al documento susomentado no tendrás problemas para continuar adelante. Fíjate en el uso de la función "is_uploaded_file", que puede serte de utilidad en estos casos.

Yo te pongo aquí un poco de código de unas pruebas que hize ayer o anteayer, pero, no dejes de revisar este ejemplo que te propone el manual, y observa cómo puede averiguarse, con la función "is_uploaded_file", un posible intento de "entrada maliciosa" en nuestro sitio Web.

Código PHP:

/* In PHP 4.1.0 or later, $_FILES should be used instead of $HTTP_POST_FILES.
*/
if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name']))
{
  
copy($HTTP_POST_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
}
else
{
  echo 
"Possible file upload attack. Filename: " $HTTP_POST_FILES['userfile']['name'];


A continuación mi aportación de código, recogido de las pruebas de ayer o anteayer y adaptado ("userfile") al formulario que tratas de utilizar, y que por cierto no parece ser el problema, dicho sea de paso:

Código PHP:

if (@is_uploaded_file($_FILES['userfile']['tmp_name']))
{    
  
$nombre  $_FILES['userfile']['name'];
  
$tipo    $_FILES['userfile']['type'];
  
$tamano  $_FILES['userfile']['size'];
  
$rutatmp $_FILES['userfile']['tmp_name'];
  
  
/* En este caso recuperamos el contenido del archivo
     por supuesto que aquí tú podrías hacer con el archivo
     lo que te fuera oportuno, no sólo leer su contenido
  */
  
$contenido file_get_contents($rutatmp);  

  
/* Y acto seguido lo borramos, si damos con él
  */
  
if(file_exists($rutatmp)) unlink($rutatmp); 


Bueno. Creo que ya es bastante, y hasta demasiado, a ver si puedes solucionar el problema de la subida de archivos. Por otro lado... respecto del campo "LongBlob" en la base de datos, para albergar imágenes, lo cierto es que no pasé del campo "Blob" nunca, y no tengo experiencia en estos temas.

No sé si incluso sería mejor almacenar los archivos de imagen en el disco duro y no en una base de datos, pero, en todo caso, aquí te dejo un enlace en donde se trata lo que tratas tú de llevar a cabo: subir, guardar y mostrar imágenes con PHP y MySQL.

- Mostrar una imagen desde un campo "blob"
- Guardar una imagen en una base de datos

Ya dirás qué tal te fue con el tema. ;)

CARLOS E 23-05-2006 05:22:03

Tankss!!
 
Problema Solucionado !! :rolleyes: Muy buena la explicacion...

Muchas graciass!!!


La franja horaria es GMT +2. Ahora son las 13:20:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi