PHP är ett av de van­li­gas­te pro­gram­me­rings­språ­ken för ser­ver­pro­gram­me­ring. Med tiden har det blivit en in­te­gre­rad del av moderna webb­plat­ser och in­ter­net­tek­nik. Det kan dock vara svårt för nybörjare att lära sig PHP. I denna PHP-hand­led­ning visar vi dig grunderna i det populära pro­gram­me­rings­språ­ket och dess vik­ti­gas­te ope­ra­to­rer, loopar och funk­tio­ner.

Vad du behöver ha innan du börjar PHP-hand­led­ning­en

Vår hand­led­ning riktar sig främst till nybörjare. Det kan dock vara bra att ha grund­läg­gan­de kunskaper om modern web­b­ut­veck­ling och HTML. För att kunna följa med och re­pro­du­ce­ra exemplen på din egen dator bör du se till att du har följande förberett:

  • Webb­ser­ver inklusive PHP-tolken
  • PHP in­stal­le­rat
  • Webb­lä­sa­re
  • Tex­tre­di­ge­ra­re

Som server re­kom­men­de­rar vi den lokala test­mil­jön XAMPP, som Apache Friends till­han­da­hål­ler kost­nads­fritt för ope­ra­tiv­sy­ste­men Windows, Linux och macOS. XAMPP är en renodlad test­ser­ver. Web­b­ut­veck­la­re kan använda pro­gram­va­ran för att enkelt skapa test­mil­jö­er för skript, HTML-sidor och stil­mal­lar. En säker drift av webb­ser­vern på internet kan dock inte ga­ran­te­ras. De­tal­je­ra­de in­stal­la­tions­in­struk­tio­ner finns i vår XAMPP-hand­led­ning.

Vad är syntaxen för PHP?

När du har kon­fi­gu­re­rat din lokala webb­ser­ver (till exempel med XAMPP) är det en bra idé att testa att PHP har in­stal­le­rats korrekt och är redo att köra skript. Ett skript är ett program som inte är kom­pi­le­rat till binär kod. Istället körs de av en tolk. Öppna din fa­vo­rittex­tre­di­ge­ra­re och använd följande PHP-skript:

<?php
phpinfo();
?>
php
Bild: PHP code in text editor
A text editor like Notepad++ supports pro­gram­ming with syntax high­ligh­ting.

PHP-skript följer en specifik struktur. Den inledande PHP-taggen <?php initieraren skript­mil­jö*. Därefter följer den faktiska PHP-koden i form av satser. I exemplet ovan är detta anropet till­funk­tio­nenp­h­pin­fo*(). De flesta PHP-funk­tio­ner kräver en eller flera pa­ra­met­rar, som omges av pa­ren­te­ser. Förp­h­pin­fo () är dessa pa­ra­met­rar valfria:phpinfo(INFO_ALL). Varje sats avslutas med ett semikolon (;). För att avsluta skriptet använder du den av­slu­tan­de PHP-taggen:?>.

De­fi­ni­tion

Funk­tio­ner är subru­ti­ner som gör det möjligt att outsourca delar av pro­gram­ko­den. För att undvika upp­rep­ning­ar kan åter­kom­man­de uppgifter de­fi­nie­ras en gång som en funktion och sedan anropas med hjälp av ett funk­tions­namn. Web­b­ut­veck­la­re använder för­de­fi­ni­e­ra­de PHP-funk­tio­ner för detta ändamål eller skapar egna subru­ti­ner.

Spara textfilen under namnet test i formatet .php (PHP-skript) och starta din webb­ser­ver. Om du använder test­mil­jön XAMPP sparar du test.php i XAMPP-katalogen under htdocs (C:\xampp\htdocs).

Du kan komma åt ex­em­pel­fi­len via följande URL i webb­lä­sa­ren: http://localhost/test.php. Om du använder en al­ter­na­tiv webb­ser­ver eller en in­di­vi­du­ell kon­fi­gu­ra­tion av XAMPP-pro­gram­va­ran, välj URL:en enligt re­spek­ti­ve filväg.

När du anger URL http://localhost/test.php uppmanar du webb­lä­sa­ren att begära filen test.php från webb­ser­vern. Apache HTTP-servern (eller vilken typ av webb­ser­ver­pro­gram­va­ra du än använder) hämtar filen i rätt katalog. Fi­län­del­sen .php betyder att filen in­ne­hål­ler PHP-kod. Vid denna punkt aktiveras PHP-tolken som är in­te­gre­rad i webb­ser­vern. Den bearbetar do­ku­men­tet och stöter på den inledande PHP-taggen <?php, som sig­na­le­rar att PHP-koden ska startas. Tolken fort­sät­ter med att exekvera PHP-koden och genererar HTML-utdata som webb­ser­vern överför till webb­lä­sa­ren för visning. Om PHP har in­stal­le­rats korrekt kommer ex­e­kve­ring­en av skriptet att resultera i följande webbsida:

Bild: The PHP function phpinfo()
When a script is executed using the *phpinfo()* function, the browser displays in­for­ma­tion about the PHP con­fi­gu­ra­tion.

Funk­tio­nen phpinfo() är en för­kort­ning för stan­dard­funk­tio­nen phpinfo( INFO_ALL ). Denna funktion visar de­tal­je­rad in­for­ma­tion om PHP-kon­fi­gu­ra­tio­nen på din webb­ser­ver. Om ingen PHP-version kan hittas visar webb­lä­sa­ren ett fel­med­de­lan­de eller levererar PHP-koden till webb­lä­sa­ren utan att tolka den.

”Hello World!” – Hur man skriver ut text med echo

När du har in­stal­le­rat PHP är det dags att skriva ditt första skript. Du kan använda PHP echo för att göra detta. Till skillnad från phpinfo() är echo inte en funktion. Det är snarare en språk­kon­truk­tion som gör det möjligt att skriva ut en ef­ter­föl­jan­de sträng som text.

De­fi­ni­tion

Språk­kon­truk­tio­ner är satser som används i PHP för att styra pro­gram­flö­det. Förutom echo finns det språk­kon­truk­tio­ner som if, for, do, include, return, exit eller the. Till skillnad från funk­tio­ner behövs inga pa­ren­te­ser.

För ditt första anpassade skript skapar du en ny PHP-fil och anger följande kod:

<?php
echo 'Hello World!';
?>
php

Öpp­ningstag­gen <?php startar en skript­mil­jö. Den följs av språk­kon­truk­tio­nen echo och strängen Hello World!, som är omgiven av enkla citat­tec­ken. Använd taggen ?> för att avsluta skriptet. Observera se­mi­ko­lo­net efter satsen. Vilken text som helst kan användas istället för Hello World!.

Spara skriptet som hello.php i katalogen htdocs på din webb­ser­ver. Öppna sedan filen med URL http://localhost/hello.php i din webb­lä­sa­re. Om koden har överförts korrekt ska webb­lä­sar­fönst­ret visa den sträng du använde:

Bild: Text output with language construct echo
The language construct *echo* instructs the web server to output the string *Hello World!*

All text som du genererar med echo kan innehålla HTML-taggar efter behov. Dessa taggar tolkas av webb­lä­sa­ren i enlighet med HTML-spe­ci­fi­ka­tio­ner­na. Testa detta koncept med hjälp av följande skript, till exempel:

<?php
echo '<h1>Hello World!</h1>
<p>This is my first PHP page.</p>';
?>
php

När det anropas i webb­lä­sa­ren visas re­sul­ta­tet av skriptets körning enligt följande.

Bild: Result of script execution with HTML tags
If the result of the script execution contains HTML tags, they’ll au­to­ma­ti­cal­ly be in­ter­pre­ted by the web browser.

Texten Hello World!, som är in­ne­slu­ten i <h1> taggar, tolkas av webb­lä­sa­ren som en primär rubrik. Detta följs av ett au­to­ma­tiskt rad­bryt­ning och text­styc­ket mellan <p>-taggarna.

Beroende på dina behov kan du använda echo med antingen enkla citat­tec­ken () eller dubbla citat­tec­ken (). Om du bara skriver ut text spelar valet av citat­tec­ken ingen roll. Denna skillnad blir dock be­ty­del­se­full när du hanterar PHP-variabler.

Variabler

Echo-språk­kon­truk­tio­nen erbjuder mer än bara textvis­ning. Text­pre­sen­ta­tion kan redan utföras effektivt med hjälp av HTML. Den verkliga fördelen med att använda PHP-språk­kon­truk­tio­nen echo ligger i dess förmåga att dynamiskt producera text med hjälp av variabler.

PHP-användare stöter ofta på variabler i följande format: $example

Varje variabel består av ett dollar­tec­ken ($) följt av va­ri­a­bel­nam­net. Variabler används i PHP-skript för att införliva extern data i webbsidor. De kan omfatta olika typer av värden, från grund­läg­gan­de siffror och strängar till kompletta texter eller HTML-do­ku­mentstruk­tu­rer. PHP skiljer mellan sju olika variabla typer:

Va­ri­a­bel­typ Be­skriv­ning
Sträng En sträng är en sekvens av tecken. Den kan re­pre­sen­te­ra ett ord, en fras, en textbit eller till och med hela HTML-koden för en webbsida.
Heltal Ett heltal är ett heltal utan decimaler. Det kan vara positivt eller negativt.
Flyttal Ett flyttal är ett tal med flyttal. Det är ett numeriskt värde med decimaler. PHP stöder upp till 14 siffror efter de­ci­mal­teck­net.
Boolesk Booleska variabler är re­sul­ta­tet av en logisk operation och har endast två värden: TRUE (sant) och FALSE (falskt). Denna typ av variabel används när man arbetar med villkor.
Array En array är en variabel som kan innehålla flera element. Det är en grup­pe­ring av flera liknande struk­tu­re­ra­de data som har kom­bi­ne­rats till en array.
Objekt Va­ri­a­bel­ty­pen objekt gör det möjligt för pro­gram­me­ra­re att definiera sina egna datatyper. Den används i ob­jek­t­o­ri­en­te­rad pro­gram­me­ring. Vi har in­klu­de­rat ob­jekt­va­ri­ab­ler i denna PHP-hand­led­ning.
NULL Värdet NULL re­pre­sen­te­rar en variabel utan värde. För variabler av denna typ är NULL det enda möjliga värdet.

Cent­ra­li­se­ring av innehåll hanteras van­ligt­vis via da­ta­bas­sy­stem. Variabla värden kan dock också tilldelas direkt i skriptet. Denna typ av till­del­ning använder följande mönster:

$example = "value";
php

Dollar­teck­net följs av va­ri­a­bel­nam­net (i detta fall example). Det är kopplat till ett värde inom dubbla citat­tec­ken med hjälp av lik­hets­teck­net (=). Va­ri­a­bel­vär­den av typen heltal och flyttal skrivs utan citat­tec­ken (till exempel $example = 24;och $example= 2.7;).

PHP erbjuder flex­i­bi­li­tet när det gäller att namnge variabler. Vissa be­gräns­ning­ar gäller dock:

  • Varje variabel börjar med ett dollar­tec­ken.
  • Ett va­ri­a­bel­namn är en sträng av bokstäver, siffror och un­der­streck (till exempel $example_1).
  • Ett giltigt va­ri­a­bel­namn börjar alltid med en bokstav eller ett un­der­streck ($example1 eller $_example), aldrig med en siffra (fel: $1example).
  • PHP är skift­lä­ges­käns­ligt. Skript­språ­ket skiljer mellan stora och små bokstäver ($example ≠ $Example).
  • Va­ri­a­bel­nam­net får inte innehålla mel­lanslag eller rad­bryt­ning­ar (fel: $example 1).
  • Strängar som är re­ser­ve­ra­de av PHP för andra ändamål kan inte användas som an­vän­dar­de­fi­ni­e­ra­de variabler (t.ex.$this).

Låt oss il­lu­stre­ra detta med ett exempel:

<?php
$author = "John Doe";
echo "<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author.</p>";
?>
php

Den inledande PHP-taggen följs av de­fi­ni­tio­nen av variabeln. I detta fall tilldelas $author värdet John Doe. Vid skrip­tex­e­kve­ring ersätts varje förekomst av variabeln $author i skriptet med värdet John Doe i skript­mil­jön. En visuell re­pre­sen­ta­tion av denna process i webb­lä­sa­ren il­lu­stre­ras i följande diagram:

Bild: Dynamic text generation with variables
As a result of script execution, the variable $author was assigned the value John Doe

Om webbsidan ska till­skri­vas Max Mus­ter­mann, John Does tyska kollega, och inte John Doe, kan du åtgärda detta genom att ändra variabeln $author.

Bild: Variables are used to create web pages dynamically
For the variable $author, the value Max Mus­ter­mann is used.

Detta är särskilt effektivt om en variabel fö­re­kom­mer flera gånger i ett skript. I detta fall behöver kor­ri­ge­ring­en endast göras på ett enda ställe, nämligen där va­ri­a­belns värde de­fi­nie­ras.

Detta il­lu­stre­rar PHP:s förmåga: innehåll kan bäddas in med hjälp av variabler. Denna egenskap utgör grunden för dynamisk web­b­ut­veck­ling. Till skillnad från statiska webbsidor, som finns som för­ren­de­ra­de HTML-sidor, genereras dynamiska webbsidor först när sidan öppnas. PHP-tolken hämtar olika element från den begärda webbsidan från olika databaser via variabler och sam­man­stäl­ler dem till en skräd­dar­sydd HTML-sida som över­ens­stäm­mer med den specifika begäran.

För­de­lar­na med detta till­vä­ga­gångs­sätt är uppenbara. När delar av webb­plat­sen (t.ex. i sidfoten) ändras behöver man inte göra manuella ju­ste­ring­ar på varje enskild undersida. Det räcker med att uppdatera mot­sva­ran­de post i databasen. Som ett resultat tillämpas änd­ring­ar­na au­to­ma­tiskt på alla webbsidor som in­ne­hål­ler relevanta data som variabler. Om en variabel de­fi­nie­ras flera gånger i ett skript, ersätter den nya de­fi­ni­tio­nen den tidigare. En ef­ter­föl­jan­de echo-kommando visar alltid det aktuella värdet för en variabel.

<?php
$author = "John Doe";
echo "<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author.</p>";
$author = "Max Mustermann";
echo " <p>Supported by $author.</p>";
?>
php
Bild: Overwriting variables
The value John Doe is over­writ­ten with the value Max Mus­ter­mann

I ko­dex­emp­let till­de­la­des variabeln $author först värdet John Doe och ersattes sedan med värdet Max Mus­ter­mann.

Nu över till ämnet citat­tec­ken. Till skillnad från strängar behöver enskilda variabler inte omges av citat­tec­ken:

<?php
$author = "John Doe";
echo $author;
?>
php

Förutom när variabeln behöver användas inom en sträng. I detta fall använder du dubbla citat­tec­ken (). Detta in­stru­e­rar PHP-tolken att söka igenom strängen efter variabler och ersätta dem med mot­sva­ran­de värden efter behov. Strängar som omges av enkla citat­tec­ken () tolkas och återges som vanlig tex­tin­for­ma­tion, även när de in­ne­hål­ler variabler.

<?php
$author = "John Doe";
echo '<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author.</p>';
?>
php
Bild: Plain text output with single quotes
Single quotes result in plain text output. Variables are not in­ter­pre­ted.

Du undrar kanske vad som händer om du utelämnar citat­teck­nen helt och hållet. I så fall pekar PHP på ett syn­tak­tiskt fel.

Fel­med­de­lan­den och maskering

Om syn­tak­tis­ka fel uppstår finns det ingen giltig PHP-kod och PHP-tolken ger ett fel­med­de­lan­de. Detta kan till exempel förväntas om du använder echo-satsen med en sträng utan citat­tec­ken:

<?php
echo Hello World!;
?>
php

Fel­med­de­lan­den in­ne­hål­ler i de flesta fall in­for­ma­tion om var ett fel har uppstått, vilket ger viktig in­for­ma­tion om hur man kan åtgärda det.

Bild: Error message from web browser: Parse error
An error message indicates syn­tacti­cal errors in the program code.

I det aktuella exemplet misstänks ett fel i rad 2 i vår pro­gram­kod. Det är precis där vi ute­läm­na­de citat­teck­nen.

Syntaxfel uppstår också när du vill skriva ut tecken som är as­so­ci­e­ra­de med en specifik uppgift i PHP. Ett exempel på detta är citat­teck­net (). Tecken som detta kan endast skrivas ut som text i PHP om du anger för tolken att tecknets in­ne­bo­en­de funktion har ne­ut­ra­li­se­rats. När det gäller enkla citat­tec­ken finns det två sätt att göra detta. Du kan omge en sträng med enkla citat­tec­ken med dubbla citat­tec­ken, eller så kan du maskera citat­teck­nen med en fö­re­gå­en­de bakåtslag (\):

<?php
echo '\'Hello World!\' ';
?>
php
Bild: The backslash as a masking character
If cha­rac­ters are masked with a backslash, they are stripped of their function in the PHP syntax.

Att kombinera enkla och dubbla citat­tec­ken är också en bra metod:

<?php
echo " 'Hello World!' ";
?>
php

Men inte denna stavning:

<?php
echo ' 'Hello World!' ';
?>
php

Mel­lansla­gen mellan citat­teck­nen har införts i exemplen för att un­der­lät­ta läs­bar­he­ten.

Kon­ka­te­ne­rings­o­pe­ra­to­rer

För att mata ut flera variabler samtidigt i ett PHP-skript kan du använda det du har lärt dig hittills och göra följande:

<?php
$author1 = "John Doe";
$author2 = "Max Mustermann";
echo "<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author1 and $author2.</p>";
?>
php

Skriv bara in båda va­ri­ab­ler­na i den dubbla citat­teck­nen till­sam­mans med resten av texten som ska skrivas ut. PHP känner au­to­ma­tiskt igen va­ri­ab­ler­na genom dollar­teck­net ($) och infogar rätt värden.

Bild: Text output with two variables
Variables in the string are only accepted by PHP if the script does not contain functions.

Bland pro­gram­me­ra­re anses dock denna procedur vara otill­bör­lig. Det finns en pro­gram­me­rings­re­gel som säger att variabler inte ska ingå i strängen. En anledning till detta är att många pro­gram­me­rings­språk kräver denna se­pa­re­ring. Ännu viktigare är att PHP också kräver att du separerar strängar och variabler när du arbetar med funk­tions­an­rop eller mer komplexa variabler. På grund av detta är det bäst att hålla dem se­pa­re­ra­de även i vanlig tex­tut­mat­ning, även om det inte är absolut nöd­vän­digt i detta fall.

När du arbetar med variabler måste du alltid hantera flera element som måste sam­man­fo­gas under ut­mat­ning­en. I PHP används sam­man­fog­nings­o­pe­ra­torn (.) för detta ändamål. Om den pro­gram­me­ras “rent” bör koden för ovanstå­en­de exempel se ut så här:

<?php
$author1 = "John Doe";
$author2 = "Max Mustermann";
echo '<h1>Hello World!</h1> 
<p>This dynamic web page was created by ' . $author1 . ' and ' . $author2 . '.</p>';
?>
php
Bild: Connecting strings and variables with concatenation operators
Con­ca­te­na­tion operators connect strings and variables

Här har vi tre strängar och två variabler som har sam­man­fo­gats till en sträng.

Sträng1 Variabel1 Sträng2 Variabel2 Sträng3
’<h1>Hello World!</h1> <p>Denna dynamiska webbsida skapades av ’ . $author1 . ’ och ’ . $author2 . ’.</p>’

Det är viktigt att nämna att en sam­man­fog­nings­o­pe­ra­tor sam­man­fo­gar strängar eller variabler utan att infoga mel­lanslag. Om ett mel­lanslag är avsett måste det ut­tryck­li­gen in­klu­de­ras inom citat­teck­nen i strängen, som visas i exemplet.

Pro­gram­me­ra­re använder sam­man­fog­nings­o­pe­ra­torn inte bara för att kombinera strängar och variabler för tex­tut­mat­ning, utan också för att utöka variabler. Följande exempel il­lu­stre­rar hur detta görs:

<?php
$example = 'Hello ';
$ example .= 'World';
echo $ example;
?>
php

För att utöka värdet på en variabel de­fi­ni­e­rar du den igen, men placerar sam­man­fog­nings­o­pe­ra­torn punkt (.) före lik­hets­teck­net. Detta är den vanliga för­kort­ning­en för $example = $example . ‘world’.

PHP lägger till det nya värdet till det tidigare de­fi­ni­e­ra­de. Om du vill ha ett mel­lanslag mellan de två värdena skriver du det i slutet av den första strängen, som i exemplet.

Bild: Extending the value of a variable
The string Hello has been extended to Hello World

Bädda in PHP i HTML

I princip är PHP-tolken endast in­tres­se­rad av kod som finns mellan en öppnande och en stängande PHP-tagg:

<?php [This section is parsed by the PHP interpreter] ?>

Tolken ignorerar alla åter­stå­en­de delar av do­ku­men­tet och vi­da­re­be­ford­rar dem till webb­ser­vern utan att ändra dem. Som ett resultat kan PHP-kod smidigt in­för­li­vas i HTML-dokument efter behov, till exempel när man skapar mallar för in­ne­hålls­han­te­rings­sy­stem. Det är viktigt att spara HTML-dokument som in­ne­hål­ler PHP-kod med fi­län­del­sen PHP. Annars kommer do­ku­men­tet att visas direkt i webb­lä­sa­ren utan att för­be­hand­las av PHP-tolken. Detta skulle leda till att koden visas som text på webb­plat­sen.

Du kan tänka på PHP-tolken som webb­ser­verns lata kollega, som bara arbetar när den ut­tryck­li­gen ombeds att göra det, t.ex. genom en öppnande PHP-tagg.

För att kombinera HTML och PHP skriver du din HTML-sida i den klassiska do­ku­mentstruk­tu­ren och sparar den med fi­län­del­sen .php:

<html lang="de">
    <head>
        <meta charset="utf-8">
        <title>My first PHP page</title>
    </head>
        <body>
    <h1>Hello World</h1>
    <p>What is the current time and date?</p>
    </body>
</html>
html

Lägg nu till ett PHP-skript i ditt HTML-dokument. Se till att all kod finns inom PHP-taggarna.

<html lang="de">
    <head>
        <meta charset="utf-8">
        <title>My first PHP page</title>
    </head>
    <body>
    <h1>Hello World</h1>
    <p>What is the current time and date?</p>
    <p>Your current time and date is: 
    <?php 
    echo date("d.m.Y H:i:s");
    ?>.</p>
    </body>
</html>
html

I det här fallet har vi kom­bi­ne­rat språk­kon­truk­tio­nen echo med PHP-funk­tio­nen date() för att visa aktuellt datum och tid som ser­ver­text. Funk­tio­nens parameter anger önskat format, angivet som en sträng:

d.m.Y H:i:s = dag.månad.år timme:minut:sekund.

När en webb­lä­sa­re begär en sådan fil kör PHP-tolken först skriptet och bäddar in aktuell tid som text i HTML-do­ku­men­tet. Därefter överför webb­ser­vern detta dokument, som sedan visas i webb­lä­sa­ren som en webbsida.

Bild: Integration of PHP in HTML
The HTML document contains an in­teg­ra­ted PHP script that outputs the current date including time.

PHP-kom­men­tar­funk­tion

Precis som i HTML-kod kan du också lägga in kom­men­ta­rer i din PHP-kod. Kom­men­ta­rer i källkoden ignoreras av PHP-tolken så länge de följer syn­tax­reg­ler­na. PHP erbjuder tre olika metoder för att lägga in kom­men­ta­rer.

För att markera en hel rad som kommentar och därmed utesluta den från tolkning kan du antingen använda hash­tag­gen (#) eller två på varandra följande sned­streck (//). Båda al­ter­na­ti­ven används i följande ko­dex­em­pel:

<?php
#This is a single-line comment!
echo '<h1>Hello World!</h1>
<p>This is my first PHP page.</p>';
//This is also a single-line comment!
?>
php

Tex­tre­di­ge­ra­ren Notepad++ markerar kom­men­ta­rer med grönt. Till skillnad från HTML-kom­men­ta­rer når textav­snitt som är märkta som kom­men­ta­rer inom skript­mil­jön inte webb­lä­sa­ren. Denna skillnad uppstår eftersom PHP-tolken redan ignorerar dem under skriptets körning.

Bild: Single-line comments
Lines marked as comments are not visible in the output.

Dessutom kan du infoga kom­men­ta­rer som sträcker sig över flera rader. För att göra detta markerar du början på en kom­men­tar­sek­tion med ett sned­streck följt av en asterisk (/*) och slutet med en asterisk följt av ett sned­streck (*/).

<?php
/*
This is a multiple-line comment block
that spans over multiple
lines
*/
echo '<h1>Hello World!</h1>
<p>This is my first PHP page.</p>';
?>
php

Sådana kom­men­ta­rer ana­ly­se­ras inte och visas inte på webb­plat­sen.

Bild: Example of a multiline comment
The multiline comment is not visible in the output.

Pro­gram­me­ra­re använder kom­men­ta­rer för att struk­tu­re­ra källkoden i sina skript, lämna an­teck­ning­ar för senare re­di­ge­ring eller lägga till intern in­for­ma­tion till byggnaden, såsom för­fat­ta­re eller datum. Kom­men­ta­rer är valfria och bör användas sparsamt för att sä­ker­stäl­la god läsbarhet av källkoden.

Be­räk­ning­ar med variabler

I vår PHP-hand­led­ning har du redan stött på variabler, främst sådana som in­ne­hål­ler sträng­vär­den. Nu ska vi fördjupa oss i variabler som re­pre­sen­te­rar heltal eller flyttal. När variabler lagrar numeriska värden tillåter PHP att be­räk­ning­ar utförs med dem. Låt oss börja med att lägga till två heltal:

<?php
$number1 = 237;
$number2 = 148;
$result = $number1 + $number2;
echo "result: " . $result;
?>
php

Först tilldelar vi heltal 237 och 148 till va­ri­ab­ler­na $number1 och $number2 och de­fi­ni­e­rar sedan variabeln $result. Den används för att lagra summan av va­ri­ab­ler­na $number1 och $number2. För denna operation använder vi den arit­me­tis­ka operatorn +(plus). Slutligen skriver vi ut summan som text med hjälp av språkkontruktionen echo. Observera att du inte behöver använda citat­tec­ken när du tilldelar numeriska värden till variabler.

Bild: Addition of integers using a PHP script
The result of the addition is output as text in the web browser.

Följande ko­dex­em­pel visar ett urval av ma­te­ma­tis­ka be­räk­ning­ar som kan utföras på ser­ver­si­dan med PHP. De PHP-ope­ra­to­rer som används motsvarar till största delen stan­dard­ma­te­ma­tis­ka symboler.

Arit­me­tisk operator Operation Resultat
$tal1 + $tal2 Addition Summan av $nummer1 och $nummer2
$nummer1 - $nummer2 Sub­trak­tion Skill­na­den mellan $nummer1 och $nummer2
$nummer1 *$nummer2 Mul­ti­pli­ka­tion Produktet av $nummer1 och $nummer2
$nummer1 / $nummer2 Division Kvot av $nummer1 och $nummer2
$nummer1 **$nummer2 Potens $nummer2-te potens av $nummer1
<?php
$number1 = 10;
$number2 = 5;
$addition = $number1 + $number2; //addition
$subtraction = $number1 - $number2; //subtraction
$multiplication = $number1 * $number2; //multiplication
$division = $number1 / $number2; //division
$power = $number1 ** $number2; //power
?>
php
<?php 
echo "Result of addition: " . $addition ."<br />"; 
echo "Result of subtraction: " . $subtraction . "<br />"; 
echo "Result of multiplication: " . $multiplication . "<br />";
echo "Result of division: " . $division . "<br />";
echo "10 to the 5th power (10^5): " . $power . "<br />";
echo "root of 81: " . sqrt(81) . "<br />";
?>
php
Bild: Calculating with variables
Arith­me­tic ope­ra­tions at a glance

För komplexa be­räk­ning­ar kan olika arit­me­tis­ka ope­ra­tio­ner kom­bi­ne­ras i ett skript:

<?php
$number1 = 10;
$number2 = 5;
$result = 2 *$number1 + 5* $number2 - 3 * sqrt(81);
echo "Result: " . $result; 
?>
php

PHP-tolken bestämmer va­ri­ab­ler­nas värden och beräknar:

2 *10 + 5* 5 - 3 * √81 = 20 + 25 - 27 = 18

Funk­tio­nen sqrt() beräknar kvadra­tro­ten av pa­ra­me­tern inom parentes. Den klassiska ope­ra­tor­rang­ord­ning­en inom ma­te­ma­ti­ken gäller: punkt före streck. In­struk­tio­nen echo visar re­sul­ta­tet som en sträng för webb­lä­sa­ren.

Bild: Mathematical calculation with two variables and different arithmetic operators
PHP follows the dot-before-dash rule.

PHP ut­vär­de­rar också termer inom parentes först. Den här gången ska vi arbeta med flyttal:

<?php
$number1 = 2.5;
$number2 = 3.7;
$result = 2 *($number1 + 5)* ($number2 - 3) * sqrt(81);
echo "Result: " . $result; 
?>
php
Bild: Calculation with floating point numbers and bracketed terms
PHP cal­cu­la­tion with the result 94.5

Liksom alla vanliga pro­gram­me­rings­språk tillåter PHP ope­ra­tö­rer att öka eller minska numeriska värden med värdet 1. Man skiljer mellan pre-in­kre­men­te­rings­o­pe­ra­tö­ren, pre-de­kre­men­te­rings­o­pe­ra­tö­ren, post-in­kre­men­te­rings­o­pe­ra­tö­ren och post-de­kre­men­te­rings­o­pe­ra­tö­ren.

Drift Operatör Resultat
Förinkre­men­te­ring ++$nummer Operatorn ++ in­kre­men­te­rar värdet på variabeln $nummer. Värdet in­kre­men­te­ras med 1. Re­sul­ta­tet re­tur­ne­ras som det nya värdet för $nummer.
För­minsk­ning –$nummer Operatorn minskar värdet på variabeln $number. Detta minskar värdet med 1. Re­sul­ta­tet re­tur­ne­ras som det nya värdet för $number.
Ef­terinkre­men­te­ring $number Det aktuella värdet för $number re­tur­ne­ras först och ökas sedan med 1.
Ef­ter­minsk­ning $number– Det aktuella värdet av $number re­tur­ne­ras först och sedan minskas det med värdet 1.

Först ska vi il­lu­stre­ra hur man utför arit­me­tis­ka ope­ra­tio­ner med in­kre­men­te­rings- och de­kre­men­te­rings­o­pe­ra­to­rer genom att ge ett exempel med pre­inkre­men­te­ring. Följande skript in­kre­men­te­rar värdet på variabeln $number med 1, lagrar det nya värdet i variabeln $result och skriver sedan ut dess värde som en sträng:

<?php
$number = 0;
$result = ++$number;
echo "Result: " . $result;
?>
php

Om du ökar värdet 0 med 1 får du re­sul­ta­tet 1.

Bild: Pre-increment the number 0
The ++ operator incre­ments 0 by the value 1.

För att beräkna för­minsk­ning­en av variabeln $number använder vi samma skript, men byter ut för­ök­ningo­pe­ra­torn (++) mot för­minsk­nings­o­pe­ra­torn ():

<?php
$number = 0;
$result = --$number;
echo "Result: " . $result;
?>
php

Här minskar vi värdet 0 för variabeln $number och får re­sul­ta­tet -1.

Bild: Pre-decrement the number 0
The operator -- decre­ments the number 0 by the value 1

En ökning före och efter utdata (före vs. efter…) av ett värde kan visas med följande skript:

<?php
$x = 0;
echo '<p>result: ' . ++$x;
echo '<br>x has the value ' . $x;
echo '<p>result: ' . $x++;
echo '<br>x has the value ' . $x, '</p>';
?>
php

I båda fallen får vi samma resultat. Med förinkre­men­te­ring ökas värdet på x före ut­mat­ning­en i rad 3, medan det med ef­terinkre­men­te­ring ökas efter ut­mat­ning­en i rad 5.

Bild: The difference between pre- and post-incrementations
Pre- and post-incre­men­ta­tions in com­pa­ri­son

Hur man använder su­perglo­ba­la va­ri­ab­ler­na $_GET och $_POST

Du är nu bekant med PHP:s grunder. Du kan arbeta med variabler, sam­man­fo­ga och utföra be­räk­ning­ar. Nästa steg är att il­lu­stre­ra va­ri­ab­ler­nas centrala roll i skript­språk.

En viktig funktion hos skript­språk är deras förmåga att utvärdera an­vän­da­rin­mat­ning och överföra värdena till ett annat skript. PHP förlitar sig på su­perglo­ba­la va­ri­ab­ler­na $_GET och$_POST –för­de­fi­ni­e­ra­de system­va­ri­ab­ler som är till­gäng­li­gai alla om­fatt­ning­ar – för da­taö­ver­fö­ring. Som as­so­ci­a­ti­va matriser (datafält) lagrar*$_GET och $_POST* en upp­sätt­ning variabler i form av strängar i en variabel.

PHP-matriser kan liknas vid ett skåp med flera lådor. Varje låda har ett utrymme för lagring av data. För att hålla ordning på in­ne­hål­let i varje låda märker du dem med ett va­ri­a­bel­namn. Beroende på matristyp kan denna iden­ti­fi­e­ra­re vara ett index eller en nyckel. I in­dex­e­ra­de matriser tilldelar du varje låda ett numeriskt index, medan du i as­so­ci­a­ti­va matriser märker lådorna med en sträng­ba­se­rad nyckel.

Su­perglo­bals $_GET och $_POST omfattar en samling variabler som re­pre­sen­te­ras som nycklar, vilket möjliggör åtkomst till mot­sva­ran­de värden. Vi kommer att fördjupa oss i detta när vi utforskar su­perglo­bals $_GET och $_POST mer ingående.

Da­taö­ver­fö­ring via $_GET

Den su­perglo­ba­la $_GET re­pre­sen­te­rar en array av variabler som skickas till ett PHP-skript med hjälp av en URL.

Om du till­bring­ar tid på bloggar,ionli­ne­bu­ti­ker ochpå in­ter­net­fo­rum har du kanske lagt märke till några konstiga web­ba­dres­ser. Van­ligt­vis är de uppbyggda enligt följande schema:

http://hostname/ordner/filename.php?variablenname=variablevalue

För en blogg kan schemat se ut så här:

http://www.example-blog.com/index.php?id=1

Det är relativt enkelt att bryta ner en sådan URL. På en webb­ser­ver som har domänen example-blog.com finns en fil som heter index.php. Denna fil används för att skapa dynamiska webbsidor och in­ne­hål­ler van­ligt­vis HTML- och PHP-kod, till­sam­mans med re­fe­ren­ser till externa mallfiler och stil­mal­lar – i princip alla kom­po­nen­ter som behövs för att visa webbsidor.

Tillägget id=1 ien URL är ett vanligt sätt att avgöra om en webbsida är dynamisk. Du hittar detta efter frå­ge­teck­net (?) i en URL. Denna komponent kallas HTTP-frå gesträng och in­ne­hål­ler en variabel (id) och ett värde (1), som är länkade med ett lik­hets­tec­ken (=). URL-pa­ra­met­rar av detta slag används för att generera dynamiska webbsidor, hämta da­ta­ba­s­in­ne­håll och aktivera lämpliga mallar.

Dynamiska webb­plat­ser möjliggör se­pa­re­ring av innehåll och pre­sen­ta­tion. Även om index.php in­ne­hål­ler in­for­ma­tion om en webbplats struktur måste den fort­fa­ran­de fyllas med innehåll. Detta lagras van­ligt­vis i en databas och kan nås med hjälp av pa­ra­met­rar i HTTP-frå­ge­sträng­en. I exemplet skickar URL:en till index.php pa­ra­me­tern id=1. Detta anger vilket innehåll som ska läsas från databasen och laddas in i index.php. I en blogg kan det vara ID-numret för en artikel, i ett forum ett visst inlägg. I en webbutik kan det vara en specifik produkt.

Om en URL in­ne­hål­ler mer än en parameter, kopplas dessa samman med ett ampersand-tecken (&).

www.example-blog.com/index.php?page=article&id=1

Nedan visar vi hur du använder $_GET. I det här exemplet behöver du inte använda någon databas. I följande skript använder vi su­perglo­ba­la $_GET för att läsa värdena för va­ri­ab­ler­nafirstname och lastname från en HTTP-frå­ge­sträng och skriva dem till PHP-va­ri­ab­ler­na $variable1 och $variable2:

<?php
$variable1 = $_GET['firstname'];
$variable2 = $_GET['lastname'];
echo "Hello " . $variable1 . " " . $variable2 . "!";
?>
php

Skriptet anropas via följande URL:

localhost/hello.php?firstname=John&lastname=Doe.

Pa­ra­met­rar­nafirstname=John och lastname=Doe har överförts. Värdena visas precis som tidigare med hjälp av språk­kon­truk­tio­nen echo.

Bild: Data being passed using $_GET
The URL pa­ra­me­ters pass the variable value pairs firstname=John and lastname=Doe to the PHP script.

En da­taö­ver­fö­ring via $_GET leder ound­vik­li­gen till att den överförda datan syns i adress­fäl­tet. Detta innebär att pa­ra­met­rar som har överförts kan spåras. Fördelen är att variabler kan lagras i hy­per­län­kar. Dessutom har an­vän­dar­na möjlighet att spara URL:er inklusive HTTP-frå­ge­sträng­en som bokmärken i sin webb­lä­sa­re.

Det faktum att GET-pa­ra­met­rar­na listas i klartext i URL:en gör dock denna metod oförenlig med över­fö­ring av känslig data, såsom data som genereras av on­li­ne­for­mu­lär. Dessutom begränsas mängden data som kan överföras med $_GET av URL:ens maximala längd.

Du kan kringgå dessa be­gräns­ning­ar med HTTP-metoden POST. Data som överförs med denna metod finns i su­perglo­ba­la variabeln $_POST.

Da­taö­ver­fö­ring via $_POST

Medan data i GET-metoden skickas som en URL-parameter, sker da­taö­ver­fö­ring­en med $_POST i kroppen av en HTTP-begäran. Detta gör det möjligt att även skicka stora mängder data från ett skript till ett annat.

Ett centralt an­vänd­nings­om­rå­de för HTTP POST-metoden är över­fö­ring av HTML-for­mu­lär­da­ta. Vi kommer att de­mon­stre­ra detta med hjälp av exemplet med pre­nu­me­ra­tion på ny­hets­brev.

För att göra detta skapar du en ny PHP-fil med namnet page1.php och kopierar följande kodblock:

<form method="post" action="page2.php" >
Please send your newsletter to: <br />
Your name: <input type="text" name="first name" /><br />
Your surname: <input type="text" name="lastname" /><br />
Your email address: <input type="text" name="email" /><br />
<input type="submit" value="Send form" />
</form>
php

HTML-elementet <form> används för att skapa formulär. Start­tag­gen in­ne­hål­ler två attribut:method och action. Med at­tri­bu­tet method de­fi­ni­e­rar du över­fö­rings­me­to­den, i detta fall HTTP-POST. I at­tri­bu­tet action lagrar du URL:en till ett skript som tar emot all data som matas in via ef­ter­föl­jan­de in­mat­nings­fält. Exemplet visar ett HTML-formulär med tre in­mat­ning­s­e­le­ment (input type=“text “) och en skicka-knapp (input type=“submit “). Filen page2.php de­fi­nie­ras som mottagare av data.

För att il­lu­stre­ra da­taö­ver­fö­ring­en med $_POST använder vi ett enkelt skript för att utvärdera for­mu­lär­da­ta, som lagrar de in­skic­ka­de värdena som PHP-variabler och visar dem i textform. För att göra detta skapar du en fil page2.php och infogar följande pro­gram­kod:

<?php
$name = $_POST["name"];
$surname = $_POST["lastname"];
$email = $_POST["email"]; 
echo "Hello " . name . " " . $lastname . ", <br /> 
You have registered with the following e-mail address:" . $email . ".";
?>
php

Spara de två PHP-filerna i mappen htdocs på din test­ser­ver och öppna page1.php från följande URL i din webb­lä­sa­re: http://localhost/page1.php. Din webb­lä­sa­re visar nu det in­ter­ak­ti­va webb­gräns­snit­tet för ditt HTML-formulär.

Bild: Data input via HTML form
The HTML form page1.php collects user data and sends it to the script with the address page2.php

Ange dina in­logg­nings­upp­gif­ter och tryck på knappen Skicka för att överföra variabler från ett skript till ett annat. När du har bekräftat in­mat­ning­ar­na på page1.php omdi­ri­ge­ras du ome­del­bart till page2.php. Webb­lä­sar­fönst­ret visar re­sul­ta­tet av skriptets körning baserat på de inmatade upp­gif­ter­na.

Bild: Output of user data
Data transfer with the HTTP POST method and output via echo

An­vän­da­rin­mat­ning som re­gi­stre­ras via in­mat­nings­fäl­ten på page1.php hämtas av page2.php via:

$_POST["input field name"]

Raden $firstname = $_POST[“firstname”] hämtar in­mat­ning­en i in­mat­nings­fäl­tet firstname och lagrar den i variabeln $firstname. Variabeln $firstname kan i sin tur matas ut som en sträng med hjälp av echo.

Hur man använder PHP-jäm­fö­rel­se­o­pe­ra­to­rer och IF-kon­struk­tio­nen

Hittills har vi de­fi­ni­e­rat variabler, överfört dem från ett skript till ett annat och matat ut dem som strängar. I nästa steg lär du dig att koppla körningen av kod­frag­ment till vissa villkor.

Språk­kon­truk­tio­nen if låter dig skriva skript på ett sådant sätt att satser endast träder i kraft när ett villkor som du de­fi­ni­e­rar är uppfyllt, till exempel att rätt lösenord anges.

Villkoren de­fi­nie­ras i PHP enligt följande grund­läg­gan­de ramverk:

<?php
if(expression)
    {
    statement;
    }
?>
php

Detta lyder som följer: Om villkoret som beskrivs i uttrycket är uppfyllt kommer satsen att utföras. Ett villkor är alltid uppfyllt om if-kon­struk­tio­nen re­tur­ne­rar re­sul­ta­tet TRUE (sant). Annars anses det vara FALSE (falskt). I detta fall kommer satsen att hoppas över.

Van­ligt­vis kon­trol­le­rar if-kon­struk­tio­nen om värdet på en variabel motsvarar det som de­fi­ni­e­rats i villkoret. Denna kon­troll­struk­tur re­a­li­se­ras van­ligt­vis på basis av jäm­fö­rel­se­o­pe­ra­to­rer.

Jäm­fö­rel­se­o­pe­ra­to­rer

Jäm­fö­rel­se­o­pe­ra­to­rer används för att formulera villkor som sätter två argument i ett logiskt för­hål­lan­de som kan ut­vär­de­ras som sant (TRUE) eller falskt (FALSE). När jäm­fö­rel­se­o­pe­ra­to­rer används i PHP-kon­troll­struk­tu­rer tillämpas de på två variabler i uttrycket i en if-kon­struk­tion:

if ($a == $b) 
    {
    statement;
    }
php

Språkligt sett är kon­troll­struk­tu­ren följande: om variabeln $a är lika med variabeln $b, så exekveras de satser som de­fi­nie­ras i satsen.

PHP:s jäm­fö­rel­se­o­pe­ra­to­rer baseras på pro­gram­me­rings­språ­ket C och deras notation skiljer sig avsevärt från klassiska ma­te­ma­tis­ka symboler. En översikt finns i tabellen nedan.

Jäm­fö­rel­se­o­pe­ra­tor Be­skriv­ning Villkor
== lika Villkoret är uppfyllt om $a och $b har samma värde.
=== är identisk Villkoret är uppfyllt om $a och $b har samma värde och tillhör samma datatyp. Detta kan il­lu­stre­ras med ett exempel där ett heltal (1) jämförs med en sträng (“1”): 1 == “1” //SANT 1 === “1” //FALSKT För villkor som kräver att två variabler är lika är det bäst att alltid använda re­la­tions­o­pe­ra­torn === (är identisk).
!= är ojämlik Villkoret är uppfyllt om $a och $b har olika värden.
! inte identiska Villkoret är uppfyllt om $a och $b har olika värden eller tillhör olika datatyper.
`< * är mindre än Villkoret är uppfyllt om värdet* $a är mindre än värdet $b*.
*>` är större än Villkoret är uppfyllt om värdet på* $a är större än värdet på $b*.
<= är mindre än eller lika med Villkoret är uppfyllt om värdet på $a är mindre än värdet på $b eller om $a och $b har samma värde.
>= är större än eller lika med Villkoret är uppfyllt om värdet på $a är större än värdet på $b eller om $a och $b har samma värde.

Följande skript bör för­tyd­li­ga denna kon­troll­struk­tur. Två heltal jämförs. Jäm­fö­rel­se­o­pe­ra­torn < (är mindre) används:

<?php
$number1 = 10;
$number2 = 20;
if($number1 < $number2) { 
    echo "The condition is fulfilled";
}
php

Vi de­fi­ni­e­rar va­ri­ab­ler­na $number1 och $number2 och tilldelar dem värdena10 och 20. Därefter ställer vi in ett villkor: om $number1 är mindre än $number2 ska strängen som anges i echo-satsen skrivas ut.

Re­sul­ta­tet av skriptets körning in­ne­hål­ler svaret: 10 är mindre än 20. If-kon­struk­tio­nen re­tur­ne­rar re­sul­ta­tet TRUE. Villkoret är uppfyllt.

Bild: The language construct if in the application
If the condition is met, the statement is executed.

För att definiera satser som exekveras om ett villkor inte är uppfyllt, lägg till språk­kon­truk­tio­nen else till if-satsen för att bilda en if-else-sats i PHP:

<?php
if(condition a)
    {
    statement b;
    }
else 
    {
    statement c
    }
?>
php

Detta skript kon­trol­le­rar om villkor a re­tur­ne­rar TRUE eller FALSE. Om villkor a är uppfyllt (TRUE) exekveras sats b. Om villkor a inte är uppfyllt (FALSE) hoppas sats b över och sats c exekveras istället.

Låt oss utöka vårt skript med else-kon­struk­tio­nen och byta ut jäm­fö­rel­se­o­pe­ra­torn < (är mindre än) mot == (är lika med):

<?php
$number1 = 10;
$number2 = 20;
if($number1 == $number2) 
    { 
    echo "The condition is fulfilled";
    }
else 
    {
    echo "The condition is not fulfilled";
    }
?>
php

Denna gång re­tur­ne­rar if-kon­struk­tio­nen FALSE. Värdet på variabeln $number1 är inte lika med värdet på $number2. Villkoret är inte uppfyllt. Därför exekveras inte satsen som anges under if, utan den som de­fi­nie­ras under else.

Bild: The language construct else in the application
If the condition is not met, the statement defined under else is executed.
Notis

För att koppla ut­fö­ran­det av ett kod­frag­ment till två lika värden används ett dubbelt lik­hets­tec­ken (==) i PHP. Ett enkelt lik­hets­tec­ken (=) används för att tilldela värden till variabler.

Du kan negera villkor genom att sätta ett ut­rops­tec­ken (!) före ett uttryck.

<?php
$number1 = 10;
$number2 = 20;
if ($number1 == $number2) 
    { 
    echo "The numbers are the same.";
    }
if (!($number1 == $number2))
    {
    echo "The numbers are not equal.";
    }
?>
php

Detta exempel belyser villkoret $number1 == $number2 och dess negation. !($number1 == $number2) är lik­vär­digt med ($number1 != $number2).

En praktisk tillämp­ning avifandelse är lö­senords­frå­gan baserad på ett HTML-formulär. Vi kan simulera detta med hjälp av våra PHP-filer page1.php ochpage2.php.

Öppna sidan1.php och klistra in följande kod:

<form action="page2.php" method="post">
Please enter your password: <input type="password" name="password" />
<input type="submit" value="send" />
</form>
php

Struk­tu­ren motsvarar ett tidigare skapat formulär. Denna gång räcker det dock med ett enda in­mat­nings­fält: lö­senords­frå­gan. Precis som tidigare skickas an­vän­da­rens inmatning till skriptet page2.php.

Vi kan anpassa detta med hjälp av följande kod så att lö­senordsin­mat­ning­en jämförs med ett lagrat lösenord:

<?php
$password = $_POST["password"];
if($password=="qwertz123")
    {
    echo "The password was correct";
    }
else
    {
    echo "The password was incorrect";
    }
?>
php

Koden kan förklaras på följande sätt: in­led­nings­vis tilldelar vi variabeln $password ett värde på rad 2, som vi hämtar med hjälp av HTTP POST-metoden. Sedan de­fi­ni­e­rar vi följande kon­troll­struk­tur: if-kon­struk­tio­nen i rad 3 ska kon­trol­le­ra om värdet på variabeln $password matchar strängen qwertz123. Om så är fallet visas strängen Lö­senor­det var korrekt. Om if re­tur­ne­rar re­sul­ta­tet FALSE används else i rad 7 och strängen Lö­senor­det var felaktigt visas.

Nu anropar vi skriptet page1.php via URL:en http://localhost/page1.php.

Bild: Web interface of the HTML form for password query
The HTML form prompts you to enter a password.

Webb­lä­sa­ren visar webbvyn av vårt HTML-formulär för lö­senords­be­gä­ran. Vi anger lö­senor­det quertz123 som de­fi­ni­e­rats i skriptet page2.php och klickar sedan på knappen Skicka.

Bild: The password query was correct
The script confirms that the password that was entered is correct.

Webb­lä­sa­ren omdi­ri­ge­rar oss au­to­ma­tiskt till page2.php medan if-kon­troll­struk­tu­ren jämför vår inmatning med det lagrade lö­senor­det. Re­sul­ta­tet blir*”qwertz123 == qwertz123* är *SANT”*och sedan visas strängen Lö­senor­det var korrekt.

Testa själv för att se vad som händer när du skriver in ett annat lösenord i in­mat­nings­fäl­tet.

Logiska ope­ra­to­rer

Villkor som du de­fi­ni­e­rar med hjälp av jäm­fö­rel­se­o­pe­ra­to­rer i uttrycket i if-kon­struk­tio­nen kan vid behov kom­bi­ne­ras med andra villkor i samma uttryck. PHP använder de logiska ope­ra­to­rer­naAND och OR.

Stark koppling Svagt band Be­skriv­ning
&& OCH Båda villkoren som är kopplade till operatorn måste vara SANT.
*\ \ * OR Endast ett av de två villkoren som är kopplade till operatorn måste vara SANT.

För att kombinera villkor kan du använda tätt bundna och svagt bundna logiska ope­ra­to­rer i PHP. I praktiken ger det ingen märkbar skillnad att använda enbart den ena eller den andra skriv­sät­tet. Om du kom­bi­ne­rar båda skriv­sät­ten kommer du att upptäcka att OR och || är starkare bundna än AND och OR. Dessutom är AND och&& starkare bundna än OR och ||. Detta kan jämföras med rang­ord­ning­en av ope­ra­to­rer som är känd från ma­te­ma­tis­ka ope­ra­to­rer (t.ex. punkt före streck: *är starkare bundet än+).

Lö­senords­frå­gan är ett praktiskt exempel. Van­ligt­vis består in­logg­nings­upp­gif­ter­na av ett hemligt lösenord och ett an­vän­dar­namn. In­logg­ning­en lyckas endast om båda upp­gif­ter­na stämmer överens med de uppgifter som finns lagrade i systemet.

Nu öppnar vi vårt lö­senords­fråge­for­mu­lär igen i Page1.php och lägger till ett in­mat­nings­fält för an­vän­dar­nam­net:

<form action="page2.php" method="post">
Username: <input type="text" name="username" /><br />
Password: <input type="password" name="password" /><br />
<input type="submit" value="Submit" />
</shape>
php

I nästa steg måste vi justera kon­troll­struk­tu­ren för if-kon­struk­tio­nen. Vi använder den logiska operatorn AND för att länka villkoret för lö­senords­frå­gan med ett villkor för an­vän­dar­namns­frå­gan.

<?php
$username = $_POST["username"];
$password = $_POST["password"];
if($username=="John Doe" AND $password=="qwertz123")
    {
    echo "Welcome to the internal area" . $username . "!";
    }
else
    {
    echo "Access failed";
    }
?>
php

I vårt skript page2.php hämtas värdena förusername och password och sparas i va­ri­ab­ler­na $username och $password. Uttrycket inom if-kon­struk­tio­nen in­ne­hål­ler nu två villkor som är kopplade med den logiska operatorn AND. Båda villkoren måste vara uppfyllda (username==“JohnDoe” och $password==“qwertz123”**)för att ifska returnerare­sul­ta­tet TRUE.

När vi hämtar an­vän­dar­nam­net från in­mat­nings­fäl­tet username kan vi använda det direkt i tex­tut­mat­ning­en med hjälp av echo-satsen. Welcome to the internal area följs av värdet i $username. Om någon av de två villkoren inte är uppfyllda blir tex­tut­mat­ning­en: Access failed.

Bild: Password query with two conditions
The script only confirms the correct password entry if both con­di­tions are met.

Logiska ope­ra­to­rer kan kom­bi­ne­ras på valfritt sätt. Tänk på att AND har högre prioritet än OR. Precis som i ma­te­ma­tis­ka ek­va­tio­ner kan du i PHP använda pa­ren­te­ser för att ange prioritet.

Hur man använder loopar (while, for)

Ibland måste ett skript köra igenom en viss del av koden flera gånger innan resten av pro­gram­ko­den exekveras. Pro­gram­me­rings­språk använder begreppet loopar för detta. Det finns tre typer av loopar i PHP:

  • while -slingor
  • do-while -slingor
  • for -slingor

while -slingor

While-slingan är den enklaste typen av slinga i PHP. Här är den grund­läg­gan­de struk­tu­ren:

while (condition)
    {
    loop step and other instructions
    }
php

While-slingan in­stru­e­rar PHP att utföra un­der­ord­na­de satser så länge while-villkoret är uppfyllt. För att göra detta kon­trol­le­rar PHP-tolken villkoret i början av varje sling­ge­nom­gång. Ut­fö­ran­det av den un­der­ord­na­de koden stoppas först när while -villkoret inte längre är uppfyllt.

Denna princip kan il­lu­stre­ras med ett enkelt räk­ne­skript:

<?php
$number = 1;
while ($number <= 10) {
    echo $number++ . "<br />";
    }
?>

Begreppet in­kre­men­te­ring in­tro­du­ce­ra­des i avsnittet Be­räk­ning­ar med variabler i denna hand­led­ning. I det följande skriptet bygger vi vidare på detta begrepp, men med en twist. Denna gång använder vi en po­stinkre­men­te­rings­o­pe­ra­tor. Detta höjer värdet på heltal­va­ri­a­beln $number med 1 efter varje iteration av slingan, ome­del­bart efter echo-tex­tut­mat­ning­en. Vi ställer in villkoret för while-slingan enligt följande: $number är större än eller lika med 10. Följakt­li­gen kommer echo-satsen att utföras upprepade gånger tills $number över­skri­der värdet 10.

Bild: The script counts to 10 and then breaks off
The script incre­ments the variable $num until a value greater than 10 is reached.

Re­sul­ta­tet av skriptets körning är en sträng som skriver ut värdet på variabeln $number för varje loop-pass innan den in­kre­men­te­ras. Som resultat räknar skriptet från 1 till 10 och slutar köra koden så snart while-villkoret inte längre är uppfyllt.

do-while -slingor

Struk­tu­ren för do-while -slingan liknar den för while-slingan. Den enda skill­na­den är att villkoret inte kon­trol­le­ras i början av varje sling­om­gång, utan endast i slutet. Det grund­läg­gan­de schemat för en do-while-slinga är följande:

do {
     loop step and other instructions
     }
    while (condition)
php

Pro­gram­me­rat som en do-while -slinga skulle det fö­re­gå­en­de skriptet se ut så här:

<?php
$number = 1;
do {
    echo $number++ . "<br />";
    }
while ($number <= 10);
?>
php

I det här fallet blir re­sul­ta­tet detsamma. Det som är speciellt med do-while-slingan är att den körs minst en gång, även om villkoret inte uppfylls i något sling­ge­nom­gång.

för slingor

Generellt sett har for-slingan i ett PHP-skript samma funktion som while-slingan. Till skillnad från while-slingan skrivs dock start­vär­det, villkoret och satsen på en rad istället för att spridas över tre eller flera rader. Den grund­läg­gan­de struk­tu­ren för for-slingan är:

for (start value; condition; loop step)
    instructions
php

Exemplet ovan kan skrivas mer kompakt som en for-slinga:

<?php
for($number = 1; $number <= 10; $number++) {
    echo $number . "<br /> ";
}
?>
php

Först de­fi­nie­ras värdet 1 för $number. Sedan kon­trol­le­rar PHP om villkoret $number <= 1 är uppfyllt. Om så är fallet fort­sät­ter slingan och satserna under slingan exekveras (här är satsen echo). När detta har gjorts exekveras slingans steg. I detta sam­man­hang blir valet mellan pre- eller po­stinkre­men­te­ring ir­re­le­vant, eftersom detta steg alltid sker före ut­mat­ning­en. När slings­te­get avslutas inleds nästa iteration av slingan.

I en for- slinga betraktas start­vär­det, villkoret och slings­te­get som valfria kom­po­nen­ter. I teorin är även tomma slingor möjliga. Sådana slingor skulle dock vara över­flö­di­ga.

Det är i princip upp till dig om du skriver dina PHP-skript med en for- eller en while-slinga. Det finns dock ett argument för att välja for-slingor: när for-slingor används får du en bättre överblick över slingans ram­verk­da­ta. Detta undviker risken att av misstag skriva en evig slinga som körs tills tolkens minne är fullt. Med hän­vis­ning till fö­re­gå­en­de exempel kan detta hända när du glömmer att öka värdet på variabeln $number.

Om slingan ska köras minst en gång, oavsett villkor, är dock do-while-slingan den rätta slingan att använda.

bre­a­kandcon­ti­nue -satser

Ex­e­kve­ring­en av en while-, do-while- eller for-slinga kan påverkas avbreak- och continue-satserna. Använd break för att avbryta flödet i en slinga när som helst och fortsätt att hoppa över ett sling­ge­nom­gång. Båda satserna är bundna till ett villkor med hjälp av if. Följande exempel visar vårt räk­nings­skript med ett break:

<?php
for ($number = 1; $number <= 10; $number++) {
    if ($number == 5) {
      echo "If it is 5, we abort the script!";
      break;
    }
echo $number . "<br /> ";
}
?>
php

I for-slingan har vi de­fi­ni­e­rat att värdet på variabeln $number ska ökas med värdet 1 i varje sling­om­gång, med start från 1, tills variabeln har nått värdet 10. Vi kan avbryta denna slinga i förtid med hjälp av break så snart $number har nått värdet 5. Språk­kon­truk­tio­nen echo matar endast ut siffrorna 1 till 4.

Bild: for loop with break
The break statement breaks the loop as soon as the if condition is met.

För att hoppa över utdata från den femte omgången, men inte stoppa hela sling­flö­det, ersätter vi break-satsen med continue:

<?php
for ($number=1; $number <= 10; $number++) {
    if ($number == 5) {
      echo "Let's skip the 5!<br />";
      continue;
    }
echo $number . "<br /> ";
}
?>
php

Istället för siffran 5 visar PHP text­sträng­en Vi hoppar över nummer 5! som de­fi­nie­ras under if.

Bild: for loop with continue statement
The for loop is in­ter­rup­ted by a continue statement.

Hur man utför fi­lo­pe­ra­tio­ner

Dynamiskt web­bin­ne­håll är uppbyggt enligt principen om att separera innehåll och pre­sen­ta­tion. För att uppnå detta erbjuder skript­språk som PHP en rad olika funk­tio­ner som un­der­lät­tar sömlös in­teg­ra­tion av innehåll från externa da­takäl­lor i centrala mallfiler. I praktiken är dessa da­takäl­lor van­ligt­vis databaser som hanteras med hjälp av han­te­rings­sy­stem som MySQL. Du kan läsa mer om hur detta fungerar i vår MySQL-hand­led­ning.

Det är också möjligt att inkludera data från filer. Nedan visar vi hur du läser in filer som en sträng i ett PHP-skript och sparar tex­tut­da­ta från ditt skript i filer.

Läsa filer

För att läsa in­ne­hål­let i en fil har PHP olika funk­tio­ner. Av dessa är file() och file_get_contents() särskilt lämpliga för uppgiften. Medan funk­tio­nen file_get_contents() läser hela in­ne­hål­let i en fil till en sträng, sparar funk­tio­nen file() in­ne­hål­let som en array. Varje element i arrayen motsvarar en rad i filen. Med file() blir det enklare att skriva ut varje rad separat.

Vi de­mon­stre­rar PHP-fi­lo­pe­ra­tio­ner­na på textfilen example.txt, som vi placerar i mappen htdocs på vår test­ser­ver. Filen in­ne­hål­ler fyra rader med dummytext:

Lorem ipsum dolor sit amet, con­sec­te­tu­er adi­piscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis partu­ri­ent montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pel­len­tes­que eu, pretium quis, sem.

Först måste vi läsa hela filen som en sträng. För att göra detta måste vi tilldela namnet på mot­sva­ran­de fil som en parameter till funk­tio­nen file_get_contents():

file_get_contents('example.txt')

Nu har vi möjlighet att arbeta med den sträng som har lästs in. Vi kan till exempel tilldela den till en variabel och visa den som text i webb­lä­sa­ren:

<?php
$example = file_get_contents('example.txt');
echo $example;
?>
php
Bild: The script reads the file example.txt.
The file that has been read is saved in the browser.

I webb­lä­sa­rens vy kan vi se att text­sträng­en visas utan stycken. Rad­bryt­ning­ar­na i ori­ginal­fi­len syns inte. Det beror på att webb­lä­sa­ren tolkar skriptets tex­tut­da­ta som HTML-kod. Rad­bryt­ning­ar som de­fi­ni­e­rats i tex­tre­di­ge­ra­re går förlorade.

För att behålla den ur­sprung­li­ga struk­tu­ren har du några al­ter­na­tiv. Du kan lägga till HTML-koden för rad­bryt­ning (br) i källfilen manuellt med hjälp av sök och ersätt, sätta en <pre> runt fi­l­in­ne­hål­let, ställa in CSS-egen­ska­pen white-space: pre -wrap eller använda funk­tio­nen nl2br() för att signalera till PHP att au­to­ma­tiskt kon­ver­te­ra rad­bryt­ning­ar (nya rader) till HTML-rad­bryt­ning­ar (bryt­ning­ar). Här är koden:

<?php
$example = file_get_contents('example.txt');
echo nl2br($example);
?>
php

Om eko­språks­kon­struk­tio­nen används i kom­bi­na­tion med nl2br() infogar PHP en HTML-rad­bryt­ning före varje ny rad.

Bild: The nl2br() function in the application
nl2br() helps to structure imported data.

För att skriva ut raderna i en fil in­di­vi­du­ellt kan du använda funk­tio­nen file(). Denna läser en fil, numrerar alla rader med start från nummer 0 och sparar deras innehåll som element i en array. Om vi tillämpar detta på vårt exempel får vi följande resultat:

[0] = Lorem ipsum dolor sit amet, con­sec­te­tu­er adi­piscing elit

[1] = Aenean commodo ligula eget dolor. Aenean massa.

[2] = Cum sociis natoque penatibus et magnis dis partu­ri­ent montes, nascetur ridiculus mus.

[3] = Donec quam felis, ultricies nec, pel­len­tes­que eu, pretium quis, sem

För att visa re­spek­ti­ve innehåll med echo anger du bara önskat radnummer. Till exempel visar följande skript endast den första raden i filen example.txt som utdata för webb­lä­sa­ren:

<?php
$example = file("example.txt");
echo $example [0];
?>
php
Bild: The file() function in the application
Select which element of the array you wish to output.

Skriv filer

PHP går utöver att bara läsa filer genom att också låta dig läsa, skapa och ändra filer utan problem.

An­vänd­ning­en av funk­tio­nen file_put_contents() är ett utmärkt exempel. Den kräver bara två pa­ra­met­rar: målfilens namn och data, som kan vara en sträng eller en array. I skriptet nedan skapas en ny fil med namnet test.txt, som in­ne­hål­ler strängen This is a test!. In­klu­de­ring­en av \r\n sä­ker­stäl­ler en rad­bryt­ning i filen.

<?php
file_put_contents("test.txt", "This is a test! \r\n");
echo "test.txt has been created!";
?>
php
Bild: File operations: write files
The PHP script writes the string This is a test! into the file test.txt.

Eftersom file_put_contents inte ger oss någon utdata för webb­lä­sa­ren lägger vi till ett echo-uttryck som talar om för oss vilken åtgärd som utförs.

Om det redan finns en fil med samma namn i målmappen kommer den att skrivas över. Du kan förhindra detta genom att ställa in pa­ra­me­tern FILE_APPEND:

<?php
file_put_contents("test.txt","The test was successful! \r\n", FILE_APPEND);
echo "test.txt has been updated!";
?>
php

Genom att använda file_put_contents() med pa­ra­me­tern FILE_APPEND kommer nytt innehåll att läggas till be­fint­ligt innehåll.

Bild: File operations: update files
The PHP script adds the string The test was suc­cess­ful!.

Det som PHP skriver till målfilen behöver inte nöd­vän­digt­vis de­fi­nie­ras i skriptet. Al­ter­na­tivt kan du överföra innehåll från en fil till en annan. Följande skript läser in­ne­hål­let i example.txt och infogar det i filen test.txt:

<?php
$example = file_get_contents("example.txt");
file_put_contents("test.txt", $example, FILE_APPEND);
echo "test.txt has been updated!";
?>
php
Bild: File operations: transfer content from one file to another
The PHP script reads the data from the example.txt file and adds it to the test.txt file.
Gå till huvudmeny