Como puedo subir una imagen al servidor y guardar la ruta en la base de datos con php y mysql. He probado con mas de 5 videos

He probado con mas de 5 encontrado en youtube pero el problema es que no te dicen, de forma clara, que errores pueden presentarse en el proceso. Hago lo mismo que ellos hace sin embargo a ellos le funciona y a mi no.

1 Respuesta

Respuesta
1

Antes de querer probar con una base de datos primero debes comprender como subir una imagen (o un fichero en sí) al servidor con PHP. Es sencillo. Cuando comprendas ello, entonces podrás subir el path(ruta, url) de tu imagen (fichero) a tu base de datos, mostrarla, etc.

Te mostraré la lógica de ello:

1. Creamos un nuevo proyecto que tiene los siguientes ficheros:

  • Images: Aquí se guardarán las imágenes subidas.
  • Index.html: Aquí estará nuestro formulario.
  • Subir.php: Aquí se efectuará el proceso de subir el fichero.

2. En index.html creamos un formulario.

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Subir Imagen</title>
    </head>
    <body>
        <form enctype="multipart/form-data" method="post" action="subir.php">
        <input type="file" name="img_up">
        <input value="Subir" type="submit">
        </form>
    </body>
</html>

*No olvides que es necesario el <<enctype="multipart/form-data">>, ¿para qué?, pues no te vendría mal leer un poco sobre ello en la documentación de html. Sí ya lo sabes, omite ese paso. 

3. Ahora trabajaremos en el fichero subir.php:

Ya que es un archivo y lo vamos a capturar mediante post, usamos la variable $_FILES. Al utilizar ésta podemos obtener una variedad de valores que nos sirven para múltiples cosas.

Los posible valores que puedes obtener de la imagen son:

  • Nombre (name): El nombre que tiene el archivo al subirse.
  • Tipo (type): tipo del archivo. Por ejmplo: image/jpg.
  • Ruta temporal (tmp_name): Ruta temporal donde se almacena.
  • Tamaño (size): Tamaño del fichero.

Implementándolo en PHP sería algo así:

  • echo "<BR>".$_FILES['img_up']["name"]; //imprime nombre del fichero
  • echo "<BR>".$_FILES['img_up']["type"]; //imprime el tipo
  • echo "<BR>".$_FILES['img_up']["tmp_name"]; //imprime ruta temporal
  • echo "<BR>".$_FILES['img_up']["size"]; //imprime el tamaño

*img_up es el nombre de nuestro input en index.html.

<?php
//capturamos los datos del fichero subido    
$type=$_FILES['img_up']['type'];
$tmp_name = $_FILES['img_up']["tmp_name"];
$name = $_FILES['img_up']["name"];
//Creamos una nueva ruta (nuevo path)
//Así guardaremos nuestra imagen en la carpeta "images"
$nuevo_path="images/".$name;
//Movemos el archivo desde su ubicación temporal hacia la nueva ruta
# $tmp_name: la ruta temporal del fichero
# $nuevo_path: la nueva ruta que creamos
move_uploaded_file($tmp_name,$nuevo_path);
//Extraer la extensión del archivo. P.e: jpg
# Con explode() segmentamos la cadena de acuerdo al separador que definamos. En este caso punto (.)
$array=explode('.',$nuevo_path);
# Capturamos el último elemento del array anterior que vendría a ser la extensión
$ext= end($array);
//Imprimimos un texto de subida exitosa.
echo "<h3>La imagen se subio correctamente</h3>";
// Los posible valores que puedes obtener de la imagen son:
echo "<b>Info de la imagen subida:</b>";
echo "<br> Nombre: ".$_FILES['img_up']["name"];      //nombre del archivo
echo "<br> Tipo: ".$_FILES['img_up']["type"];      //tipo
echo "<br> Nombre Temporal: ".$_FILES['img_up']["tmp_name"];  //nombre del archivo de la imagen temporal
echo "<br> Tamanio: ".$_FILES['img_up']["size"]." bytes";      //tamaño
?>
  • Move_uploaded_file() Mueve un archivo hacia una nueva ruta. Así trasladamos desde el lugar temporal hasta donde queramos. Es booleano, así que puedes validar con alguna sentencia condicional si se subió o no tu archivo; no obstante, eso ya es validación y es tarea de depuración.
  • Puedes omitir las líneas donde se extrae la extensión, pero te puede servir si quieres algo más simplificado.

4. Probemos la funcionalidad: Míralo en este .

Fácil, ¿cierto? Debes aprender todos valores que puedes sacar de un fichero, así podrás validar el tamaño, la extensión, loq ue tú quieras. Ahora, si te preguntas: ¿Cómo subo la ruta (path, url) de mi imagen (fichero) a mi base de datos!, pues no es mucho problema: Crea tu base de datos y envíale en un INSERT la "ruta nueva" donde moviste tu imagen (En este caso ejemplo vendría a ser la variable $nuevo_path). Puedes codificar esta ruta y decodificarla cuando hagas un SELECT para mostrar tu imagen. Y listo.

  • Siempre revisa en la documentación de PHP alguna función que no comprendas o que sea nueva para ti.
  • No sólo debes seguir los videos, procura entender a fondo, línea a línea guiándote de la documentación de PHP.
  • Comenta las líneas de tu proyecto. Es una buena práctica.

Que te haya servido. Si tienes alguna duda me envías un mensaje y estamos en contacto.

Corrección:
*4.
Probemos la funcionalidad: Míralo en este 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas