Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Como subir Archivos, Imagenes PHP MysQL
#1
Este es un tema bastante trillado, lo publico ya que el siguiente articulo lo encuentro muy desmenuzado y facil decomprender, espero sea de su agrado. Al final pongo el autor original, la fuente la desconozco, ya que lo encontre dentro de mis ducmentos tecnicos y de refrencia.


___________________________________________________________________________________________________________
Cuando creamos una pagina web o algún aplicación web y tenemos la necesidad de permitir a los usuarios y/o administrador de la pagina o la aplicación tener la posibilidad de subir archivos en este caso subiremos imágenes, pero sigue siendo el mismo método.
Para esto deberías tener un conocimiento en HTML y PHP básico.
Primero que todo debemos crear el formulario en HTML que permitirá subir el archivo (imagen).
<form action="subir.php" method="POST" enctype="multipart/form-data">
        <label for="imagen">Imagen:</label>
        <input type="file" name="imagen" id="imagen" />
        <input type="submit" name="subir" value="Subir"/>
</form>
Este es nuestro formulario donde vamos a elegir la imagen que vamos a subir, como pueden ver en la primera linea tenemos
<form action="subir.php" method="POST" enctype="multipart/form-data">
aqui declaramos el formulario diciendo que toda la información que se suministren serán enviadas a subir.php utilizando el método POST y por ultimo tenemos enctype="multipart/form-data" este es el método de codificación que necesitamos para enviar el archivo que estamos seleccionando para subir, esta codificación necesita que el método sea POST de lo contrario no funcionara.
<input type="file" name="imagen" id="imagen" />
Aquí tenemos nuestro elemento input de tipo file que sera el que va a contener nuestra imagen.
Ya que tenemos nuestro formulario hecho, vamos a proceder a crear nuestro archivo subir.php el cual se encargara se recibir la informaciones del formulario y copiar la imagen al servidor.
Pero cuando subir.php se ejecuta ya PHP se ha encargado de copiar el archivo en una carpeta temporal con un nombre al azar, asi que si no la mueves de esa carpeta temporal pues PHP la eliminara, por eso es que necesitaremos nuestro archivo subir.php que se encargara de copiarla Sonrisa.
Entonces te preguntaras como voy a saber como se llama la imagen si el nombre que elige es al azar o donde esta este directorio temporal? pues PHP almacena todo esto en un arreglo llamado $_FILES de la siguiente manera.
$_FILES['imagen']['name']; //este es el nombre del archivo que acabas de subir
$_FILES['imagen']['type']; //este es el tipo de archivo que acabas de subir
$_FILES['imagen']['tmp_name'];//este es donde esta almacenado el archivo que acabas de subir.
$_FILES['imagen']['size']; //este es el tamaño en bytes que tiene el archivo que acabas de subir.
$_FILES['imagen']['error']; //este almacena el codigo de error que resultaría en la subida.
//imagen es el nombre del input tipo file del formulario.
Ya conociendo esto que procedemos a crear nuestro archivo.
//comprobamos si ha ocurrido un error.
if ($_FILES["imagen"]["error"] > 0){
        echo "ha ocurrido un error";
} else {
        //ahora vamos a verificar si el tipo de archivo es un tipo de imagen permitido.
        //y que el tamano del archivo no exceda los 100kb
        $permitidos = array("image/jpg", "image/jpeg", "image/gif", "image/png");
        $limite_kb = 100;
 
        if (in_array($_FILES['imagen']['type'], $permitidos) && $_FILES['imagen']['size'] <= $limite_kb * 1024){
               //esta es la ruta donde copiaremos la imagen
               //recuerden que deben crear un directorio con este mismo nombre
               //en el mismo lugar donde se encuentra el archivo subir.php
               $ruta = "imagenes/" . $_FILES['imagen']['name'];
               //comprovamos si este archivo existe para no volverlo a copiar.
               //pero si quieren pueden obviar esto si no es necesario.
               //o pueden darle otro nombre para que no sobreescriba el actual.
               if (!file_exists($ruta)){
                       //aqui movemos el archivo desde la ruta temporal a nuestra ruta
                       //usamos la variable $resultado para almacenar el resultado del proceso de mover el archivo
                       //almacenara true o false
                       $resultado = @move_uploaded_file($_FILES["imagen"]["tmp_name"], $ruta);
                       if ($resultado){
                               echo "el archivo ha sido movido exitosamente";
                       } else {
                               echo "ocurrio un error al mover el archivo.";
                       }
               } else {
                       echo $_FILES['imagen']['name'] . ", este archivo existe";
               }
        } else {
               echo "archivo no permitido, es tipo de archivo prohibido o excede el tamano de $limite_kb Kilobytes";
        }
}
Si desconoce porque utilize un arroba (@) delante move_uploaded_file en esta linea
$resultado = @move_uploaded_file($_FILES["imagen"]["tmp_name"], $ruta);
esto simplemente forza a PHP a no lanzar un error o mas bien no mostrar el error o la advertencia.
Ahora ya tenemos la imagen guardada en nuestro servidor vamos a utilizar una base de datos para almacenar el nombre de las imágenes que hemos copiados al servidor, así que debemos crear una tabla en nuestra base de datos que sea algo así.
CREATE TABLE `imagenes` (
        `imagen_id` int(11) AUTO_INCREMENT PRIMARY KEY,
        `imagen` varchar(255)
)
imagen_id sera el numero de identificación de la imagen, mientras que imagen sera el nombre de la imagen.
Vamos a agregar en nuestro archivo subir.php la conexión a nuestra base de datos.
<?php
//conexion a la base de datos
mysql_connect("servidor", "usuario", "contrasena") or die(mysql_error()) ;
mysql_select_db("base_de_datos") or die(mysql_error()) ;
?>
Cambia la información por la respectiva en tu servidor web
ahora que ya creamos la conexión debemos insertar el nombre de la imagen en la tabla imágenes después de:
if ($resultado)
$nombre = $_FILES['imagen']['name'];
//insertamos/guardamos el nombre de la imagen en la tabla.
@mysql_query("INSERT INTO imagenes (imagen) VALUES ('$nombre')");
el archivo subir.php quedaria de esta manera
<?php
//conexion a la base de datos
mysql_connect("servidor", "usuario", "contrasena") or die(mysql_error()) ;
mysql_select_db("base_de_datos") or die(mysql_error()) ;
 
//comprobamos si ha ocurrido un error.
if ($_FILES["imagen"]["error"] > 0){
        echo "ha ocurrido un error";
} else {
        //ahora vamos a verificar si el tipo de archivo es un tipo de imagen permitido.
        //y que el tamano del archivo no exceda los 100kb
        $permitidos = array("image/jpg", "image/jpeg", "image/gif", "image/png");
        $limite_kb = 100;
 
        if (in_array($_FILES['imagen']['type'], $permitidos) && $_FILES['imagen']['size'] <= $limite_kb * 1024){
               //esta es la ruta donde copiaremos la imagen
               //recuerden que deben crear un directorio con este mismo nombre
               //en el mismo lugar donde se encuentra el archivo subir.php
               $ruta = "imagenes/" . $_FILES['imagen']['name'];
               //comprobamos si este archivo existe para no volverlo a copiar.
               //pero si quieren pueden obviar esto si no es necesario.
               //o pueden darle otro nombre para que no sobreescriba el actual.
               if (!file_exists($ruta)){
                       //aqui movemos el archivo desde la ruta temporal a nuestra ruta
                       //usamos la variable $resultado para almacenar el resultado del proceso de mover el archivo
                       //almacenara true o false
                       $resultado = @move_uploaded_file($_FILES["imagen"]["tmp_name"], $ruta);
                       if ($resultado){
                               $nombre = $_FILES['imagen']['name'];
                               @mysql_query("INSERT INTO imagenes (imagen) VALUES ('$nombre')") ;
                               echo "el archivo ha sido movido exitosamente";
                       } else {
                               echo "ocurrio un error al mover el archivo.";
                       }
               } else {
                       echo $_FILES['imagen']['name'] . ", este archivo existe";
               }
        } else {
               echo "archivo no permitido, es tipo de archivo prohibido o excede el tamano de $limite_kb Kilobytes";
        }
}
 
?>
este es el código final, por ultimo como la mostramos en nuestra pagina? para eso vamos crear otro archivo para mostrar de que maneras podemos seleccionar las imágenes de la base de datos, llamemos este archivo ver.php
<?php
//conexion a la base de datos
mysql_connect("servidor", "usuario", "contrasena") or die(mysql_error()) ;
mysql_select_db("base_de_datos") or die(mysql_error()) ;
 
//si la variable imagen no ha sido definida nos dara un advertencia.
$id = $_GET['imagen'];
 
//vamos a crear nuestra consulta SQL
$consulta = "SELECT imagen FROM imagenes WHERE imagen_id = $id";
//con mysql_query la ejecutamos en nuestra base de datos indicada anteriormente
//de lo contrario mostraremos el error que ocaciono la consulta y detendremos la ejecucion.
$resultado= @mysql_query($consulta) or die(mysql_error());
 
//si el resultado fue exitoso
//obtendremos el dato que ha devuelto la base de datos
$datos = mysql_fetch_assoc($resultado);
//ruta va a obtener un valor parecido a "imagenes/nombre_imagen.jpg" por ejemplo
$ruta = "imagenes/" . $datos['imagen'];
 
//ahora solamente debemos mostrar la imagen
echo "<img src='$ruta' />";
 
?>
así que nada mas tenemos que ejecutar este archivo de la siguiente manera miweb.com/ver.php?id=1 siendo miweb.com el nombre de tu pagina web. si no quieren utilizar eso pueden cambiar $id = $_GET['imagen']; y darle cualquier valor al $id
ahora por ultimo si quieres mostrar toda la imagen que tienes en la base de datos en un mismo archivo, vamos a crear otro por cuestión del tutorial, y lo llamaremos ver_todas.php
<?php
//conexion a la base de datos
mysql_connect("servidor", "usuario", "contrasena") or die(mysql_error()) ;
mysql_select_db("base_de_datos") or die(mysql_error()) ;
 
//vamos a crear nuestra consulta SQL
$consulta = "SELECT imagen FROM imagenes";
//con mysql_query la ejecutamos en nuestra base de datos indicada anteriormente
//de lo contrario mostraremos el error que ocaciono la consulta y detendremos la ejecucion.
$resultado= @mysql_query($consulta) or die(mysql_error());
 
//si el resultado fue exitoso
//obtendremos los datos que ha devuelto la base de datos
//y con un ciclo recorreremos todos los resultados
while ($datos = @mysql_fetch_assoc($resultado) ){
        //ruta va a obtener un valor parecido a "imagenes/nombre_imagen.jpg" por ejemplo
        $ruta = "imagenes/" . $datos['imagen'];
 
        //ahora solamente debemos mostrar la imagen
        echo "<img src='$ruta' />";
}
 
?>
De esta manera estará mostrando toda las imágenes. Recuerda que esto es un tutorial y no tomen este código por 100% garantizado y seguro, puede tener fallas lo cual seria bienvenido comentar si has encontrado alguno, esto es una orientación para que sepas de la manera que funciona.
Espero que este tutorial haya sido de su agrado.




Como Subir Archivos – Imagenes utilizando PHP y MySQL
Por: Welling Guzman 03 julio 2012

as documentos del mismo autor:
http://casamadrugada.net/author/wellingguzman/



Posibles temas similares...
Tema Autor Respuestas Vistas Último mensaje
  Como usar Datatable PHP & JSon & Mysql WMasterT 4 151 08-08-2018, 07:37 PM
Último mensaje: avdarie
  Modos de tema Subir imagenes con PHP y class.upload.php cmascreativo 2 169 02-03-2018, 08:11 AM
Último mensaje: easy english
  Subir multiples archivos o imágenes al servidor y guardarlas con PHP y MySQL cmascreativo 5 332 02-03-2018, 08:08 AM
Último mensaje: easy english
Bug Problema conectando con MySql remoto yuma2009 2 229 01-02-2018, 11:52 AM
Último mensaje: easy english
  error mysql en php admin efbsfcd 2 168 14-12-2017, 12:49 AM
Último mensaje: jeje
  Problema conexion remota mysql efbsfcd 2 301 07-07-2017, 07:19 AM
Último mensaje: efbsfcd
  [Tutorial] Pasar MySQL a MySQLi[POO] amner 6 566 03-05-2017, 02:05 AM
Último mensaje: ReyNexo23
  jQuery: ocultar imágenes rotas Jvh_22 10 819 03-01-2017, 09:26 PM
Último mensaje: gassip
  [Tutorial] Pasar base de datos MySQL por SSH Jvh_22 1 474 11-10-2016, 04:12 PM
Último mensaje: efbsfcd
  falla conexion a mysql [email protected] 4 683 01-09-2016, 06:52 AM
Último mensaje: easy english



Usuarios navegando en este tema: 1 invitado(s)