6. JavaScript y AJAX

Manejo de AJAX (assets/js/script.js)

$(document).ready(function(){    // load gallery on page load    loadGallery();    // Form submission for image upload    $(\\'#uploadImage\\').on(\\'submit\\', function(e){        e.preventDefault(); // Prevent default form submission        var file_data = $(\\'#image\\').prop(\\'files\\')[0];        var form_data = new FormData();        form_data.append(\\'file\\', file_data);        //hide upload section        $(\\'#uploadImage\\').hide();        $.ajax({            url: \\'src/upload.php\\', // PHP script to process upload            type: \\'POST\\',            dataType: \\'text\\', // what to expect back from the server            cache: false,            data: new FormData(this), // Form data for upload            processData: false,            contentType: false,            success: function(response){                let jsonData = JSON.parse(response);                if(jsonData.status == 1){                    $(\\'#image\\').val(\\'\\'); // Clear the file input                    loadGallery(); // Fetch and display updated images                    $(\\'#upload-status\\').html(\\'
\\' jsonData.message \\'
\\'); } else { $(\\'#upload-status\\').html(\\'
\\' jsonData.message \\'
\\'); // Display error message } // hide message box autoHide(\\'#upload-status\\'); //show upload section autoShow(\\'#uploadImage\\'); } }); });});// Function to load the gallery from serverfunction loadGallery() { $.ajax({ url: \\'src/fetch-images.php\\', // PHP script to fetch images type: \\'GET\\', success: function(response){ let jsonData = JSON.parse(response); $(\\'#gallery\\').html(\\'\\'); // Clear previous images if(jsonData.status == 1){ $.each(jsonData.data, function(index, image){ $(\\'#gallery\\').append(\\'
\\\"Curso
\\'); // Display each image }); } else { $(\\'#gallery\\').html(\\'

No images found...

\\'); // No images found message } } });}//Auto Hide Divfunction autoHide(idORClass) { setTimeout(function () { $(idORClass).fadeOut(\\'fast\\'); }, 1000);}//Auto Show Elementfunction autoShow(idORClass) { setTimeout(function () { $(idORClass).fadeIn(\\'fast\\'); }, 1000);}

7. Scripts PHP de backend

Obteniendo imágenes (src/fetch-images.php)

 0, \\'message\\' => \\'No images found.\\');// Fetching images from the database$query = $pdo->prepare(\\\"SELECT * FROM images ORDER BY uploaded_on DESC\\\");$query->execute();$images = $query->fetchAll(PDO::FETCH_ASSOC);if(count($images) > 0){    $response[\\'status\\'] = 1;    $response[\\'data\\'] = $images; // Returning images data}// Return responseecho json_encode($response);?>?>

Subir imagen (src/upload.php)

 0, \\'message\\' => \\'Form submission failed, please try again.\\');if(isset($_FILES[\\'image\\'][\\'name\\'])){    // Directory where files will be uploaded    $targetDir = UPLOAD_DIRECTORY;    $fileName = date(\\'Ymd\\').\\'-\\'.str_replace(\\' \\', \\'-\\', basename($_FILES[\\'image\\'][\\'name\\']));    $targetFilePath = $targetDir . $fileName;    $fileType = pathinfo($targetFilePath, PATHINFO_EXTENSION);    // Allowed file types    $allowTypes = array(\\'jpg\\',\\'png\\',\\'jpeg\\',\\'gif\\');    if(in_array($fileType, $allowTypes)){        // Upload file to server        if(move_uploaded_file($_FILES[\\'image\\'][\\'tmp_name\\'], $targetFilePath)){            // Insert file name into database            $insert = $pdo->prepare(\\\"INSERT INTO images (file_name, uploaded_on) VALUES (:file_name, NOW())\\\");            $insert->bindParam(\\':file_name\\', $fileName);            $insert->execute();            if($insert){                $response[\\'status\\'] = 1;                $response[\\'message\\'] = \\'Image uploaded successfully!\\';            }else{                $response[\\'message\\'] = \\'Image upload failed, please try again.\\';            }        }else{            $response[\\'message\\'] = \\'Sorry, there was an error uploading your file.\\';        }    }else{        $response[\\'message\\'] = \\'Sorry, only JPG, JPEG, PNG, & GIF files are allowed to upload.\\';    }}// Return responseecho json_encode($response);?>

6. Estilo CSS

Estilo CSS (assets/css/style.css)

body {    background-color: #f8f9fa;}#gallery .col-md-4 {    margin-bottom: 20px;}#gallery img {    display: block;    width: 200px;    height: auto;    margin: 10px;}

Documentación y comentarios

Esta solución incluye la configuración del proyecto, la configuración de la base de datos, la estructura HTML, el estilo con CSS, el manejo de la carga de imágenes con AJAX y el almacenamiento de datos de imágenes en la base de datos usando PHP PDO. Cada línea de código está comentada para explicar su propósito y funcionalidad, lo que lo convierte en un tutorial completo para crear una galería de imágenes con funcionalidad de carga.

Enlaces de conexión

Si esta serie te resultó útil, considera darle al repositorio una estrella en GitHub o compartir la publicación en tus redes sociales favoritas. ¡Tu apoyo significaría mucho para mí!

Si quieres más contenido útil como este, no dudes en seguirme:

Código fuente

","image":"http://www.luping.net/uploads/20240901/172516968466d400142d2f9.jpg","datePublished":"2024-09-01T13:48:04+08:00","dateModified":"2024-09-01T13:48:04+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Curso intensivo de PHP: Galería de imágenes simple

Curso intensivo de PHP: Galería de imágenes simple

Publicado el 2024-09-01
Navegar:362

PHP crash course: Simple Image Gallery

Una galería de imágenes completamente funcional con capacidades de carga usando PHP, HTML, jQuery, AJAX, JSON, Bootstrap, CSS y MySQL. Este proyecto incluye una solución detallada paso a paso con explicaciones de código y documentación, lo que lo convierte en un tutorial completo para el aprendizaje.

Temas: php, mysql, blog, ajax, bootstrap, jquery, css, galería de imágenes, carga de archivos

Solución paso a paso

1. Estructura del directorio

simple-image-gallery/
│
├── index.html
├── db/
│   └── database.sql
├── src/
│   ├── fetch-image.php
│   └── upload.php
├── include/
│   ├── config.sample.php
│   └── db.php
├── assets/
│   ├── css/
│   │   └── style.css
│   ├── js/
│   │   └── script.js
│   └── uploads/
│   │   └── (uploaded images will be stored here)
├── README.md
└── .gitignore

2. Esquema de base de datos

db/database.sql:

CREATE TABLE IF NOT EXISTS `images` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `file_name` varchar(255) NOT NULL,
    `uploaded_on` datetime NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3. Archivo de configuración

Ajustes de configuración (incluye/config.sample.php)


4. Configurar la conexión a la base de datos

Estableciendo conexión a la base de datos (include/db.php)

 PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];

// Create a new PDO instance
try {
    $pdo = new PDO($dsn, DB_USER, DB_PASS, $options);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Set error mode to exception
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage(); // Display error message if connection fails
}
?>

5. Estructura HTML y PHP

Estructura HTML (index.html)



    
    
    Image Gallery Upload
    
    


Image Gallery


6. JavaScript y AJAX

Manejo de AJAX (assets/js/script.js)

$(document).ready(function(){
    // load gallery on page load
    loadGallery();

    // Form submission for image upload
    $('#uploadImage').on('submit', function(e){
        e.preventDefault(); // Prevent default form submission
        var file_data = $('#image').prop('files')[0];
        var form_data = new FormData();
        form_data.append('file', file_data);
        //hide upload section
        $('#uploadImage').hide();
        $.ajax({
            url: 'src/upload.php', // PHP script to process upload
            type: 'POST',
            dataType: 'text', // what to expect back from the server
            cache: false,
            data: new FormData(this), // Form data for upload
            processData: false,
            contentType: false,
            success: function(response){
                let jsonData = JSON.parse(response);
                if(jsonData.status == 1){
                    $('#image').val(''); // Clear the file input
                    loadGallery(); // Fetch and display updated images
                    $('#upload-status').html('
' jsonData.message '
'); } else { $('#upload-status').html('
' jsonData.message '
'); // Display error message } // hide message box autoHide('#upload-status'); //show upload section autoShow('#uploadImage'); } }); }); }); // Function to load the gallery from server function loadGallery() { $.ajax({ url: 'src/fetch-images.php', // PHP script to fetch images type: 'GET', success: function(response){ let jsonData = JSON.parse(response); $('#gallery').html(''); // Clear previous images if(jsonData.status == 1){ $.each(jsonData.data, function(index, image){ $('#gallery').append('
Curso intensivo de PHP: Galería de imágenes simple
'); // Display each image }); } else { $('#gallery').html('

No images found...

'); // No images found message } } }); } //Auto Hide Div function autoHide(idORClass) { setTimeout(function () { $(idORClass).fadeOut('fast'); }, 1000); } //Auto Show Element function autoShow(idORClass) { setTimeout(function () { $(idORClass).fadeIn('fast'); }, 1000); }

7. Scripts PHP de backend

Obteniendo imágenes (src/fetch-images.php)

 0, 'message' => 'No images found.');

// Fetching images from the database
$query = $pdo->prepare("SELECT * FROM images ORDER BY uploaded_on DESC");
$query->execute();
$images = $query->fetchAll(PDO::FETCH_ASSOC);

if(count($images) > 0){
    $response['status'] = 1;
    $response['data'] = $images; // Returning images data
}

// Return response
echo json_encode($response);
?>
?>

Subir imagen (src/upload.php)

 0, 'message' => 'Form submission failed, please try again.');

if(isset($_FILES['image']['name'])){
    // Directory where files will be uploaded
    $targetDir = UPLOAD_DIRECTORY;
    $fileName = date('Ymd').'-'.str_replace(' ', '-', basename($_FILES['image']['name']));
    $targetFilePath = $targetDir . $fileName;
    $fileType = pathinfo($targetFilePath, PATHINFO_EXTENSION);

    // Allowed file types
    $allowTypes = array('jpg','png','jpeg','gif');
    if(in_array($fileType, $allowTypes)){
        // Upload file to server
        if(move_uploaded_file($_FILES['image']['tmp_name'], $targetFilePath)){
            // Insert file name into database
            $insert = $pdo->prepare("INSERT INTO images (file_name, uploaded_on) VALUES (:file_name, NOW())");
            $insert->bindParam(':file_name', $fileName);
            $insert->execute();
            if($insert){
                $response['status'] = 1;
                $response['message'] = 'Image uploaded successfully!';
            }else{
                $response['message'] = 'Image upload failed, please try again.';
            }
        }else{
            $response['message'] = 'Sorry, there was an error uploading your file.';
        }
    }else{
        $response['message'] = 'Sorry, only JPG, JPEG, PNG, & GIF files are allowed to upload.';
    }
}

// Return response
echo json_encode($response);
?>

6. Estilo CSS

Estilo CSS (assets/css/style.css)

body {
    background-color: #f8f9fa;
}

#gallery .col-md-4 {
    margin-bottom: 20px;
}

#gallery img {
    display: block;
    width: 200px;
    height: auto;
    margin: 10px;
}

Documentación y comentarios

  • config.php: Contiene la configuración de la base de datos y se conecta a MySQL usando PDO.
  • index.php: Página principal con estructura HTML, incluye Bootstrap para estilo y un modal para agregar/editar publicaciones.
  • assets/js/script.js: Maneja solicitudes AJAX para cargar y guardar publicaciones. Utiliza jQuery para manipulación DOM y AJAX.
  • src/fetch-images.php: Obtiene publicaciones de la base de datos y las devuelve como JSON.
  • src/upload.php: Maneja la creación y actualización de publicaciones en función de la presencia de una identificación.

Esta solución incluye la configuración del proyecto, la configuración de la base de datos, la estructura HTML, el estilo con CSS, el manejo de la carga de imágenes con AJAX y el almacenamiento de datos de imágenes en la base de datos usando PHP PDO. Cada línea de código está comentada para explicar su propósito y funcionalidad, lo que lo convierte en un tutorial completo para crear una galería de imágenes con funcionalidad de carga.

Enlaces de conexión

Si esta serie te resultó útil, considera darle al repositorio una estrella en GitHub o compartir la publicación en tus redes sociales favoritas. ¡Tu apoyo significaría mucho para mí!

Si quieres más contenido útil como este, no dudes en seguirme:

  • LinkedIn
  • GitHub

Código fuente

Declaración de liberación Este artículo se reproduce en: https://dev.to/mdarifulhaque/php-crash-course-simple-image-gallery-h4l?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3