PHP: Introduksjon

15 mai 2017

Vi skal sjå litt nærare på skriptspråket PHP som blir brukt av over 80% av alle websites der server-side språket er kjent! REF PHP står for Hypertext Preprocessor. Det er enkelt i bruk, og har åpen kildekode, men likevel mykje funksjonalitet. PHP er altså eit programspråk som gjer det mulig å kjøra eit program på serversida, og vi må derfor vita litt om kva eit program er. Vi kan sei at et dataprogram er realiseringa av ein algoritme eller oppskrift som vi kan kjøra på ein datamaskin. Ein viktig egenskap er at det har evne til å lagra og manipulera data. Vi begynner derfor med å snakka litt om korleis dette skjer i PHP.

PHP-variabler

Ein variabel er ein navngitt del av minnet som har plass til å lagra eit tall, ein tekststreng eller andre typer data. I PHP begynner variablane med dollartegnet. Feks. vil setningen $alder = 23; lagra talet 23 som variabelen $alder, dvs. ein stad i minnet som vi refererer til vha variabelnavnet. Tilsvarande kan vi setta $navn = "Per Hansen". Vi kan også kopiera innhaldet i ein variabel over til ein annan. $tall2 = $tall1 vil setta tall2 lik tall1. Tilordningen går altså frå høgre mot venstre.

Hvis vi treng å lagra data i tabellar bruker vi såkalte arrays. Et array er egentlig bare ein variabel som kan lagra mange verdiar på ein gong. For eksempel kan vi lagra alle rundetidene på et skøyteløp i et array $rundetid. Det er fleire måtar å få tak i ein bestemt rundetid på. Det enklaste er å nummerera dei. Td. refererer $rundetid[2] til den tredje! Grunnen er at PHP, som C og mange andre språk, begynner med nr 0. Vi kan også ha todimensjonale arrays. osv, men det skal vi ikkje gå nærmare inn på.
Ein annan type arrays er dei som blir kalla assosiative. Disse har den fordelen at vi kan referera til ein celle med navn i staden for nummer. Feks. gjer vi ein spørring mot databasen i index.php. Vil vi henta ut tittelen gjer vi det vha. $row['tittel'].

Alle variablar kan endrast og manipulerast vha operatorar. Feks kan vi skriva $alder = $alder +2. Det betyr at det skjer tre ting: Først hentar vi ut verdien av $alder (som var 23), så legg vi til 2 og til slutt legg vi svaret tilbake. No har altså $alder fått verdien 25. Det fins ein bråte andre operatorar vi kan bruka, både på tall og tektstrenger.

Funksjonar er nyttige hvis vi oppdager at vi har bruk for samme kode mange stader (i samme programmet eller i fleire program) Vi kan feks tenkja oss ein funksjon som finn antal dagar i ein månad. La oss kalla den mndlengde. Input til denne funksjonen kan då vera månadens nummer, altså eit tal mellom 1 og 12, og output vi vera eit tal mellom 28 og 31. (I verkeligheten treng vi år også, pga evt skuddår) Når vi i koden vår då skriv
$mnd = 3
$lengde = mndlengde($mnd)
vil variabelen $lengde bli sett til 31.

PHP har mange innbygde funksjonar som vi kan bruka. Spesielt nyttig for oss er dei som lar oss bruka ein mysql database via PHP. Eksempel på disse funksjonane er:

Med det vi til no har beskrive så ville vi kunne laga enkle program som fulgte ein oppskrift frå A til Å uten unntak og uten repetisjon. Men no kjem vi til det som gjer eit dataprogram mykje meir nyttige nemlig1) muligheten til å bare utføra bestemte deler av koden, avhengig av situasjonen, og 2) til å utføra ein bit så mange ganger vi har behov for.

1) Test. Ofte har vi bruk for å utføra deler av ein kode bare når visse betingelsar er oppfylt. Det vanligaste er ein såkalt if-else test. For eksempel testar denne koden frå index.php på om sql-spørringen har gått bra. Hvis ikkje ("!" betyr her "ikkje") skriv den ut ein feilmelding vha funksjonen echo:
if (!$resultat) echo "<b>FEIL: ikkje i stand til å senda.</b>";

2) Løkker. Når vi vil ha ein kode utført mange ganger kan vi feks. bruka ei for-løkke. Frå index.php har vi feks følgande:


          <?php foreach($rows as $row): ?>
... kode
<?php endforeach; ?>

Her står "kode" for det som er mellom, og det vil bli utført så lenge der er rader igjen å behandla.

Ein annan måte å laga løkke på er å bruka ei while-løkke

Bruk i praksis.

Eit PHP dokument kan innehalda både PHP-kode og statisk hmtl-kode. PHP-koden startar alltid med <?php og sluttar med ?>. Html-kode er tagga på vanlig måte. Når webserveren støter på PHP-kode blir den utført, og evt produserer denne koden html-kode som blir sendt til nettlesar. Når den støter på html-kode blir den bare sendt vidare til nettlesar uten prosessering. I vårt blogg-eksempel er strukturen ein eller annan variant av dette:


        <?php 
          Kode som opprettar forbindelse med databasen, sender ein spørring til
          databasen og lagrar resultatet i ein array. Ingen html blir produsert.
?> <HTML> <HEAD> <TITLE>Vis innlegg i bloggen</TITLE> </HEAD> <BODY> Blanding av html- og PHP-kode som genererer HTML-kode. </BODY> </HTML>

Input til eit PHP program

1 Direkte via URL

I bloggeksempelet fins det eit program som heiter visinnlegg.php Dette les i databasen og skriv ut eit bestemt innlegg, med all tekst. Men for å klara det treng det å vita id-en til det innlegget som skal skrivast ut. Hvis vi feks. vil skriva ut første innlegg, kan vi gjera det ved å skriva visinnlegg.php?id=1. Her viser spørsmålstegnet at det som kjem no er input. "id" er altså navnet på ein variabel, og "1" er verdien som blir sendt til visinnlegg.php. Inne i visinnlegg.php får vi tak i id ved hjelp av $id = $_GET['id']. Deretter gjer programmet ein SELECT mot databasen med WHERE id = 1.

2. Vha skjema

Når vi skal leggja inn nye innlegg, så må treng vi å skriva inn data som så skal leggast inn i databasen. For å få dette til lagar vi eit skjema (forms på engelsk). For eksempel viser skrivinnlegg.php to skrivbare felt. Det første er gitt navnet "tittel", og det andre "tekst" vha kommandoen "name=". Disse verdiane kan vi ta tak i og legga inn i tilsvarande kolonner i tabellen innlegg vha ein INSERT. Dette skjer først når vi har trykt "send"-knappen. Det som skjer då er at vi kallar det programmet som står angitt i "action=". I dette tilfellet er det skrivinnlegg.php!

<form method="POST" action="skrivinnlegg.php">

Med andre ord: programmet kallar seg sjøl! Det som skjer er at først blir skrivinnlegg.php kalla frå index.php og då viser det bare tomme skjema., og ingenting meir skjer fordi PHP-koden som kjem etter skjemaet har ein test på om det er utfylt. Når vi fyller ut skjema og trykkjer "send"-knappen kallar altså programmet seg sjøl, og då vil denne koden bli utført.

Legg merke til at her bruker vi metoden POST for å henta data frå skjemaet. Over brukte vi GET, og då kjem data som ein del av URL'en. Men med POST blir data sendt over på ein annan måte.