Trin 4: Tjek af login

"login_tjek.php" indeholder straks mere kode:

<?php
include("forbindelse.php");
//Tjekker om brugeren har trykket på knappen
if(isset($_POST['login'])) {
    //Queryen som skal finde brugeren i databasen
    $res = mysql_query("SELECT * FROM brugere WHERE brugernavn = '" . $_POST['brugernavn']
--> . "' AND kodeord = '" . md5($_POST['kodeord']) . "'") or die(mysql_error());
    //Her findes antallet af poster som svarer til queryen(kun en)
    $antal = mysql_num_rows($res);
    //Hvis antal er = 1
    if($antal == 1) {     
include("index_org.htm");
       } else {
include("forkert.htm");
    }
}
?>

Linien der starter med --> er egentlig en del af linien ovenover, og de to bindestreger samt ">" tegnet bør fjernes! Hvis du scroller ned til bunden af denne side vil du se koden uden kommentarer og ekstra tegn.

Da kodeordet i databasen er krypteret, er det vigtigt, at det kodeord brugeren indtaster bliver krypteret INDEN det tjekkes med kodeordet i databasen. Denne kryptering sker i den lange linie, specifikt i delen:

. "' AND kodeord = '" . md5($_POST['kodeord']) . "'") 

Skåret ud i pap:
Det som du skal være mest påpasselig med, er at ordene i de firkantede paranteser passer med de navne du brugte i din loginsides opbygning:
Hvis du f.eks. har kodet således:

<td>Password <input type="password" name="hemmeligtord" size="20"/></td>

Så vil ovenstående del fra login_tjek.php fejle, da den vil mangle en værdi fra et name-attribut der hedder "kodeord" og ikke "hemmeligtord".




Gennemgang af php-koden:

Som tidligere nævnt er dette mit første møde med php og jeg kan derfor ikke gå i dybden med forklaring af, hvordan man programmerer i php. Jeg vil i stedet koncentrere mig om at gøre ovenstående kode forståelig. Men jeg vil dog fastholde, at hvis dit mål blot er at lave et brugbart login ved anvendelse af php og mySQL, så er forståelsen knap så vigtig som det at følge fremgangsmåden og følge ovenstående henstilling i forhold til de firkantede paranteser.


Linien

include("forbindelse.php");

giver besked om, at dokumentet "forbindelse.php" på hjemmesideserveren skal kaldes.


Linien

if(isset($_POST['login'])) {

isset() er en boolsk funktion, hvilket vil sige at den tjekker om indholdet er sand eller falsk.
I dette tilfælde skal den tjekke om der er trykket på login-knappen.
$_POST[] er ikke en funktion, men en global værdi som henviser til, at der er tale om at værdierne er sendt skjult og samtidig med forespørgslen (nøjagtig ligesom i html-delen hvor vi brugte method="post").
$_POST['login'] Her er den globale værdi sat til at indeholde værdi fra login-knappen.


Den lange brudte linie

$res = mysql_query("SELECT * FROM brugere WHERE brugernavn = '" . $_POST['brugernavn']
--> . "' AND kodeord = '" . md5($_POST['kodeord']) . "'") or die(mysql_error());

er lidt mere kompliceret at forklare. På hver side af lighedstegnet sker der noget. $res får f.eks. tildelt en værdi. Den værdi der bliver tildelt er svaret fra databasen.
Svaret fra databasen er det der sker på højre side af lighedstegnet.

SELECT * FROM brugere

er besked til databasen om at finde alle oplysninger i tabellen "brugere"
men

WHERE brugernavn = '" . $_POST['brugernavn']
--> . "' AND kodeord = '" . md5($_POST['kodeord']) . "'")

fortæller databasen at det alligevel ikke er alle oplysninger i tabellen vi ønsker. Men derimod ønsker vi præcis de oplysninger, hvor både brugernavn og kodeord passer med de oplysninger brugeren tastede ind inden denne trykkede på "login"-knappen.


or die(mysql_error());

Fortæller, at vi vil have besked, hvis der er sket en fejl ved kaldet til databasen, og at vi så gerne vil have forbindelsen til databasen lukket.


$antal = mysql_num_rows($res);

Selve mysql_num_rows() er en funktion, der (ved brug af den værdi $res har fået efter kaldet til databasen) beregner, hvor mange rækker der er i tabellen brugere som opfylder kriterierne (at brugernavn og kodeord er ens med de indtastede værdier). $antal er en variabel, som får tildelt resultatet af funktionskaldet mysql_num_rows().
Da der er tale om et login skal $antal helst kun være lig med ingen (0) eller 1 række.


if($antal == 1) {

er en betingelse.
Den tjekker om $antal er nøjagtig 1, og hvis den er det, så bliver websiden index_org.htm kaldt (og vist i browseren)

include("index_org.htm");

og hvis ikke, så bliver websiden forkert.htm kaldt og vist.

       } else {
include("forkert.htm");
    }



Koden uden kommentarer:

<?php
include("forbindelse.php");
if(isset($_POST['login'])) {
    $res = mysql_query("SELECT * FROM brugere WHERE brugernavn = '" . $_POST['brugernavn']
 . "' AND kodeord = '" . md5($_POST['kodeord']) . "'") or die(mysql_error());
      $antal = mysql_num_rows($res);
      if($antal == 1) {     
include("index_org.htm");
       } else {
include("forkert.htm");
    }
}
?>

Valid CSS!

Valid XHTML 1.0!