26 online Udvikleren.dk > PHP >

Fra begynder til login

Kubeudvikler til Business Intelligence på CBS

Kubeudvikler til Business Intelligence på CBS

Kubeudvikler til Business Intelligence på CBS (Genopslag) På CBS har vi sat udviklingen af ledelsesinformation som en del af vores strategiske indsats. For at understøtte dette har vi etableret et BI program samt en mindre BI enhed placeret centralt og ... [Læs mere | Flere jobs]
 

Randi H.
Forfatter: Randi H.
Artikler skrevet: 1
UP tjent på artikler: 1.000

Hits: 1169
Niveau: Nybegynder
Artikel UP: 1.000

Rating: En rating på 3 ud af 3 stemme(r)

<< < 12 > >>

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ål
Formå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ætninger
Hvad 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 guiden
En 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
Fold kodeboks ind/udPHP kode 


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
Fold kodeboks ind/udPHP kode 


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
Fold kodeboks ind/udPHP kode 


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-tabel
Som 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):

Fold kodeboks ind/udSQL kode 


HTML-delen
At 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
Fold kodeboks ind/udHTML kode 


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 input
Den 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
Fold kodeboks ind/udPHP kode 


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.


<< < Side 1 af 2 > >>
Denne artikel har en rating på 3 ud af 3 stemme(r).

Kommentarer
Bruger
BrunO @ 14-01-2010 14:10:22
Jeg har lige en hurtig kommentar.

Jeg kan se at du bruger md5 som faktisk kan knækkes ret nemt.
Burde man ikke bruge sha1 for at få en god sikkerhed?
Bruger
Per Sikker Hansen @ 14-01-2010 14:47:41
Velformuleret og velstruktureret. Et godt, hurtigt, simpelt og lige til stykke tekst at smide i hovedet på PHP-begyndere.

Lige et par forslag til forbedringer med på vejen:
Du bruger åbningstagget <? i de fleste af dine filer. Det er efterhånden blevet en meget udbredt best practice altid at bruge åbningstagget <?php istedet, da det er mere generisk - mange hostingfirmaer har deaktiveret shorttags, så det smarteste er at vænne sig til at bruge <?php - hvis ikke for din egen, så for folk du eventuelt på et tidspunkt deler noget kode meds skyld.

Du er heller ikke altid helt konsistent med dine if-sætninger. Folk med en smule hår på brystet hvad angår kodning kan sagtens identificere varierende if-sætninger og hvorfor det er bedre at bruge den ene frem for den anden, men en nybegynder, som er artiklens målgruppe, bliver som regel forvirret hvis en if/else både skrives som:
Fold kodeboks ind/udKode 

og
Fold kodeboks ind/udKode 

i den samme artikel.
Bruger
Mickelvlm @ 21-01-2010 22:41:45
Fin nok artikel, men der er dog et enkelt sted, hvor der kan ende med at dukke en sikkerhedsfejl op.

Ved $bruger tilføjer du ikke selv nogen backslashes (\), og selvom den normalt tilføjer dette af sig selv, er det muligt at slå det fra, hvilket betyder at ikke alle servere nødvendigvis sørger for det selv. Hvis serveren ikke gør dette, vil jeg bare kune skrive a' OR '1' = '1 eller noget værre endnu, og vupti, jeg er logget ind på siden.
Bruger
Randi H. @ 25-01-2010 20:21:49
Tak for feedbacken. Regner med at tilføje opdateringer til guiden når jeg får tid :)

Kan godt se problemet med sql-injections, jeg overvejede også at medtage det. Det største problem her er at artiklen er for absolut begyndere, så jeg vil også helst begrænse den, så det ikke bliver for meget på en gang. Det kan være jeg skal skrive lidt om sikkerhed i min afslutning, så man selv kan læse videre og forbedre det :).
Bruger
Flemming @ 02-02-2010 20:50:11
Hej
Jeg er ny, og har "leget" lidt med din artikel.
Den er fin og nem at forstå. Men ...
Jeg har ledt rundt på nettet, men kan ikke helt finde ud af hvorfor jeg får denne fejlkode:

Warning: Cannot modify header information - headers already sent by (output started at /customers/xxxx.dk/xxxx.dk/httpd.www/Test/login.php:1) in /customers/xxxx.dk/xxxx.dk/httpd.www/Test/login.php on line 35

Hvad her jeg gjort forkert ?
Bruger
The-Freak @ 03-02-2010 07:38:41
Flemming, prøv at tjekke om du eventuelt har mellemrum, linjeskift eller lignende før den første <?php ... ?> blok. Ethvert tegn foran her vil betyde udskrift til browseren, og derved give den fejl du omtaler.
Bruger
Flemming @ 03-02-2010 21:08:38
Jep korrekt. Tak
Bruger
Mads VL @ 08-02-2010 01:20:21
Jeg får følgende fejlmeddelelser ved login.php til user.php:


Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /data/cluster/free1go/d/o/www.donl.1go.dk/brugersystem1/user.php:1) in /data/cluster/free1go/d/o/www.donl.1go.dk/brugersystem1/user.php on line 2

Warning: mysql_query(): Access denied for user 'root'@'localhost' (using password: NO) in /data/cluster/free1go/d/o/www.donl.1go.dk/brugersystem1/user.php on line 6

Warning: mysql_query(): A link to the server could not be established in /data/cluster/free1go/d/o/www.donl.1go.dk/brugersystem1/user.php on line 6

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /data/cluster/free1go/d/o/www.donl.1go.dk/brugersystem1/user.php on line 7




Hvad kan der være gået galt?
Bruger
Randi H. @ 08-02-2010 17:24:27
Mads VL - som Flemming også fik at vide så har du muligvis er mellemrum eller lign. foran dit <?. Den siger i hvert fald at den ikke kan sende headeren i linje 2, fordi der allerede er udskrevet noget til browseren i linje 1.

Den næste fejl skyldes en fejl idet du forsøger at connecte til databasen. Den vil ikke give dig adgang. Formentlig er dette fordi du har skrevet et forkert host/brugernavn/password i
Fold kodeboks ind/udKode 


De sidste to fejl går væk når du får kontakt til databasen :)
Bruger
Mads VL @ 08-02-2010 21:52:10
Okay har rettet det som du sagde, men for nu kun disse fejlmeddelser når jeg prøver at logge brugeren ind:

Fold kodeboks ind/udKode 



Man kan sagtens oprette sig i databasen, men når man logger ind får man ovenstående.. Den siger også kun "Hej !" i stedet for "Hej (brugernavn)!"

adressen er http://donl.1go.dk/brugersystem1/index.htm hvis det er til nogen hjælp
Bruger
Mads VL @ 08-02-2010 22:27:10
Okay har rettet det som du sagde, men for nu kun disse fejlmeddelser når jeg prøver at logge brugeren ind:

Fold kodeboks ind/udKode 



Man kan sagtens oprette sig i databasen, men når man logger ind får man ovenstående.. Den siger også kun "Hej !" i stedet for "Hej (brugernavn)!"

adressen er http://donl.1go.dk/brugersystem1/index.htm hvis det er til nogen hjælp
Bruger
Mads VL @ 08-02-2010 22:27:36
Okay har rettet det som du sagde, men for nu kun disse fejlmeddelser når jeg prøver at logge brugeren ind:

Fold kodeboks ind/udKode 



Man kan sagtens oprette sig i databasen, men når man logger ind får man ovenstående.. Den siger også kun "Hej !" i stedet for "Hej (brugernavn)!"

adressen er http://donl.1go.dk/brugersystem1/index.htm hvis det er til nogen hjælp
Bruger
Randi H. @ 09-02-2010 08:23:47
Ah... Kan godt se jeg har lavet en fejl :) my bad..

På din beskyttede side (user.php) skal du naturligvis også connecte til databasen ligesom på siden login.php.

Tilføj disse to linjer efter din session_start(); i user.php. Husk naturligvis at rette host/brugernavn/password/database til dine egne værdier.

Fold kodeboks ind/udKode 
Bruger
Mads VL @ 09-02-2010 17:16:31
Det giver god mening i hvert fald.. det vil jeg gøre :)

tak for hjælpen !


Tilføj rating/kommentar til artiklen
Du skal være logget ind for at tilføje en rating/kommentar til denne artikel.






Klik for at logge ind


Teknologier