Foros del Web » Programando para Internet » PHP »

Subir foto y grabar la imagen en db

Estas en el tema de Subir foto y grabar la imagen en db en el foro de PHP en Foros del Web. Buenas Tengo un script en php donde el usuario sube una foto junto a otros datos para agregar en una galeria, el tema es que ...
  #1 (permalink)  
Antiguo 22/04/2009, 10:58
 
Fecha de Ingreso: agosto-2003
Mensajes: 906
Antigüedad: 20 años, 8 meses
Puntos: 3
Subir foto y grabar la imagen en db

Buenas

Tengo un script en php donde el usuario sube una foto junto a otros datos para agregar en una galeria, el tema es que sube la foto bien, y grabo los datos que estan en los demas campos pero no logro que me grabe la foto, no quiero toda la ruta de la foto quiero que me grabe solo el nombre de la foto, como hago?

Hago esto para subirla y anda bien...

Código PHP:
if($boton) {
    if (
is_uploaded_file($HTTP_POST_FILES['archivo']['tmp_name'])) {
        if(
$HTTP_POST_FILES['archivo']['size'] < 85000) {
            if(
$HTTP_POST_FILES['archivo']['type']=="image/gif" || $HTTP_POST_FILES['archivo']['type']=="image/jpeg" || $HTTP_POST_FILES['archivo']['type']=="image/pjpeg") {            
                
copy($HTTP_POST_FILES['archivo']['tmp_name'], $HTTP_POST_FILES['archivo']['name']);
                
$subio true;
            }
        }
    }
    
    if(
$subio) {
        
$guardar mysql_query("INSERT INTO galeria (anio, thumb, colour, caption, large) VALUES ('$anio', '$thumb', '$colour', '$caption', '$large');"); 
        echo 
"El archivo subio con exito";
    } else {
        echo 
"El archivo no cumple con las reglas establecidas";    
    }
    die();

Que hago mal?, el form

Código PHP:
<input name="archivo" type="file" id="archivo">(Solo formato GIF Y JPG menores a 80K)
<
p><b>Subir imagen miniatura: </b> <br />
  <
input name="miniatura" type="file" />
<
p>  <br />
  <
label>Caption
    
<input type="text" name="caption" id="caption" />
    </
label>
<
p>
  <
label>Large
  
<input type="text" name="large" id="large" />
  </
label>
<
p>
  <
label>Colour
  
<input type="text" name="colour" id="colour" /> 
alguna idea?

ahora si me graba en la db pero toda la ruta, y mal, me graba algo asi:

C:WINDOWS empphpC8D.tmp

porque?

como hago para que solo me grabe la imagen en si?

Última edición por SeNdEr2003; 22/04/2009 a las 11:08
  #2 (permalink)  
Antiguo 22/04/2009, 11:28
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: Subir foto y grabar la imagen en db

Hola SeNdEr2003:

Creo que en ningun momento asignas a alguna variable el nombre de la foto que acabas de subir, o no lo vi. Esto seria algo asi:
Código PHP:
$nombreImagen $_FILES['archivo']['name']; 
y $nombreImagen tienes que insertarla en algun campo de tu tabla que guarda la informacion de las fotos.
  #3 (permalink)  
Antiguo 22/04/2009, 11:39
 
Fecha de Ingreso: agosto-2003
Mensajes: 906
Antigüedad: 20 años, 8 meses
Puntos: 3
Respuesta: Subir foto y grabar la imagen en db

buenisimo era eso nomas, ahi esta grabando re bien, millon de graciasssssssssssss, habra alguna forma de controlar si el archivo ya existe en el servidor?
  #4 (permalink)  
Antiguo 22/04/2009, 11:43
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: Subir foto y grabar la imagen en db

si, existe una función que busca el archivo y regresa true si existe y false si no:
Código PHP:
  if(is_file($filename)){
      echo 
"El archivo $filename existe";
  }
  else{
     echo 
"El archivo $filename no existe";
 } 
  #5 (permalink)  
Antiguo 22/04/2009, 11:44
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Subir foto y grabar la imagen en db

Puedes usar file_exists():
http://www.php.net/manual/es/function.file-exists.php
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 22/04/2009, 12:11
 
Fecha de Ingreso: agosto-2003
Mensajes: 906
Antigüedad: 20 años, 8 meses
Puntos: 3
Respuesta: Subir foto y grabar la imagen en db

Ya funciona todo perfecto, lo unico que me sube las fotos al raiz, como hago si yo quiero que me lo suba dentro de la carpeta Gallery1 por ej?

usando mi funcion...

Código PHP:
if($boton) {
    if (
is_uploaded_file($HTTP_POST_FILES['/Gallery1/archivo']['tmp_name'])) {
        if(
$HTTP_POST_FILES['archivo']['size'] < 85000) {
            if(
$HTTP_POST_FILES['archivo']['type']=="image/gif" || $HTTP_POST_FILES['archivo']['type']=="image/jpeg" || $HTTP_POST_FILES['archivo']['type']=="image/pjpeg") {            
                
copy($HTTP_POST_FILES['archivo']['tmp_name'], $HTTP_POST_FILES['archivo']['name']);
                
$subio true;
            }
        }
    } 
  #7 (permalink)  
Antiguo 22/04/2009, 12:14
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Subir foto y grabar la imagen en db

En el segundo parámetro de la función copy especificas el lugar donde se va a guardar (podrías usar también move_uploaded_file() que de por sí ya realiza la comprobación de si es un archivo subido).

P.S.: Usa $_FILES en lugar de $HTTP_POST_FILES.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 22/04/2009, 12:16
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: Subir foto y grabar la imagen en db

Algo parecido a:

Código PHP:
if($boton) {
    
$rutaDe_Carpeta="Carpeta/donde/quieres/guardar";
    if (
is_uploaded_file($HTTP_POST_FILES['/Gallery1/archivo']['tmp_name'])) {
        if(
$HTTP_POST_FILES['archivo']['size'] < 85000) {
            if(
$HTTP_POST_FILES['archivo']['type']=="image/gif" || $HTTP_POST_FILES['archivo']['type']=="image/jpeg" || $HTTP_POST_FILES['archivo']['type']=="image/pjpeg") {            
                
copy($HTTP_POST_FILES['archivo']['tmp_name'], $rutaDe_Carpeta.$HTTP_POST_FILES['archivo']['name']);
                
$subio true;
            }
        }
    } 
Un tip: si estas utilizando PHP 5 es mas recomendable que reemplazes las variables $HTTP_POST_FILES por $_FILES ya que $HTTP_POST_FILES ya estan en desuso (deprecated), funcionan igual.
  #9 (permalink)  
Antiguo 22/04/2009, 12:21
 
Fecha de Ingreso: agosto-2003
Mensajes: 906
Antigüedad: 20 años, 8 meses
Puntos: 3
Respuesta: Subir foto y grabar la imagen en db

esto esta bien?, me lo sube al raiz no comprendo porque...

Código PHP:
if($boton) { 
    
$rutaDe_Carpeta="Gallery1"
    if (
is_uploaded_file($HTTP_POST_FILES['/Gallery1/archivo']['tmp_name'])) { 
        if(
$HTTP_POST_FILES['archivo']['size'] < 85000) { 
            if(
$HTTP_POST_FILES['archivo']['type']=="image/gif" || $HTTP_POST_FILES['archivo']['type']=="image/jpeg" || $HTTP_POST_FILES['archivo']['type']=="image/pjpeg") {             
                
copy($HTTP_POST_FILES['archivo']['tmp_name'], $rutaDe_Carpeta.$HTTP_POST_FILES['archivo']['name']); 
                
$subio true
            } 
        } 
    } 
entocnes cambio el HTTP_POST_FILES verdad?
  #10 (permalink)  
Antiguo 22/04/2009, 12:28
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Subir foto y grabar la imagen en db

Puedes revisar el manual:
http://www.php.net/copy

Fíjate que el segundo parámetro es el archivo de destino, por lo que puedes especificar la ruta:
Código php:
Ver original
  1. copy($origen, "/ruta/$destino");
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #11 (permalink)  
Antiguo 22/04/2009, 12:50
 
Fecha de Ingreso: agosto-2003
Mensajes: 906
Antigüedad: 20 años, 8 meses
Puntos: 3
Respuesta: Subir foto y grabar la imagen en db

Listo ya lo hice andar de esta manera:

Código PHP:
if($boton) {
$path="Gallery1";
    if (
is_uploaded_file($HTTP_POST_FILES['archivo']['tmp_name'])) {
        if(
$HTTP_POST_FILES['archivo']['size'] < 85000) {
            if(
$HTTP_POST_FILES['archivo']['type']=="image/gif" || $HTTP_POST_FILES['archivo']['type']=="image/jpeg" || $HTTP_POST_FILES['archivo']['type']=="image/pjpeg") {
                
copy($HTTP_POST_FILES['archivo']['tmp_name'], "$path/$archivo"); 
                
$subio true;
            }
        }
    } 
para aquel que tenga el mismo problema y quiera meterlo en diferentes carpetas, incluso usando la variable path el usuario puede elegir donde guardarla...saludos!

Última edición por SeNdEr2003; 22/04/2009 a las 13:21
  #12 (permalink)  
Antiguo 22/04/2009, 13:44
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Subir foto y grabar la imagen en db

Yo reemplazaría copy() por move_uploaded_file(). Algunos servidores no te permiten el uso de este, y después te va a da un dolor de cabeza si te cambias de servidor o distribuyes tu aplicación
  #13 (permalink)  
Antiguo 22/04/2009, 13:50
 
Fecha de Ingreso: agosto-2003
Mensajes: 906
Antigüedad: 20 años, 8 meses
Puntos: 3
Respuesta: Subir foto y grabar la imagen en db

se utiliza de la misma manera?
  #14 (permalink)  
Antiguo 22/04/2009, 13:51
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Subir foto y grabar la imagen en db

Asi es. ;)
  #15 (permalink)  
Antiguo 22/04/2009, 13:53
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Subir foto y grabar la imagen en db

Yo ya lo había sugerido:
Cita:
podrías usar también move_uploaded_file() que de por sí ya realiza la comprobación de si es un archivo subido
En cuanto a cómo se usa, puedes revisar el manual:
http://www.php.net/move_uploaded_file
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #16 (permalink)  
Antiguo 22/04/2009, 13:55
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Subir foto y grabar la imagen en db

Cita:
Yo ya lo había sugerido:
Disculpa no me había fijado xD Como vi que aun en el último código que expuso seguía usando copy(), supuse que nadie se lo habia mencionado. ;)
  #17 (permalink)  
Antiguo 22/04/2009, 14:49
 
Fecha de Ingreso: agosto-2003
Mensajes: 906
Antigüedad: 20 años, 8 meses
Puntos: 3
Respuesta: Subir foto y grabar la imagen en db

bien, buenisimo, ya estoy usandolo asi y funciona barbaro:

Código PHP:
move_uploaded_file($HTTP_POST_FILES['archivo']['tmp_name'], "$path/$archivo"); 
lo del $HTTP_POST_FILES deberia cambiarlo por $_FILES?
  #18 (permalink)  
Antiguo 22/04/2009, 14:51
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Subir foto y grabar la imagen en db

Sí, es recomendable cambiarlo por $_FILES, ya que la forma $HTTP_* está desaconsejada.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #19 (permalink)  
Antiguo 22/04/2009, 14:55
 
Fecha de Ingreso: agosto-2003
Mensajes: 906
Antigüedad: 20 años, 8 meses
Puntos: 3
Respuesta: Subir foto y grabar la imagen en db

Barbaro!

Anda de 10 y como aconsejan, entonces quedo asi:

Código PHP:
if($boton) {
$path="Gallery1";
    if (
is_uploaded_file($_FILES['archivo']['tmp_name'])) {
        if(
$_FILES['archivo']['size'] < 85000) {
            if(
$_FILES['archivo']['type']=="image/gif" || $_FILES['archivo']['type']=="image/jpeg" || $_FILES['archivo']['type']=="image/pjpeg") {
                
move_uploaded_file($_FILES['archivo']['tmp_name'], "$path/$archivo"); 
                
$subio true;
            }
        }
    } 
Todo esto esta conectando a un flash que carga la foto automaticamente!!!!!!!, quedo geniaaaaaal, millon de gracias

Una ultima estoy probando lo de comprobar si existe y me sube de todas formas el archivo, antes me funcionaba no se que toque mal...tengo esto ahora...

Código PHP:
$archivo $_FILES['archivo']['name'];
$miniatura $_FILES['miniatura']['name'];
  if(
file_exists($archivo)){ 
      echo 
"El archivo $archivo existe"
  } 
  else{ 
luego del else viene toda la funcion que trabajamos...

Última edición por SeNdEr2003; 22/04/2009 a las 17:28
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 09:01.