6. JavaScript und AJAX

AJAX-Handhabung (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(\\'
\\\"PHP-Crashkurs:
\\'); // 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. Backend-PHP-Skripte

Bilder abrufen (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);?>?>

Bild-Upload (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. CSS-Styling

CSS-Styling (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;}

Dokumentation und Kommentare

Diese Lösung umfasst das Einrichten des Projekts, die Datenbankkonfiguration, die HTML-Struktur, das Styling mit CSS, die Handhabung des Bild-Uploads mit AJAX und das Speichern von Bilddaten in der Datenbank mithilfe von PHP PDO. Jede Codezeile wird kommentiert, um ihren Zweck und ihre Funktionalität zu erläutern, sodass es sich um ein umfassendes Tutorial zum Erstellen einer Bildergalerie mit Upload-Funktion handelt.

Verbindungslinks

Wenn Sie diese Serie hilfreich fanden, denken Sie bitte darüber nach, dem Repository einen Stern auf GitHub zu geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken zu teilen? Ihre Unterstützung würde mir sehr viel bedeuten!

Wenn Sie weitere hilfreiche Inhalte wie diesen wünschen, folgen Sie mir gerne:

Quellcode

","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"}}
„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > PHP-Crashkurs: Einfache Bildergalerie

PHP-Crashkurs: Einfache Bildergalerie

Veröffentlicht am 01.09.2024
Durchsuche:854

PHP crash course: Simple Image Gallery

Eine voll funktionsfähige Bildergalerie mit Upload-Funktionen mit PHP, HTML, jQuery, AJAX, JSON, Bootstrap, CSS und MySQL. Dieses Projekt enthält eine detaillierte Schritt-für-Schritt-Lösung mit Codeerklärungen und Dokumentation, was es zu einem umfassenden Tutorial zum Lernen macht.

Themen: PHP, MySQL, Blog, Ajax, Bootstrap, JQuery, CSS, Bildergalerie, Datei-Upload

Schritt-für-Schritt-Lösung

1. Verzeichnisstruktur

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. Datenbankschema

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. Konfigurationsdatei

Konfigurationseinstellungen (include/config.sample.php)

4. Konfigurieren Sie die Datenbankverbindung

Datenbankverbindung wird hergestellt (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. HTML- und PHP-Struktur

HTML-Struktur (index.html)



    Image Gallery Upload

Image Gallery


6. JavaScript und AJAX

AJAX-Handhabung (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('
PHP-Crashkurs: Einfache Bildergalerie
'); // 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. Backend-PHP-Skripte

Bilder abrufen (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);
?>
?>

Bild-Upload (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. CSS-Styling

CSS-Styling (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;
}

Dokumentation und Kommentare

  • config.php: Enthält die Datenbankkonfiguration und stellt über PDO eine Verbindung zu MySQL her.
  • index.php: Hauptseite mit HTML-Struktur, enthält Bootstrap für das Styling und ein Modal zum Hinzufügen/Bearbeiten von Beiträgen.
  • assets/js/script.js: Verarbeitet AJAX-Anfragen zum Laden und Speichern von Beiträgen. Verwendet jQuery für die DOM-Manipulation und AJAX.
  • src/fetch-images.php: Ruft Beiträge aus der Datenbank ab und gibt sie als JSON zurück.
  • src/upload.php: Verwaltet die Erstellung und Aktualisierung von Beiträgen basierend auf dem Vorhandensein einer ID.

Diese Lösung umfasst das Einrichten des Projekts, die Datenbankkonfiguration, die HTML-Struktur, das Styling mit CSS, die Handhabung des Bild-Uploads mit AJAX und das Speichern von Bilddaten in der Datenbank mithilfe von PHP PDO. Jede Codezeile wird kommentiert, um ihren Zweck und ihre Funktionalität zu erläutern, sodass es sich um ein umfassendes Tutorial zum Erstellen einer Bildergalerie mit Upload-Funktion handelt.

Verbindungslinks

Wenn Sie diese Serie hilfreich fanden, denken Sie bitte darüber nach, dem Repository einen Stern auf GitHub zu geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken zu teilen? Ihre Unterstützung würde mir sehr viel bedeuten!

Wenn Sie weitere hilfreiche Inhalte wie diesen wünschen, folgen Sie mir gerne:

  • LinkedIn
  • GitHub

Quellcode

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/mdarifulhaque/php-crash-course-simple-image-gallery-h4l?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3