Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Codigo para subir imagen

Estas en el tema de Codigo para subir imagen en el foro de PHP en Foros del Web. Hola. Estoy intentando hacer un formulario para añadir datos desde la web a la base de datos. Hay un campo que guardará el enlace a ...
  #1 (permalink)  
Antiguo 23/11/2015, 10:38
Avatar de tiobavie  
Fecha de Ingreso: noviembre-2015
Ubicación: Santander
Mensajes: 13
Antigüedad: 8 años, 5 meses
Puntos: 0
Codigo para subir imagen

Hola. Estoy intentando hacer un formulario para añadir datos desde la web a la base de datos. Hay un campo que guardará el enlace a una imagen (he leído que es mejor guardar las imágenes en una carpeta del servidor y el enlace en la BD, ya que es más sencillo acceder así a esas imágenes)

El caso es que he adaptado uno de tantos códigos que he ido encontrando y que en principio todo funcionaba... Hasta que me ha dado por mirar esos registros en la BD y en la carpeta, y no están.

¿Podríais indicarme que errores hay en el código que uso?
En principio, me gustaría que estuviese todo (HTML y PHP) en la misma página... Si es posible, aunque también he probado ese código en dos paginas separadas y tampoco guarda ni los datos ni la imagen.

Saludos.

Código HTML:
Ver original
  1. <?php include ("Connections/miriamweb.php");?>
  2. <!doctype html>
  3. <meta charset="utf-8">
  4. <title>Documento sin título</title>
  5. </head>
  6. <?php
  7. if ($_FILES["imagen"]["error"] > 0){
  8.     echo "ha ocurrido un error";
  9.     //ahora vamos a verificar si el tipo de archivo es un tipo de imagen permitido.
  10.     //y que el tamano del archivo no exceda los 100kb
  11.     $permitidos = array("image/jpg", "image/jpeg", "image/gif", "image/png");
  12.     $limite_kb = 200;
  13.     if (in_array($_FILES['imagen']['type'], $permitidos) && $_FILES['imagen']['size'] <= $limite_kb * 1024){
  14.         //esta es la ruta donde copiaremos la imagen
  15.         //recuerden que deben crear un directorio con este mismo nombre
  16.         //en el mismo lugar donde se encuentra el archivo subir.php
  17.         $ruta = "album/" . $_FILES['imagen']['name'];
  18.         //comprovamos si este archivo existe para no volverlo a copiar.
  19.         //pero si quieren pueden obviar esto si no es necesario.
  20.         //o pueden darle otro nombre para que no sobreescriba el actual.
  21.         if (!file_exists($ruta)){
  22.             //aqui movemos el archivo desde la ruta temporal a nuestra ruta
  23.             //usamos la variable $resultado para almacenar el resultado del proceso de mover el archivo
  24.             //almacenara true o false
  25.             $resultado = move_uploaded_file($_FILES["imagen"]["tmp_name"], $ruta);
  26.             if ($resultado){///hasta aqui es para guardar la imagen en carpeta album/... Una vez hecho esto, se añaden los campos a la base de datos.
  27.                 $nombre = $_FILES['imagen']['name'];
  28.                 $GModo = $_POST['GModo'];
  29.                 $GSERIE = $_POST['GSerie'];
  30.                 $GTitulo = $_POST['GTitulo'];
  31.                 $GTecnica = $_POST['GTecnica'];
  32.                 $GFecha = $_POST['GFecha'];
  33.                 $GMedidas = $_POST['GMedidas'];
  34.                 $GDisponibilidad =  $_POST['GDisponibilidad'];     
  35.                 $Ganadir = "INSERT INTO `miriamweb`.`obras` (`ID`, `Medio`, `Serie`, `Titulo`, `Tecnica`, `Fecha`, `Medidas`, `Disponibilidad`, `Imagen`) VALUES (NULL, '$GModo', '$GSERIE', '$GTitulo', '$GTecnica', '$GFecha', '$GMedidas', '$GDisponibilidad1', '$nombre');";
  36.                
  37.                 echo "el archivo ha sido movido exitosamente";
  38.             } else {
  39.                 echo "ocurrio un error al mover el archivo.";
  40.             }
  41.         } else {
  42.             echo $_FILES['imagen']['name'] . ", este archivo existe";
  43.         }
  44.     } else {
  45.         echo "archivo no permitido, es tipo de archivo prohibido o excede el tamano de $limite_kb Kilobytes";
  46.     }
  47. }
  48. ?>
  49.  
  50. <form action="" method="POST" enctype="multipart/form-data">
  51.     <label for="imagen">Medio:</label>
  52.     <input type="text" name="GModo"  required/>
  53.     <label for="imagen">Serie:</label>
  54.     <input type="text" name="GSerie"  required/>
  55.     <label for="imagen">Titulo:</label>
  56.     <input type="text" name="GTitulo"  required/>
  57.     <label for="imagen">Tecnica:</label>
  58.     <input type="text" name="GTecnica"  required/>
  59.     <label for="imagen">Fecha:</label>
  60.     <input type="text" name="GFecha"  required/>    
  61.     <label for="imagen">Tamaño:</label>
  62.     <input type="text" name="GMedidas"  required/>
  63.     <label for="imagen">Disponibilidad:</label>
  64.     <input type="text" name="GDisponibilidad"  required/>
  65.     <label for="imagen">Imagen:</label>
  66.     <input type="file" name="imagen" id="imagen" required/>
  67.    
  68.     <input type="submit" name="subir" value="Añadir"/>
  69. </form>
  70. </body>
  71. </html>
  #2 (permalink)  
Antiguo 23/11/2015, 13:28
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Codigo para subir imagen

Tienes que ir depurando línea por línea tu código hasta encontrar en dónde falla, porque así por encima no veo en dónde pueda estar el error, aparentemente se ve bien el código.

Edito: ya vi donde falla tu código. Todo el código para subir la imagen al directorio y a la bd lo tienes en este if

if ($_FILES["imagen"]["error"] > 0){

Por lo cual sólo se va a ejecutar si hay un error. Arregla eso cerrando el if luego de moestrar el mensaje de error y colocando un else con el resto del código.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #3 (permalink)  
Antiguo 23/11/2015, 16:24
Avatar de tiobavie  
Fecha de Ingreso: noviembre-2015
Ubicación: Santander
Mensajes: 13
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Codigo para subir imagen

Ok. Gracias. Con ese cambio ya se guarda la imagen en la carpeta al menos.
Tambien habia que incluir un par de filas para el intro en la BD, que revisando poco a poco, no ha sido más problema que detectarlo.

el código final queda así:

Código HTML:
Ver original
  1. <?php include ("Connections/miriamweb.php");?>
  2. <?php
  3.  
  4. if ($_FILES["imagen"]["error"] > 0){
  5.     echo "ha ocurrido un error";
  6. } else {
  7.     //ahora vamos a verificar si el tipo de archivo es un tipo de imagen permitido.
  8.     //y que el tamano del archivo no exceda los 100kb
  9.     $permitidos = array("image/jpg", "image/jpeg", "image/gif", "image/png");
  10.     $limite_kb = 2000;
  11.     if (in_array($_FILES['imagen']['type'], $permitidos) && $_FILES['imagen']['size'] <= $limite_kb * 1024){
  12.         //esta es la ruta donde copiaremos la imagen
  13.         //recuerden que deben crear un directorio con este mismo nombre
  14.         //en el mismo lugar donde se encuentra el archivo subir.php
  15.         $ruta = "album/" . $_FILES['imagen']['name'];
  16.         //comprovamos si este archivo existe para no volverlo a copiar.
  17.         //pero si quieren pueden obviar esto si no es necesario.
  18.         //o pueden darle otro nombre para que no sobreescriba el actual.
  19.         if (!file_exists($ruta)){
  20.             //aqui movemos el archivo desde la ruta temporal a nuestra ruta
  21.             //usamos la variable $resultado para almacenar el resultado del proceso de mover el archivo
  22.             //almacenara true o false
  23.             $resultado = @move_uploaded_file($_FILES["imagen"]["tmp_name"], $ruta);
  24.             if ($resultado){///hasta aqui es para guardar la imagen en carpeta album/... Una vez hecho esto, se añaden los campos a la base de datos.
  25.                 $nombre = $_FILES['imagen']['name'];
  26.                 $GModo = $_POST['GModo'];
  27.                 $GSERIE = $_POST['GSerie'];
  28.                 $GTitulo = $_POST['GTitulo'];
  29.                 $GTecnica = $_POST['GTecnica'];
  30.                 $GFecha = $_POST['GFecha'];
  31.                 $GMedidas = $_POST['GMedidas'];
  32.                 $GDisponibilidad =  $_POST['GDisponibilidad'];     
  33.                 $Ganadir = "INSERT INTO obras (Medio, Serie, Titulo, Tecnica, Fecha, Medidas, Disponibilidad, Imagen) VALUES ('$GModo', '$GSERIE', '$GTitulo', '$GTecnica', '$GFecha', '$GMedidas', '$GDisponibilidad', '$nombre');";
  34.                 mysql_select_db($database_miriamweb, $miriamweb);
  35.   $Result1 = mysql_query($Ganadir, $miriamweb) or die(mysql_error());
  36.                
  37.                 echo "el archivo ha sido movido exitosamente";
  38.             } else {
  39.                 echo "ocurrio un error al mover el archivo.";
  40.             }
  41.         } else {
  42.             echo $_FILES['imagen']['name'] . ", este archivo existe";
  43.         }
  44.     } else {
  45.         echo "archivo no permitido, es tipo de archivo prohibido o excede el tamano de $limite_kb Kilobytes";
  46.     }
  47. }
  48. ?>
  49.  
  50. <form action="" method="POST" enctype="multipart/form-data">
  51.     Medio:<input type="text" name="GModo" /><br />
  52.     Serie:<input type="text" name="GSerie" /><br />
  53.     Titulo:<input type="text" name="GTitulo" /><br />
  54.     Tecnica:<input type="text" name="GTecnica" /><br />
  55.     Fecha:<input type="text" name="GFecha" /><br />    
  56.     Tamaño:<input type="text" name="GMedidas" /><br />
  57.     Disponibilidad:<input type="text" name="GDisponibilidad" /><br />
  58.     Imagen:<input type="file" name="imagen" id="imagen" /><br />
  59.    
  60.     <input type="submit" name="subir" value="Añadir"/>
  61. </form>

El único "problema" es el aviso de variables no definidas al lanzar la página

(Notice: Undefined index: imagen in C:\xampp\htdocs\miriam3\anadir.php on line 4

Notice: Undefined index: imagen in C:\xampp\htdocs\miriam3\anadir.php on line 11
archivo no permitido, es tipo de archivo prohibido o excede el tamano de 2000 Kilobytes) pero se soluciona colocando todo el php en otro archivo.

Muchas gracias.
  #4 (permalink)  
Antiguo 23/11/2015, 16:34
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Codigo para subir imagen

Has var_dump de la variable $_FILES para ver que índices trae porque imagen no está definido.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #5 (permalink)  
Antiguo 24/11/2015, 02:01
Avatar de tiobavie  
Fecha de Ingreso: noviembre-2015
Ubicación: Santander
Mensajes: 13
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Codigo para subir imagen

El resultado del var_dump era "null". Lo que es lógico, ya que aun no habias sido definida la variable imagen desde el formulario. Leyendo otros temas, concretamente en [URL="http://www.forosdelweb.com/f18/llamar-funcion-desde-form-986752/"]http://www.forosdelweb.com/f18/llamar-funcion-desde-form-986752/,[/URL] he comprobado que añadiendo if(isset) al inicio, no se ejecuta el php sin haber enviado el formulario. Con esto quiero decir que ya no me salen esos avisos.

Gracias de nuevo, y ahora con más motivo, ya que si no llegas a continuar con el tema, me habria resignado a colocar el php en otro archivo.

Y de paso, os agradezco a todos los miembros del foro todos y cada uno de los mensajes que escribís, es increíble la cantidad de conocimiento que hay en esta web. GRACIAS.

Etiquetas: fecha, formulario, html, registro, variable
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 02:08.