Forbind PHP og MySQL i bluetronix CMS
I denne tutorial opretter du en egen database tabel og forbinder den med en CMS-side. Gennem praktiske eksempler lærer du SQL-kommandoerne INSERT, REPLACE, SELECT og UPDATE at kende og finder ud af, hvordan du viser databaseværdier via HTML-pladsholdere på din hjemmeside.
Opret eksempel-side
For denne tutorial skal du først oprette en ny eksempel-side.
For eksempel:
PHP MySQL Eksempel
Siden kan først være helt tom.
Åbn siden derefter i den normale HTML-editor og indsæt et vilkårligt sideafsnit. Dette HTML-område vil senere fungere som skabelon for de data, der hentes fra databasen.
Opret database tabel
Før du kan gemme data, skal du have en egen database-tabel.
Åbn derfor:
Database → Ny Tabel
For dette eksempel bruger vi en tabel med kolonnerne ID, Dato, Titel, Beskrivelse og Billede.
ID indeholder den unikke ID for datasættet. Dato gemmer dato og klokkeslæt. Titel indeholder titlen, Beskrivelse en længere beskrivelsestekst, og Billede filnavnet.
Tabel-, kolonne- og variabelnavne skal altid bruges på engelsk i udvikler-tutorials.
Åbn PHP-kode
Når tabellen er oprettet, skal du gå tilbage til din eksempel-side.
Åbn der:
PHP Kode
Fra dette område kan du få direkte adgang til databasen.
Gem data med INSERT eller REPLACE
I det første eksempel gemmer du et datasæt i den tidligere oprettede database-tabel.
Begynd med at sætte de nødvendige PHP-variabler.
Eksempel:
$ID = 1;
$Date = date("Y-m-d H:i:s");
$Title = "My Title";
$Description = "My Description";
$Image = "my-image.jpg";
Disse værdier kan du derefter gemme med en MySQL Prepared Statement.
Til databaseadgang bør du generelt bruge Prepared Statements. På den måde behandles værdierne separat fra den egentlige SQL-kommando.
Eksempel med REPLACE:
$stmt = $mysqli->prepare("REPLACE INTO ExampleTable (ID, `Date`, Title, Description, Image) VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param("issss", $ID, $Date, $Title, $Description, $Image);
$stmt->execute();

Åbn siden én gang efterfølgende.
Åbn derefter:
Database → Vis
Der bør den nyligt oprettede post være synlig.
Forskellen mellem INSERT og REPLACE
INSERT tilføjer en ny post.
Eksisterer der allerede en post med den samme unikke ID eller samme primære nøgle, kan et normalt INSERT forårsage en Duplicate-Key-fejl.
REPLACE kan anvendes, hvis en eksisterende post med den samme unikke ID skal erstattes.
For testeksempler med en fast ID er REPLACE derfor ofte mere praktisk, da siden kan kaldes flere gange.
Hent data med SELECT
I det næste skridt henter du den gemte post fra databasen igen.
Eksempel:
$stmt = $mysqli->prepare("SELECT `Date`, Title, Description, Image FROM ExampleTable WHERE ID = ?");
$stmt->bind_param("i", $ID);
$stmt->execute();
$result = $stmt->get_result();
if($row = $result->fetch_assoc()) {
$Date = $row["Date"];
$Title = $row["Title"];
$Description = $row["Description"];
$Image = $row["Image"];
}
De læste værdier findes derefter i variablerne $Date, $Title, $Description og $Image.
Forbind database og $LayoutHTML
Den globale CMS-variabel $LayoutHTML indeholder under rendering-processen det aktuelt genererede HTML for siden.
Dermed kan du erstatte egne pladsholdere inden for HTML-koden med data fra MySQL-tabellen.
Sæt pladsholdere i HTML-koden
Åbn igen HTML-koden for din eksempel-side.
Indholdet af den tidligere indsatte sektion kan du nu erstatte med egne pladsholdere.
For eksempel:
__MyDate__
__MyTitle__
__MyDescription__
__MyImage__
Et forenklet HTML-eksempel:
<section>
<div class="container">
<img src="__MyImage__" alt="">
<small>__MyDate__</small>
<h2>__MyTitle__</h2>
<p>__MyDescription__</p>
</div>
</section>

For dette første MySQL-eksempel kan eksisterende oversættelsesmærker først fjernes. Det gør det lettere at se, hvilke indhold der direkte bliver erstattet af PHP og MySQL.
Indsæt databaseværdier i layoutet
Når dataene er indlæst med SELECT, erstatter du pladsholderne inden for $LayoutHTML.
Eksempel:
$LayoutHTML = str_replace("__MyDate__",$Date,$LayoutHTML);
$LayoutHTML = str_replace("__MyTitle__",$Title,$LayoutHTML);
$LayoutHTML = str_replace("__MyDescription__",$Description,$LayoutHTML);
$LayoutHTML = str_replace("__MyImage__",$Image,$LayoutHTML);
Forløbet er dermed:
MySQL-database → SELECT → PHP-variabler → str_replace() → $LayoutHTML → færdig hjemmeside

Indholdet af databasen vises dermed direkte inden for det eksisterende HTML-layout.
Test ændringer direkte via databasen
Åbn:
Database → Vis
Rediger derefter den eksisterende data.
For eksempel kan du ændre titlen fra My Title til New My Title.
Du kan også ændre billedet via den tilsvarende BX-Image-Button.
Efter gemning og genindlæsning af websiden vil de ændrede data blive vist direkte i sideopsettet.
Der er derfor en direkte forbindelse mellem:
Database → PHP → $LayoutHTML → Webside
Ændre data med UPDATE
Med UPDATE kan du ændre en eksisterende post direkte via PHP.
Her angives med en betingelse, hvilken post der skal ændres.
Efter udførelsen af opdateringen kan du indlæse dataene igen med SELECT og derefter vise dem på din side via $LayoutHTML.
Sammendrag
Med PHP og MySQL kan du gemme, hente og ændre data inden for bluetronix CMS.
INSERT eller REPLACE gemmer data, SELECT henter data, og UPDATE ændrer eksisterende poster.
Via $LayoutHTML kan du derefter direkte indsætte de hentede data i eksisterende HTML-strukturer.
Dette gør det muligt at forbinde databaseindhold pænt med HTML-layoutet på en CMS-side.
FAQ
hvad kunder ofte spørger os
Hvad har jeg brug for til denne PHP- og MySQL-tutorial?
Du har brug for en udvikleradgang til bluetronix CMS. Derudover bør du allerede vide, hvordan CMS-site-rendering-processen fungerer, og hvilken opgave variablen $LayoutHTML har.
Hvor opretter jeg en ny databastabel?
Åbn i CMS-området Database → Ny Tabel.
Hvilke kolonner bruges i eksemplet?
I tutorialen bruges kolonnerne ID, Date, Title, Description og Image.
Hvorfor skal jeg bruge Prepared Statements?
Prepared Statements adskiller de overleverede værdier fra den egentlige SQL-kommando og er derfor beregnet til databaseadgang.
Hvad er forskellen mellem INSERT og REPLACE?
INSERT tilføjer en ny post. REPLACE kan erstatte en eksisterende post med samme unikke ID eller samme primære nøgle.
Hvordan henter jeg data fra databasen?
Til det bruger du en SELECT-kommando. De hentede værdier kan derefter f.eks. gemmes i PHP-variabler som $Title, $Description eller $Image.
Hvordan kommer MySQL-data ind i HTML'en på siden?
Du opretter først dine egne pladsholdere i HTML-koden og erstatter disse efterfølgende med str_replace() indenfor $LayoutHTML med de indlæste databaseværdier.
Hvordan kan jeg tjekke, om forbindelsen mellem database og hjemmeside fungerer?
Åbn Database → Vis, ændre en eksisterende post og opdater derefter hjemmesiden. De nye værdier skulle derefter være synlige i side-layoutet.
Hvad bruges UPDATE til?
Med UPDATE kan du direkte ændre en allerede eksisterende post via PHP.
Kan jeg også bruge billeder fra databasen i side-layoutet?
Ja. I eksemplet gemmes billedværdien i variablen $Image og indsættes via en egen pladsholder som __MyImage__ i $LayoutHTML.