M04 Hjälp till uppgifter

På denna sidan kommer det finnas hjälp till lösning av uppgifter samt en fullt fungerande lösning i form av kod.

Att kopiera färdiga lösningar gör inte att du blir bättre på programmering, men det kan vara ett effektivt sätt att få lite hjälp för att bli en duktig programmerare. Det är ditt ansvar att använda hjälpen på rätt sätt.

En inloggningsapplikation

Grunduppgiften

Här finns den fullständiga lösningen i den tutorial som är länkad som ett hjälpavsnitt.

Flera användare

Hjälp, eller förklaring, till lösning [klicka för att visa]

Att skapa en array för att lagra användarnamn / lösenord. Min lösning består av något som heter "associative array" där vi kan skapa arrayer med namngivna index.

$users = array(
  array("user"=>"admin","pwd"=>"admin"),
  array("user"=>"user","pwd"=>"user"),
  array("user"=>"bosse","pwd"=>"abc123")
);

Alternativ lösning 1

Det går att lösa med en "vanlig" array som inte har namngivna index, då får man istället jobba med indexen [0] och [1] för att hålla koll på vad som är användarnamn och lösenord.

$users = array(
  array("admin","admin"),
  array("user","user"),
  array("bosse","abc123")
);

Alternativ lösning 2

Det går också att köra med två separata arrayer.

$user = array("admin","user","bosse");
$pwd = array("admin","user","abc123")

Det viktigaste här är att hela tiden jämföra rätt index, så att $user[1] jämförs med lösenord i $pwd[1]

Lösningsförslag [klicka för att visa]

Den enda filen som förändras är login.php.

<?php
// öppna sessionen
session_start();

// Skapar en assosiativ array
$users = array(
  array("user"=>"admin","pwd"=>"admin"),
  array("user"=>"user","pwd"=>"user"),
  array("user"=>"bosse","pwd"=>"abc123")
);

// hämta username och password från formuläret
$username = $_POST['username'];
$password = $_POST['password'];

// Loopar igenom $users
foreach($users as $user){
  // kollar om angivet användarnamn och lösnord finns i vår array över användare
  if($user['user'] == $username && $user['pwd'] == $password){
    $_SESSION['username'] = $username;    // Lagrar användarnamn i SESSION
    header('location: admin.php');        // Skickar till admin.php
    exit();                               // Förstärker med exit()...
  }
}

// Om vi har loopat igenom alla användare utan att få träff.....
header('location: index.php?mess=Du har angivit felaktiga inloggningsuppgifter.');

Tillagd cookie för automatisk inloggning

Hjälp, eller förklaring, till lösning [klicka för att visa]

Jag har byggt vidare på uppgiften med inlogg och inloggning av flera användare. Fokus i denna uppgiften är att kunna använda

  • När användaren kryssat i kryssrutan "håll mig inloggad" så skall en cookie skapas. (login.php)
  • Om användaren loggar in utan ikryssad kryssruta så skall cookie tas bort. (login.php)
  • Om det finns en cookie när användaren kommer till index så skall användaren loggas in. Detta sköter jag med länk för tillfället, det går ju att automatisers så att sidan kollar om det finns en cookie och skickar vidare användaren direkt. (index.php, via login.php) OBS! Om man kan manipulera COOKIEN så är detta inte den säkraste lösningen, se det mer som en övning att använda COOKIES.
  • Om användaren loggar ut så skall cookien finnas kvar. Mest för att kunna testa på ett rimligt sätt.
  • Lägg till en länk från admin där man kan ta bort cookien ifall den finns. (remove.php) Här har jag också testat att via en händelse avgöra vilken sida vi vill flyttas till.

Lösningsförslag [klicka för att visa]

Fördjupande uppgift med filer

Hjälp, eller förklaring, till lösning [klicka för att visa]

Om man utgår ifrån den lösningen som vi gjort tidigare med att lagra alla användare och lösenord i en assosiativ array så skall vi denna gången lagra alla användare och lösenord i en fil och sedan läsa in dem och lagra dem i en assosiativ array.

Lösningsförslag [klicka för att visa]

Den enda filen som förändras är login.php.

<?php
// öppna sessionen
session_start();

// Array som lagrar alla användare
$users = array();

// Läser in alla användare från fil
$file = fopen('users.txt', 'r');

while(!feof($file)){          // Loopar igenom filen
  $temp_user = array();       // Skapar en tom array
  $row = trim(fgets($file));  // Hämtar nästa rad i filen, trim() tar bort radbrytning
  if(strlen($row)>0){         // Om längden på raden är > 0
    // Dela upp strängen med explode(), lagra i arrayen $temp_user
    list($temp_user['user'], $temp_user['pwd']) = explode('|', $row);
    array_push($users, $temp_user);   // Lägg $temp_user till $users
  }
}

// hämta username och password från formuläret
$username = $_POST['username'];
$password = $_POST['password'];

// Loopar igenom $users
foreach($users as $user){
  // kollar om angivet användarnamn och lösnord finns i vår array över användare
  if($user['user'] == $username && $user['pwd'] == $password){
    $_SESSION['username'] = $username;    // Lagrar användarnamn i SESSION
    header('location: admin.php');        // Skickar till admin.php
    exit();                               // Förstärker med exit()...
  }
}

// Om vi har loopat igenom alla användare utan att få träff.....
header('location: index.php?mess=Du har angivit felaktiga inloggningsuppgifter.');

users.txt

admin|admin
user|user
bosse|abc123