Fra begynder til login
Indholdsfortegnelse
- Indledning
- Formål
- Forudsætninger
- Sådan læses guiden
- Grundlæggende viden
- Opret en bruger
- MySQL tabel
- HTML-del
- Bruger-input
- Indsæt i database
- Login
- HTML-delen
- PHP-del
- Sessions
- Beskyttede sider
- Opsamling
- Afsluttende kommentar
Indledning
Inden for den seneste tid er jeg flere gange blevet kontaktet i forbindelse med spørgsmål omkring PHP af helt nybegyndere. "Kender du ikke en god guide?" - og til det har jeg desværre måtte svare nej, da jeg ikke synes at have fundet noget jeg helt kunne stå inde for var en god guide. Derfor har jeg nu besluttet at gøre mit eget forsøg på en god guide til helt nybegyndere inden for PHP.
FormålFormålet med denne guide eller tutorial, er at komme fra ingen viden til et simpelt login-system med anvendelse af PHP og en MySQL-database.
ForudsætningerHvad kræver denne guide for at kunne bruges til noget?
Først og fremmest er det nødvendigt at kende en smule til hjemmesider i forvejen. Grundlæggende html er et minimum, men det er en fordel at have prøvet lidt med html, css og evt. javascript. Kan man ikke html findes der en glimrende guide på
HTML.dk.
For at kunne vise PHP skal man bruge en server med PHP installeret. Man kan installere det på sin egen computer (for Windowsbrugere: enten med IIS, Windows indbyggede server, eller en Apache-installation, her kan WAMP anbefales) eller man kan bruge et webhotel. Langt de fleste webhoteller understøtter i dag PHP.
Desuden skal webhotel eller egen webserver have adgang til en MySQL-database.
Derudover skal man bruge en tekst-editor til at redigere .php-filerne. Der findes et hav af gratis-editorer (PSPad har jeg selv brugt førhen) som hjælper dig med at farve din kode så den er lettere at overskue.
Sådan læses guidenEn kode-stump efterfølges altid af et forklarende tekst-afsnit hvor hver enkelt ny funktion vil blive gennemgået.
PHP-funktioner markeres med kursiv i den almindelige tekst.
Grundlæggende viden
For at arbejde med PHP har vi brug for lidt grundlæggende viden. Resten vil jeg forklare løbende som jeg bruger funktionerne i koden. Har du set en smule på PHP før kan du let springe dette afsnit over.
En PHP-fil har som regel endelsen .php.
hello.php- <?
-
- echo "Hello World";
-
- ?>
Sådan kunne et php-dokument se ud. PHP er et server-side-sprog, det er altså serveren der læser PHP-koden, mens html, css, javascript og lign. er klient-side-sprog, det er altså din browser der læser html/css/javascript. Du kan frit blande php og klient-side-sprog i dine .php-filer. Men al din php-kode skal være inden for
<? og
?>.
Funktionen
echo bruges til at udskrive tekst til skærmen. Du kan skrive html-tags med
echo.
Alle linjer i PHP afsluttes med
; (semikolon).
variabel.php- <?
- $world = "verden";
-
- echo "Hej " . $world . ".";
-
- ?>
Her bruger vi en variabel til at skrive "verden".
echo bruges igen til at udskrive til skærmen. Tekst og variabler sammensættes med et
. (punktum).
Nu er det jo ikke god kotume ikke at have <html>, <head> og <body> så vi ser lige hvordan en standard .php-fil kunne se ud:
standard.php- <html>
- <head>
- <title>Min første php-side</title>
- </head>
-
- <body>
- <?
- $navn = "Silwing";
-
- echo "<h1>Hej " . $navn . "</h1>";
- ?>
- </body>
- </html>
Her kombineres html og PHP i samme fil. Du kan starte og slutte PHP-afsnit flere gange i samme fil hvis du har lyst.
Opret en bruger
MySQL-tabelSom det første før man kan logge ind i et system er man nødt til at have oprettet en bruger. Så først vil vi se på hvordan vi får oprettet en bruger i en MySQL-tabel.
Allerførst må vi have en simpel forståelse for hvordan en MySQL-database er skruet sammen.
Databasen består af tabeller og tabeller består af rækker og kolonner. Kolonnerne defineres når du opretter tabellen. De fleste steder der understøtter MySQL har ligeledes installeret phpMyAdmin, som er en brugervenlig måde at håndtere dine databaser og tabeller på.
Vi opretter først en tabel til vores brugere. Denne tabel kalder vi simpelt nok "brugere". Den skal indeholde følgende 3 kolonner (felter):
"id" af typen INT, under ekstra vælges "auto_increment" og der sættes et hak ved den lille firkant med nøglen (Primær).
"brugernavn" af typen VARCHAR og længden 255
"password" af typen VARCHAR og længden 255
Følgende SQL-kode kan også bruges til at oprette tabellen (dette gøres i phpMyAdmin under fanen SQL):
- CREATE TABLE `brugere` (
- `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
- `brugernavn` VARCHAR( 255 ) NOT NULL ,
- `password` VARCHAR( 255 ) NOT NULL
- )
HTML-delenAt bede brugeren indtaste de oplysninger der skal bruges til at logge ind med er ganske simpel html og kunne se sådan her ud:
opret.php- <html>
- <head>
- <title>Opret bruger</title>
- </head>
-
- <body>
- <h1>Opret bruger</h1>
- <form action="indsaet.php" method="post">
- Brugernavn: <input type="text" name="brugernavn">
- <br>
- Password: <input type="password" name="password">
- <br>
- Gentag password: <input type="password" name="gentag">
- <br>
- <input type="submit" value="Opret">
- </form>
- </body>
- </html>
Det første man skal lægge mærke til er "action" her defineres den adresse man kommer hen til når man klikker på "Opret"-knappen. "method=post" definerer måden hvorpå de indtastede data sendes videre til serveren, det kommer vi til at se nærmere på om lidt.
Vi beder brugeren gentage sit password, for at sikre os mod stavefejl.
Hvert "input"-felt har en type og et navn. Typen "password" sørger for at feltet kun viser stjerner når man indtaster noget i det. "name=" angiver hvordan vi vil finde det indhold der er i netop dét felt med PHP på den næste side.
Bruger inputDen næste side bruges til at fange de indtastede data fra oprettelsesformen og indsætte dem i den tabel vi har oprettet til det. Først skal vi have indsamlet de data brugeren skrev i html-formen og sørge for at de data der er
indtastet kan bruges.
indsaet.php- <?
- $brugernavn = $_POST["brugernavn"];
- $password = $_POST["password"];
- $gentag = $_POST["gentag"];
- $errorCount = 0;
-
- if($brugernavn == "")
- {
- echo "Du skal indtaste et brugernavn.<br>";
- $errorCount++;
- }
- if($password == "")
- {
- echo "Du skal indtaste et password.<br>";
- $errorCount++;
- }
- if($gentag == "" || $gentag != $password)
- {
- echo "De to passwordfelter skal have ens indhold.<br>";
- $errorCount++;
- }
-
- ?>
Det første vi lægger mærke til her, er en ny type variabel-navn.
$_POST["navn"] er en global variabel.
$_POST variablen indeholder alt data sendt fra en html-form med "method=post". Den måde man finder de rigtige data på er klammerne bagefter. Husker vi på html-delen havde hvert felt en "name="-attribut. Det der står efter lighedstegnet er det vi skal have ind i vores [""]-klammer.
$_POST["brugernavn"] indeholder altså det brugeren har indtastet i "brugernavn"-inputfeltet.
Herefter vil vi gerne sikre os at der er indtastet noget i felterne. Dette gøres med PHP-funktionen
if. Betydningen af ordet forklarer langt hen ad vejen hvad funktionen gør. Denne funktion spørger altså "hvis". Parentesen efter
if giver en betingelse som skal være opfyldt for at det der står indenfor { og } udføres.
Her spørger vi
if indholdet i brugernavn
== (indeholder) "", altså ingenting, så udskriver vi en fejl på skærmen. Desuden udføres kommandoen
$errorCount++;.
Programmører er per definition dovne ovenstående kommando svarer altså til at skrive
$errorCount = $errorCount+1;, det fylder bare ikke helt så meget.
Da vi startede med en $errorCount på 0, har vi altså nu 1, hvis der ikke blev skrevet noget i brugernavns-feltet. Det kan vi bruge senere til at se om der er nogen fejl.
Det samme tjekkes for password-feltet.
if-sætningen er lidt anderledes end de andre to.
De to || angiver at enten skal det der står på den ene side være opfyldt, ellers skal det der står på den anden side være opfyldt. Her tjekker vi altså om $gentag er tom, eller
!= (forskellig fra) $password. Hvis en af de to ting er opfyldt udskriver vi en fejl og tæller op på fejltælleren. I stedet for || kan man bruge && så skal begge betingelser være opfyldt.