25
Tags:
php
Skrevet af
Bruger #15344
@ 14.01.2010
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.
Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.
Del også gerne artiklen med dine Facebook venner:
Kommentarer (30)
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?
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:
if(noget)
{
stuff();
}
else
{
other_stuff();
}
og
if(!$insert)
echo "Der skete en fejl. Prøv igen. <a href=\"javascript:history.back(-1)\">Tilbage</a><br>";
else
echo "Brugeren blev oprettet. <a href=\"index.php\">Forside</a><br>";
i den samme artikel.
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.
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
.
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 ?
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.
Jep korrekt. Tak
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?
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
mysql_connect('host','brugernavn','password');
De sidste to fejl går væk når du får kontakt til databasen
Okay har rettet det som du sagde, men for nu kun disse fejlmeddelser når jeg prøver at logge brugeren ind:
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 7
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 7
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 8
Hej !
og velkommen til denne beskyttede side.
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
Okay har rettet det som du sagde, men for nu kun disse fejlmeddelser når jeg prøver at logge brugeren ind:
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 7
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 7
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 8
Hej !
og velkommen til denne beskyttede side.
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
Okay har rettet det som du sagde, men for nu kun disse fejlmeddelser når jeg prøver at logge brugeren ind:
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 7
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 7
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 8
Hej !
og velkommen til denne beskyttede side.
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
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.
mysql_connect("host","brugernavn","password");
mysql_select_db("database");
Det giver god mening i hvert fald.. det vil jeg gøre
tak for hjælpen !
Dejlig guide og glæder mig til at hoppe over den, men eftersom du efterspørger rettelser så ville jeg lige tilføje at der er lidt fejl i din tekst i det sidste kode eksempel:
"Velkommen til simple dette login-system"
hvor der lige skal byttes rundt på to ord
Men ellers rigtig god guide, der helt får mig til at ville prøve at programmere i php igen.
Hey, super artikel, tusind tak!!
Et spørgsmål, jeg kan ikke få min login.php til at redirecte til user.php, efter jeg logger ind bliver den bare på login.php og der er intet på siden... - jeg ved ikke hvorfor!
Jeg har stort set bare kopieret alle koder fra din artikel, men det virker stadig ikke - nogle idéer til hvorfor dette kunne være??
Nicholas
Hej .. (:
Jeg har længe forsøgt at lære PHP, men der findes absolut ingen brugbare guides til nybegyndere. I hvert fald ikke til mig.
Så, nu håbede jeg lige, da jeg så din artikel. Især fordi jeg netop står og skal bruge et loginsystem.
Men, selvfølgelig. Jeg kommer til det sted der omhandler MySQL - og pludselig skal man lave nogle kolonner og nogle rækker, og sætte hak i ting og sager? Jeg fatter absolut ingenting. Hvad snakker du om? Kan jeg få lidt hjælp her? ..
Det her er en rigtig god guide, og nok den bedste jeg har set længe. Jeg er selv forholdsvis ny til PHP bortset fra, at jeg efterhånden kan lave "kontaktforme". Jeg lånte derfor bogen "Start på PHP5", som giver en udmærket forståelse af, hvordan det hele fungerer. Og der er også et afsnit omkring MySql. Problemet med bogen er bare, at den ikke altid, specielt til sidst, bruger nogle særlig gode metoder. Der bliver brugt 10x så meget kode, som her. Efter jeg er blevet færdig med bogen, læste jeg denne artikel, og den er rigtig god - med lidt tilføjelser som "addslashes", for sikkerhedens skyld, vil jeg nok fremover bruge dette som grundform for mine login-systemer. Men hvis en af jer kloge hoveder, vil præcisere hvad "MD5" helt præcist gør, vil jeg blive glad - og nu snakkede Brun0 om noget med sha1?
Thumbs up to the auother!
Mvh.
Christian Bundgaard / Dev
PS: Ida, gå ind på phpmyadmin - som du højst sandsynligt har adgang til, hvis du har et webhotel - og gå ind på din database. Der er en fane, der hedder SQL, og der indsætter du bare koden og trykker OK/Go 1-2 gange.
super tutorial
har slev afprøvet den og virker glimrende,
ville dog bruge sha1 istedet som BrunO også siger
5/5
Har nu prøvet at eksperimentere med det, men det virker ikke for mig. Det er nok en eller anden dum fejl, men hvis der er en, der kan finde den, vil jeg blive glad
Når jeg opretter en bruger, kommer den til en tom side.
Her er koderne - først opret.htm og dernæst indsaet.php
<html>
<head>
<title>Login system</title>
</head>
<body>
<h1>Opret bruger</h1>
<form action="indsaet.php" method="post">
Brugernavn: <br/>
<input type="text" name="brugernavn"> <br/>
Password: <br/>
<input type="password" name="password"> <br/>
Gentag password: <br/>
<input type="password" name="gentag"> <br/>
<input type="submit" value="Opret">
</form>
</body>
</html>
<?
$brugernavn = $_POST["brugernavn"];
$password = $_POST["password"];
$gentag = $_POST["gentag"];
$errorCount = 0; // Sikkerhedstjek. Hvis der er en ting, der ikke er som det skal, forhøjes tallet med 1. Så tjekker man til sidst.
if($brugernavn == "")
{
echo "Du skal indtaste et brugernavn.<br>";
$errorCount++;
}
if($password == "")
{
echo "Du skal indtaste et brugernavn. <br>";
$errorCount++;
}
if($gentag == "" || $gentag != $password)
{
echo "De to passwordfelter skal have ens indhold. <br>";
$errorCount++;
}
mysql_connect("*****", "*****", "*****");
mysql_select_db("*****");
if($errorCount == 0)
{
$password = sha1($password);
$insert = mysql_query("INSERT INTO brugere (brugernavn, password) VALUES ('$brugernavn', '$password')");
if(!$insert)
{
echo "Der skete en fejl. Prøv venligst igen - <a href=\"javascript:history.back(-1)\">gå tilbage?</a><br>";
}
else
{
echo "Brugeren blev oprettet. <a href=\"index.php\">Gå til forsiden?</a><br>";
}
?>
Jeg bliver MEGET glad, hvis der er en der kan løse det, da det er mit første loginsystem, og jeg vil rigtig gerne lære det
Mvh.
Christian
Problem løst. Der var glemt en "}" til sidst ^^
Hey!
Det er en super artikel, og det virker super, men der er dog ét problem, og det er at man kan oprette den samme bruger 2 eller flere gange med samme brugernavn o_o Hvordan forhindre jeg det? Læg venligst en/et kode/script til dette
Hej, det er en rigtig god artikel, dog forvirrende det med at du ikke kalde fil navnene det samme i alle koderne, men skidt pyt da det jo er til at forstå.
Men jeg er løbet ind i samme problem som Nicholas Bendt.
Det er somom at den glemmer at jeg er logget ind når går hen på en ny side altså user.php
Hej Anton
For at sørge for at man ikke kan oprette to brugere med samme brugernavn tilføjer du følgende kode på linjerne mellem
mysql_select_db() og
if($errorCount == 0):
$bruger = mysql_query("SELECT * FROM brugere WHERE brugernavn='$brugernavn'");
if(mysql_num_rows($bruger) > 0)
{
echo "Brugernavnet er allerede taget.<br>";
$errorCount++;
}
Det koden gør er at lede efter en bruger med det valgte brugernavn i databasen.
mysql_num_rows tæller hvor mange rækker en
mysql_query har fundet. Hvis den finder nogen rækker med det brugernavn, så er brugernavnet optaget og den udskriver en fejl.
Bemærk at ovenstående skal indsættes i indsaet.php. Fik jeg ikke lige skrevet.
Og tak for rosen til alle jer andre.
I stedet for at gøre som Randi H. foreslår, hvad så med at gøre kombinationen af brugernavn og koderord unik i tabellen.
Test om indsættelse forårsager fejlen, der returneres ved forsøg på oprettelse af en række med et gentaget unikt index.
Hey, super artikel, tusind tak!!
Et spørgsmål, jeg kan ikke få min login.php til at redirecte til user.php, efter jeg logger ind bliver den bare på login.php og der er intet på siden... - jeg ved ikke hvorfor!
Jeg har stort set bare kopieret alle koder fra din artikel, men det virker stadig ikke - nogle idéer til hvorfor dette kunne være??
Nicholas
Hej
Jeg har det samme problem.
Når jeg så istedet submitter login.php fra login.htm, får jeg at vide at brugeren ikke eksisterer.
Kan ikke lige gennemskue hvor fejlen ligger. Håber der er en barmhjertig sjæl der kan hjælpe mig.
Tage
Først og fremmest tak for en god artikel - jeg er dog stødt på et enkelt problem:
Jeg får følgende fejlmeddelse, når jeg logger ind og går til user siden.
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/user.php on line 7
Derefter kommer indholdet på user-siden op dog uden at skrive brugernavnet:
Hej !
og velkommen til denne beskyttede side.
Jeg kan se at det har noget at gøre med disse linjer i koden.
- $userQuery = mysql_query("SELECT * FROM brugere WHERE id='$_SESSION[user_id]'");
- $userArray = mysql_fetch_array($userQuery);
Men hvad skal jeg gøre for at løse det. Som jeg forstår det forventer mysql_fetch_array en ressource, men får en boolean? Jeg kan ikke helt se hvad jeg kan gøre ved det?
Venlig Hilsen
Jeppe
Er ikke noget sikkerhed for SQL injection! Pas på med det!
Fantastisk, intet mindre, jeg har længe søgt informationer om mysql og hvordan jeg fra en webside kan sende info.
lavede filerne imens jeg læste igennem første gang og alt virkede.
Jeg har ikke tidligere set så flot en gennemgang uden unødigt sludder af noget som helst programmering, de fleste andre kommer med meget forvirrende materiale ind i mellem.
TAK
mvh
Keld
Du skal være
logget ind for at skrive en kommentar.