Foros del Web » Programando para Internet » PHP »

Guardar una imagen en un campo de tabla mysql

Estas en el tema de Guardar una imagen en un campo de tabla mysql en el foro de PHP en Foros del Web. Buenas, he estado buscando en el foro como subir una imagen en un atributo de una tabla de mysql pero guardando solo la URL. Os ...
  #1 (permalink)  
Antiguo 24/01/2013, 05:14
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 4 meses
Puntos: 0
Guardar una imagen en un campo de tabla mysql

Buenas,
he estado buscando en el foro como subir una imagen en un atributo de una tabla de mysql pero guardando solo la URL.
Os explico con detalle:
yo lo que quiero conseguir que en una carpeta en el servidor guarde la imagen y en la base de dato la URL de dicha imagen. Pero para subir la imagen uso un input type="file" para seleccionar la imagen pero he comprobado y solo me pasa en el atributo $_POST el nombre pero no la ruta donde se encuentra.
Por lo que no se como realizar esto y usando un input type="text" seria regular ya que habria que estar escribiendo la ruta.
Por otro lado, pienso de que si por ejemplo la imagen esta en el escritorio, por ejemplo, y quiero usarla, que se copie en la carpeta esa que dije del servidor y a la vez se almacene la URL en el campo de la base de datos.
Si alguien me puede ayudar se lo agradeceria.
Un saludo.
  #2 (permalink)  
Antiguo 24/01/2013, 05:32
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Guardar una imagen en un campo de tabla mysql

Hola, la única forma que tienes de que un usuario suba una imagen y se vea en tu web es almacenando esta en tu servidor.
Puedes guardarla directamente en la base de datos.
O puedes subirla a un directorio de tu host y guardar la ruta en tu DB.

Yo suelo optar por la segunda y creo que es lo que buscas.
Pues bien, si tú guardas las imagenes en una carpeta de tu host, ya conoces la ruta y el nombre, es más deberías darle un nombre en función de la fecha y hora y algún número aleatorio para que no se repitan nunca.
Te dejo un ejemplo de parte de un form que hice hace tiempo con ayuda de búsquedas por internet, repito, hace tiempo, así que no te aseguro que sea la leche.

Está pensado para tener el archivo en el directorio raíz y las imágenes en /images
Si lo cambias habría que retocar las rutas y demás
Código PHP:
<?php
if (isset($_POST['send'])){
    
//Image sent and upload to host
    
$url 'www.dominio.com/images/';   //absolute route
    
$path 'images/';                                   //relative route
    
    
if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg"
        || (
$_FILES["file"]["type"] == "image/pjpeg") || ($_FILES["file"]["type"] == "image/bmp")
        || (
$_FILES["file"]["type"] == "image/png")) && ($_FILES["file"]["size"] < $_POST['MAX_SIZE'])){
        
//allowed extensions: jpg,jpeg,bmp,png,gif
      
if ($_FILES["file"]["error"] > 0){
        echo 
"Error: " $_FILES["file"]["error"] . ". File couldn't be sent.<br />";
      }
      else{
        
$file pathinfo($_FILES["file"]["name"]);
        
$ext '.'.$file['extension']; 
        
$part date('dmYHis',time());                                            
        
$random rand(10,100);
        
$fileName $part.$random.$ext//An unique media name for file storage
        
$url $url.$fileName;  //The absolute route for links
        
$id $fileName;       //The filename for php refers, unlink(), etc.                                 
                                                                    
        
if(move_uploaded_file($_FILES["file"]["tmp_name"],$path.$fileName)){
          
$error false;
        }
      }
    }
    elseif (!(
$_FILES["file"]["size"] < $_POST['MAX_SIZE'])){
      echo 
'<div class="errors" align="center"><font color="red" size="6"><strong>Error</strong></font></p>';
      echo 
'<p class="caption">The file size must be less than 2MB</p>';
      
$error true;
    }
    else{
      echo 
'<div class="errors" align="center"><font color="red" size="6"><strong>Error</strong></font></p>';
      echo 
'<p class="caption">Invalid File Extension!</p>';
      
$error true;
    } 
  }
?>
<form action="" enctype="multipart/form-data" method="post">
  <label>Archivo</label>
  <input type="hidden" name="MAX_SIZE" value="2000000" />
  <input id="fieldUpload" type="file" name="file" size="30" />
  <textarea type="text" name="description_form" cols="38" rows="8" required="required" ></textarea>
  <input type="submit" value="Enviar" name="submit" />
</form>
El tamaño máximo está definido en el form en un hidden, para más seguridad lo deberías comprobar en el código PHP
  #3 (permalink)  
Antiguo 24/01/2013, 05:47
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Guardar una imagen en un campo de tabla mysql

Si era eso en concreto. Pero me surge una duda: esto que me propones no copiaría digamos el archivo que yo selecciono en el input en la carpeta que yo tengo predeterminada para estas fotos, sino que la seleccionaría en la carpeta en la que la he tenido que meter con anterioridad.
Es que te explico más, esta imagen va a ser una foto de una noticia que dichas fotos irán en una carpeta en el servidor, pero por ejemplo esto lo usare también para subir fotos de instalaciones que irán en otra carpeta distinta. Y así con otros componentes de la aplicación.
Muchas gracias.
  #4 (permalink)  
Antiguo 24/01/2013, 05:49
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Guardar una imagen en un campo de tabla mysql

Perdona, se me olvidaba una cosa, es que perdona la ignorancia pero estoy empezando.
Yo estoy usando wampserver cuando dices un directorio del host te refiere a por ejemplo en la carpeta www una carpeta de ahí?
Gracias de nuevo.
  #5 (permalink)  
Antiguo 24/01/2013, 06:22
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Guardar una imagen en un campo de tabla mysql

Esto, te sube la imagen al servidor y guarda la ruta en tu DB.
SI no subiese la iamgen no tendría ningún sentido, fijate que por ahi está esta función: move_uploaded_file()
Mira el manual: http://php.net/manual/es/features.file-upload.php

Para lo que dices, tendrías distintas carpetas, por ejemplo: images/noticias, images/instalaciones ...
Y dependiendo de que imagen sea o dónde quieras ponerlo elegiras una ruta u otra
  #6 (permalink)  
Antiguo 24/01/2013, 10:11
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Guardar una imagen en un campo de tabla mysql

Ya he solucionado perfectamente, muchas gracias! Me he liado un poco con las rutas y eso pero ya me salio!
Por cierto tienes idea como mostrar la imagen correctamente, es decir, hay imagenes que son rectangulares y otras son cuadradas pero quiero que me ocupe siempre un espacio de la pagina sin que se deforme. Nose si me he explicado correctamente.
Y muchas gracias de nuevo. Un saludo
  #7 (permalink)  
Antiguo 24/01/2013, 12:56
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Guardar una imagen en un campo de tabla mysql

Bueno, puedes cambiar el ancho y el alto directamente en el tag <img /> o ponerlas con fondo de un div y utilizar background-size.

Si lo que quieres es mantener las proporciones de la imagen y en su lugar recotarla para que no se salga de unos límites, sí se puede hacer con PHP. Googlea un poco sobre recotar imagenes en php o algo así. Si no lo encuentras pregunta que es fácil de buscar

Etiquetas: mysql, tabla
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 07:59.