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:47For å 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.


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.

$_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.

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/

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.

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.


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.