3 – Laste opp bilder med PHP



3 – Laste opp bilder med PHP

av Ole Petter den 27. juli 2019

Sist oppdatert: 28 juli, 2019 kl 13:47

For å laste opp bilder til en nettside og vise de på en nettside må man lage en databasetabell som lagrer bildene, og samtidig ha en mappe å lagre bildene i på serveren.

Det må lages et skjema som sender en POST-request til en PHP-funksjon enten på samme side, eller i en annen PHP-fil, som behandler opplastingen og lagrer bildenavnet i databasetabellen.

I dette tilfellet har jeg lagt alle funksjonene i en egen undermappe kalt includes for å skille dem fra hovedmappen med selve visningen av siden. Jeg har også laget en db.php-fil hvor databasetilkoblingen er opprettet.

Opplastingsskjema
Eksempel på et skjema som behandler bildeopplasting, i dette tilfellet index.php i hovedmappen
Databasetilkobling php mysql
Tilkoblingen til databasen i db.php

For å lagre bildene på nettsiden har jeg laget en undermappe kalt assets, og her ligger mappen kalt images, hvor bildene blir lastet opp.


Contents

Lage opplastingsfunksjonen

Funksjonen som brukes for å laste opp bilder heter move_uploaded_file(); , og brukes til å laste opp alt av mediefiler. https://www.php.net/manual/en/function.move-uploaded-file.php

Variabelen $target sier hvor bildet skal lastes opp, og $file_name er navnet på filen, og forteller hva bildefilen skal lagres som i databasen.

Etter SQL-spørringen har jeg laget en if-funksjon som sjekker om spørringen var vellykket. Hvis den var vellykket videresendes brukeren til index.php med en beskjed via en $_GET funksjon om opplastingen var vellykket, og scriptet avsluttes med exit(). Dersom opplastingen mislyktes sendes brukeren tilbake til index.php med beskjed om at opplastingen feilet.

Opplastingsscript php AddImage.inc.php
Filen AddImage.inc.php som behandler bildeopplastingen

$_FILES er en reservert variabel i PHP som behandler overføring av filer, mens mysqli_query() behandler SQL-spørringen.

I dette tilfellet brukes mysqli_query til å sende innholdet i skjemaet til databasen ved hjelp av variablene $link, som er variabelen som holder informasjonen om databasetilkoblingen, og $sql, som er selve spørringen mot databasen, i dette tilfellet en INSERT-spørring, altså settes data inn i tabellen images.


Opprette databasen

For å lagre bildene har jeg laget en tabell kalt ‘images’ i databasen jeg opprettet tidligere kalt ‘kurs’. Bildene lagres i kolonnen ‘image’, og datatypen er varchar med 255 karakterer.

Tabellen » images» som lagrer informasjon om bildene som blir lastet opp

Tilbake til index.php har jeg lagt til tilkoblingen til databasen øverst i filen, og under skjemaet har jeg laget en spørring mot databasen for å vise bildet på siden.


Les forrige innlegg for mer informasjon om spørringer mot databaser:
https://smorasstats.com/PORTFOLIO/nyheter/2019/07/27/sporringer-mot-databaser-i-php/

Index.php som både behandler opplastingen av bildet og viser bildet som blir lastet opp

Validering av opplasting

For å kontrollere at bildene overføres brukes en if-funksjon i AddImage.inc.php. Den sender informasjon til index-sidens url, altså nettadressen, om bildet ble opplastet eller ikke.

Etter index.php – altså: «?upload=success», sendes informasjon til nettsiden. Denne informasjonen kan hentes ved en $_GET funksjon på siden man henvises til etter opplastingen, altså index.php. Denne informasjonen kan brukes til å finne ut om opplastingen ble fullført eller ikke.

If-funksjon som sjekker om opplastingen var vellykket

I tilfellet på min side vises det tydelig om bildet ble lastet opp eller ikke. Det gjøres i form av en melding via $_GET-funksjonen, i tillegg til at det nyeste bildet alltid dukker opp nedenfor meldingen.

Denne if-funksjonen har jeg lagt til rett ovenfor bildet i index.php, og nedenfor opplastingsskjemaet.

Bildet som ble lastet opp vises på siden sammen med en beskjed om at opplastingen var vellykket
Bildene har blitt lagret med navn og filnavn i tabellen images.

Når bildene blir lastet opp til mappen images og filnavnet lagres i databasen, kan bildet hentes og vises på siden. Som vist i index.php lages det først en spørring mot tabellen images, så lagres resultatet i en mysqli_query.

Deretter kan resultatet av spørringen brukes til å lage en såkalt row, hvor hver rad med data i tabellen lagres i variabelen jeg har kalt $row. Denne variabelen kan da brukes til å hente data fra hver kolonne i en enkelt rad, og vises på siden.


Galleri


Legg igjen en kommentar