Foros del Web » Programando para Internet » PHP »

Ayuda con subir fotos en php

Estas en el tema de Ayuda con subir fotos en php en el foro de PHP en Foros del Web. Buenas tardes Aver si alguien me puede ayudar lo que pasa que quiero subir fotos en php pero aparentemente sube bien las fotos etc pero ...
  #1 (permalink)  
Antiguo 01/01/2009, 19:02
 
Fecha de Ingreso: octubre-2008
Ubicación: Mexico
Mensajes: 78
Antigüedad: 15 años, 6 meses
Puntos: 1
Ayuda con subir fotos en php

Buenas tardes Aver si alguien me puede ayudar lo que pasa que quiero subir fotos en php pero aparentemente sube bien las fotos etc pero al momento de mostrarlas nos las Muestra alguien me pudiera echar una mano de antenamo muchas gracias.

asi me despliega cuando termino de subir la foto y la muestra pero sin foto alguien me podria ayudar:

Cita:
Nombre archivo: DSC01542.JPG
Tipo archivo (MIME formato): image/jpeg
Peso: 153682 bytes.


Nombre archivo: DSC01541.JPG
Tipo archivo (MIME formato): image/jpeg
Peso: 145584 bytes.


Nombre archivo: DSC01540.JPG
Tipo archivo (MIME formato): image/jpeg
Peso: 134781 byte
AQUI LES PONGO EL CODIGO FUENTE GRACIAS:


Código PHP:
CREATE TABLE archivos (
  
id int(10unsigned NOT NULL auto_increment,
  
archivo_binario blob NOT NULL,
  
archivo_nombre varchar(255NOT NULL default '',
  
archivo_peso varchar(15NOT NULL default '',
  
archivo_tipo varchar(25NOT NULL default '',
  
PRIMARY KEY  (id)
TYPE=MyISAM
Código PHP:
FORMULARIO.PHP

<HTML>
<HEAD>
<TITLE>Binario a BD</TITLE>
</HEAD>
<BODY>
<?php
if (isset($_GET['proceso'])){
echo 
$_GET['proceso']."<br>";
}
?>
<FORM enctype="multipart/form-data" method="post" action="insertar.php">
Archivo: <INPUT type="file" name="archivo" size="30">
<INPUT type="submit" name="submit" value="Subir archivo">
</FORM>
</BODY>
</HTML>

Código PHP:
INSERTAR.PHP
<?php
//Primero, arranca el bloque PHP y checkea si el archivo tiene nombre.  Si no fue asi, te remite de nuevo al formulario de inserción:
// No se comprueba aqui si se ha subido correctamente.
if (empty($_FILES['archivo']['name'])){
header("location: formulario.php?proceso=falta_indicar_fichero"); //o como se llame el formulario ..
exit;
}

//establece una conexión con la base de datos.
$conexion mysql_connect("localhost","root","offshore") or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db("imagenes",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca.

// archivo temporal (ruta y nombre).
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ;

// leer del archvio temporal .. el binario subido.
// "rb" para Windows .. Linux parece q con "r" sobra ...
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal)));

// Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo.
$binario_nombre=$_FILES['archivo']['name'];
$binario_peso=$_FILES['archivo']['size'];
$binario_tipo=$_FILES['archivo']['type'];

//insertamos los datos en la BD.
$consulta_insertar "INSERT INTO archivos (id, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')";
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos.");
header("location: listar_imagenes.php");  // si ha ido todo bien
exit;
?>
Código PHP:
LISTAR_IMAGENES.PHP
<?php
    mysql_connect
("localhost","root","offshore") or die ("no se ha podido conectar a la BD");

    
mysql_select_db("imagenes") or die ("no se ha podido seleccionar la BD");

    
$sql "SELECT id,archivo_nombre,archivo_tipo,archivo_peso FROM archivos";
    
$consulta mysql_query($sql) or die ("No se pudo ejecutar la consulta");

    While (
$registro=mysql_fetch_assoc($consulta)){
        echo 
"<img src=\"ver.php?id=".$registro['id']."\">";
        echo 
"<br> Nombre archivo: ".$registro['archivo_nombre'];
        echo 
"<br> Tipo archivo (MIME formato): ".$registro['archivo_tipo'];
        echo 
"<br> Peso: ".$registro['archivo_peso']." bytes.<br><br>";
    }

?>

Código PHP:
VER.PHP
<?php
if(isset($_GET['id'])) {

    
// you may have to modify login information for your database server:
    
$conexion=mysql_connect("localhost","root","offshore") or die ("no se ha podido conectar a la BD");

    
mysql_select_db("imagenes") or die ("no se ha podido seleccionar la BD");

    
$sql "SELECT archivo_mombre,archivo_binario,archivo_tipo,archivo_peso FROM archivos WHERE id='".$_GET['id']."'";

    
$consulta mysql_query($sql,$conexion);

    
$datos mysql_result($consulta,0,"archivo_binario");
    
$tipo mysql_result($consulta,0,"archivo_tipo");
    
$nombre mysql_result($consulta,0,"archivo_nombre");
    
$peso mysql_result($consulta,0,"archivo_peso");


    
header("Content-type: $tipo");
    
header("Content-length: $peso"); 
    
header("Content-Disposition: inline; filename=$nombre"); 
 
   echo 
$datos;

}
?>

Código PHP:
VER_THUMBAIL.PHP
<?php

// OJO, sólo funciona con imagnes en formato JPEG ...

if(isset($_GET['id'])) {

    
$conexion=mysql_connect("localhost","root","offshore") or die ("no se ha podido conectar a la BD");
    
mysql_select_db("imagenes") or die ("no se ha podido seleccionar la BD");
    
$sql "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM archivos WHERE id='".$_GET['id']."'";
    
$consulta mysql_query($sql,$conexion);
    
$imagen mysql_result($consulta,0,"archivo_binario");

    
// Envio cabeceras al navegador .. se indica que lo "que vá" es una imagen de formato MIME JPEG
    
Header ("Content-type: image/jpeg");

    
// Generar el thumbnail:

    // Se crea la imagen desde el campo binario de la BD
    
$img imagecreatefromstring($imagen);

    
// Tamaño del Thumbanil (de la imagen a generar ..)
    
$picsize 123;
    
    
// Se obtienen los datos del ancho y alto de la imagen.
    
$new_w imagesx($img);
    
$new_h imagesy($img);

    
// Se calcula la relación alto/ancho
    
$aspect_ratio $new_h $new_w;
    
    
// Se ajusta al nuevo tamaño
    
$new_w $picsize;
    
$new_h abs($new_w $aspect_ratio);

    
// Se crea la mascara de la imagen nueva
    
$dst_img imagecreate($new_w,$new_h);

    
// Se copia y reajusta el nuevo tamaño en la nueva imagen.
    
imagecopyresized($dst_img,$img,0,0,0,0,$new_w,$new_h,imagesx($img),imagesy($img));

    
// Se entrega al buffer de salida (navegador en este caso) la imagen en formato JPEG
    // El tercer parámetro (100) indica la calidad de la imagen: en porcentaje relación calidad/peso imagen.
    
imagejpeg($dst_img,'',100);
}

?>
  #2 (permalink)  
Antiguo 01/01/2009, 19:29
 
Fecha de Ingreso: junio-2008
Mensajes: 45
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Ayuda con subir fotos en php

Sino me equivoco tu problema esta en :

LISTAR_IMAGENES.PHP

Donde Dice


Código PHP:
        echo "<img src=\"ver.php?id=".$registro['id']."\">"
Prueba Cambiandolo Por

Código PHP:
        echo "<img src='directorio-donde-se-guardan-las-img/.$registro['archivo_nombre'].'>"
Ps Le Editas el Directorio y Lo Pruebas xD .. si te srive me Dices xD
  #3 (permalink)  
Antiguo 01/01/2009, 19:57
 
Fecha de Ingreso: octubre-2008
Ubicación: Mexico
Mensajes: 78
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Ayuda con subir fotos en php

Cita:
Iniciado por WebHelp Ver Mensaje
Sino me equivoco tu problema esta en :

LISTAR_IMAGENES.PHP

Donde Dice


Código PHP:
        echo "<img src=\"ver.php?id=".$registro['id']."\">"
Prueba Cambiandolo Por

Código PHP:
        echo "<img src='directorio-donde-se-guardan-las-img/.$registro['archivo_nombre'].'>"
Ps Le Editas el Directorio y Lo Pruebas xD .. si te srive me Dices xD

Cuando lo cambio me arroga el siguiente error:

Cita:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\AppServ\www\GALERIA\listar_imagenes.php on line 11
  #4 (permalink)  
Antiguo 01/01/2009, 20:07
 
Fecha de Ingreso: junio-2008
Mensajes: 45
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Ayuda con subir fotos en php

Erro Mio xD ... Cambio otra vez por esto :

Código PHP:
        echo "<img src='directorio-donde-se-guardan-las-img/".$registro['archivo_nombre'].">"
Si no te Sirve T_T ya ni Idea xD
  #5 (permalink)  
Antiguo 01/01/2009, 20:28
 
Fecha de Ingreso: octubre-2008
Ubicación: Mexico
Mensajes: 78
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Ayuda con subir fotos en php

Cita:
Iniciado por WebHelp Ver Mensaje
Erro Mio xD ... Cambio otra vez por esto :

Código PHP:
        echo "<img src='directorio-donde-se-guardan-las-img/".$registro['archivo_nombre'].">"
Si no te Sirve T_T ya ni Idea xD


Cita:
No amigo me hace lo mismo que como lo tenia yo no me muestra la imagen nada mas me pone un icono en blanco como lo tenia yo
  #6 (permalink)  
Antiguo 01/01/2009, 20:32
 
Fecha de Ingreso: octubre-2008
Ubicación: Mexico
Mensajes: 78
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Ayuda con subir fotos en php



Cita:
Mira en el Formulario me pide que escoja la imagen sip le doy examinar todo hasta ahi esta bien la subo no hay problema pero al momento de listar las imagenes me pones todos los datos de las imagenes pero con el incono en blanco como que esta mal la ruta que me recomiendan que ponga el directorio de donde agarre las fotos porque si es asi para que entonces estoy aguardando en una bases de Datos si me podrian dar una solucion se los agradeceria gracias
  #7 (permalink)  
Antiguo 02/01/2009, 08:44
 
Fecha de Ingreso: marzo-2008
Mensajes: 207
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Ayuda con subir fotos en php

La propiedad "src" de la etiqueta "<img />" es para indicar la url desde la que cargar la imagen en cuestión, y hasta donde yo veo, tú no estás grabando la imagen en ningún directorio del servidor ftp, sólo la grabas, en binario, en la base de datos, así que para empezar ahí tienes un problema.

Si vas a usar la propiedad "src" de la etiqueta "<img />", debes indicar una url de una imagen guardada en tu servidor ftp. Si no, debes imprimir la imagen usando el código en binario que has grabado en la base de datos.

Así que lo del directorio debería de ser lo de menos porque esa imagen no está grabada en ningún directorio. Lo normal, si no recuerdo mal de mis prácticas en Java, es crear en un directorio temporal las imágenes que lees desde la base de datos, usando (supongo) fopen, fputs, fclose... Y a partir de esa imagen creada en el directorio temporal, indicar su url en el "src" de la etiqueta de imagen.

Si hay funciones para "dibujar" imágenes a partir de un código binario sin tener que crear un archivo temporal, ya se escapa a mis conocimientos ^^Uu...

Espero haberte ayudado ;)
  #8 (permalink)  
Antiguo 03/01/2009, 20:31
Avatar de yeudiel  
Fecha de Ingreso: abril-2008
Ubicación: Ciudad de México
Mensajes: 78
Antigüedad: 16 años
Puntos: 1
Respuesta: Ayuda con subir fotos en php

Pues esta bastante enredado, pero aqui tienes una funcion que hize yo a partir de un tutorial de la web, este con una imagen te hace 2, una por ejemplo de 30 px width para thumbnails y otra de 600 px width, soporta jpg, gif, wbmp y png, requiere que tengas librerias GD, es configurable:

Código PHP:
function subir($source,$nombre_sinrepetir,$medidas_imagenchica,$medidas_imagendetalle,$carpeta_detalle,$carpeta_th){
$dest=$carpeta_th.$nombre_sinrepetir;
$im_info getimagesize($source);
switch(
$im_info[2]) {
  case 
1:
    
$imagen imagecreatefromgif($source); break;
  case 
2:
    
$imagen imagecreatefromjpeg($source); break;
  case 
3:
    
$imagen imagecreatefrompng($source); break;
  case 
15:
    
$imagen imagecreatefromwbmp($source); break;
  }
// Definimos la medida máxima 
$th_max $medidas_imagenchica// de la muestra (thumbnail) 

$det_max $medidas_imagendetalle// de la imagen detalle 
// Evaluamos si la imagen es horizontal
if($im_info[0]>$im_info[1]) {
    
// Definimos las medidas de las imagenes 
    
$th_w $th_max;
    
$th_h = ($im_info[1]/$im_info[0])*$th_max;
    
$det_w $det_max;
    
$det_h = ($im_info[1]/$im_info[0])*$det_max;
    } else {
    
$th_w = ($im_info[0]/$im_info[1])*$th_max;
    
$th_h $th_max;
    
$det_w = ($im_info[0]/$im_info[1])*$det_max;
    
$det_h $det_max;
    }
// Creamos las imágenes 
$thumb imagecreatetruecolor($th_w,$th_h);
$detalle imagecreatetruecolor($det_w,$det_h);
// Copiamos la original escalada 
imagecopyresampled($thumb,$imagen,0,0,0,0$th_w,$th_h,imagesx($imagen),imagesy($imagen));
imagecopyresampled($detalle,$imagen,0,0,0,0$det_w,$det_h,imagesx($imagen),imagesy($imagen));
// Destruimos la imagen original 
imagedestroy($imagen);
// Damos salida a nuestros archivos 
imagejpeg($thumb,$dest,60);
imagejpeg($detalle,$carpeta_detalle.$nombre_sinrepetir,60);
// Destruimos las imagenes temporales 

imagedestroy($thumb);

imagedestroy($detalle);
}
 
//se usa de la siguiente manera subir(fuente de la imagen,nombre de la imagen,ancho del thumbnail, ancho de la imagen detalle,carpeta para la imagen detalle,carpeta para el thumbnail)
subir($HTTP_POST_FILES['imagen']['tmp_name'],$HTTP_POST_FILES['imagen']['name'],350,541."carpeta/imagenes","carpeta/thumbnail");

//las carpetas deben tener permisos 777
//no pases los $HTTP_POST_FILES asi, valida el tipo, su tamaño, etc...
//si quieres pasar a base de datos la ubicacion de tu imagen
//el VALUE seria "img/usuarios/$HTTP_POST_FILES['imagen']['name']" 
Recuerda que no debes poner los $HTTP_POST_FILES directamente, debes primero validarlos, ver si no se repite el nombre con algun archivo que se llame igual, etc... Espero les sirva.

Última edición por yeudiel; 03/01/2009 a las 20:51 Razón: falto codigo y //explicaciones
  #9 (permalink)  
Antiguo 03/01/2009, 21:57
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: Ayuda con subir fotos en php

juanmata:
Pareciera que el error esta donde te ha indicado el amigo
WebHelp.

Cita:
echo "<img src=\"ver.php?id=".$registro['id']."\">";
Esto lo tienes mal escapado, debe ir asi ->

Cita:
echo "<img src=\"ver.php?id=\".$registro['id'].\"\">";
Saludos
Franco

P.S. No hay necesidad de ponerlo puntos a .$registro['id']..
  #10 (permalink)  
Antiguo 04/01/2009, 14:05
Avatar de yeudiel  
Fecha de Ingreso: abril-2008
Ubicación: Ciudad de México
Mensajes: 78
Antigüedad: 16 años
Puntos: 1
Respuesta: Ayuda con subir fotos en php

Cita:
Iniciado por franco190453 Ver Mensaje
juanmata:
Pareciera que el error esta donde te ha indicado el amigo
WebHelp.



Esto lo tienes mal escapado, debe ir asi ->



Saludos
Franco

P.S. No hay necesidad de ponerlo puntos a .$registro['id']..
De hecho yo probe con
Código PHP:
echo "<img src=\"ver.php?id=$registro[id]\">"
y lo imprime perfectamente
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 01:17.