I den här guiden ska vi skapa ett script som låter besökare registrera sig och sedan logga in. Detta kommer skapas med hjälp av PHP för själva scriptet och MySQL för databasen. Har du inga kunskaper inom detta kan du ta dig en till på min inledning till PHP för att få lite nödvändiga baskunskaper!

Skapa databasen

Först ut är skapandet av databasen vi ska lägga in användarna i. För att göra detta måste du först lägga till en databas och sedan klicka på SQL-knappen uppe till vänster över menyn.
phpmyadmin
Då kommer det upp ett tomt textfält där du fyller i:

CREATE TABLE users (
  id int(11) NOT NULL auto_increment,
  user varchar(30) NOT NULL default '',
  pass varchar(32) NOT NULL default '',
  email varchar(50) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

Du bör då få något i stil med detta:

phpmyadmin

Koppla upp dig till databasen

Databasuppkopplingen kommer att ske i ett separat dokument som vi sedan kan inkludera i de sidor vi behöver. Vi kallar den db.php.

<?php
$username = 'root';    // Sätt ditt användarnamn till databasen...
$password = '';         // ..och lösenordet
$db = 'mindatabas';   // Namnet på databasen.
$server = 'localhost';  // Servernamnet, brukar vara localhost!

// Kopplar upp sig till databasen
$con = mysql_connect($server, $username, $password);
mysql_select_db($db, $con);
?>

Inloggningen

Här vill vi skapa ett formulär där användaren fyller i sitt användarnamn och lösenord. Om man redan är inloggad vill vi skicka användaren vidare. Vi kallar detta dokument för loggain.php.

<?php
// Kopplar upp dig till databasen
include_once('db.php');
// Kollar om användaren redan är inloggad!
if (isset($_COOKIE['user'])) {
header('Location: hello.php'); // Skickar användaren vidare!
};
// Loggar ut användaren
if(isset($_GET['loggaut'])) {
setcookie('user', '', time() - 3600);
}
// Om användaren klickat på "Logga in"
if (isset($_GET['login'])) {
// Om användaren inte fyllt i båda fälten
if(!isset($_POST['user']) || !isset($_POST['password'])) {
echo '<p>Fyll i användarnamn och lösenord!</p>';
}
else {
// Nu är det dags att se om användaren finns och ifall lösenordet stämmer!
// Hämtar användare från databasen
$SQL = "SELECT id FROM users WHERE user = '".$_POST['user']."' AND pass = '".$_POST['password']."'";
  $rad = mysql_query($SQL);
  // Om användaren inte fanns
if (mysql_num_rows($rad) == 0){
    echo <p>'Fel användarnamn eller lösenord!</p>';
    exit;
  }
  else {
  // Om användaren fanns så ska en cookie sättas som visar att man är inloggad
  setcookie('user', $_POST['user']);
    header("Location: hello.php");
 }};
};
?>
<html>
<head>
</head>
<body>
<form action="loggain.php?login" method="post" enctype="multipart/form-data">
<p><label for="user">Användarnamn: <input type="text" name="user" id="user"/></label></p>
<p><label for="password">Lösenord: <input type="password" name="password" id="password"/></label></p>
<p><input type="submit" value="Logga in" /></p>
</form>
</body>
</html>

Registrering

Här ska själva registreringen ske. Vi vill att alla fält skall fyllas i och efter det ska informationen skickas till databasen. Vi döper dokumentet till registrera.php.

<?php
// Kopplar upp dig till databasen
include_once('db.php');

// Kollar om användaren redan är inloggad!
if (isset($_COOKIE['user'])) {
header('Location: hello.php'); // Skickar användaren vidare!
};
// Om man klickat på "Registrera"
if(isset($_GET['reg'])) {

// Om anvämdarnamnet är taget
$sql = "SELECT COUNT(*) FROM users WHERE user='{$_POST['username']}'";
$rad = mysql_query($sql);
if (mysql_result($rad, 0) > 0) {
echo '<p>Användarnamnet är upptaget!</p>';
}
// Om något av fälten inte är ifyllda
elseif(empty($_POST['username']) || empty($_POST['password']) || empty($_POST['password2'])
|| empty($_POST['email']) ) {
echo '<p>Fyll i alla fält!</p>';
}
// Om lösenorden inte stämmer överens
elseif($_POST['password'] != $_POST['password2']) {
echo '<p>Lösenorden stämmer inte överens!</p>';
}
// Om allt stämmer ska användaren läggas till
else {
$sql = "INSERT INTO users(user, pass, email)
VALUES('{$_POST['username']}', '{$_POST['password']}', '{$_POST['email']}')";
mysql_query($sql);
// Logga in användaren
setcookie('user', $_POST['username']);
header('Location: hello.php');
exit;
}};
?>
<html>
<head>
</head>
<body>
<form action="registrera.php?reg" method="post" enctype="multipart/form-data">
<p><label for="username">Användarnamn: <input type="text" name="username" id="username"/></label></p>
<p><label for="password">Lösenord: <input type="password" name="password" id="password"/></label></p>
<p><label for="password2">Upprepa: <input type="password" name="password2" id="password2"/></label></p>
<p><label for="email">Email: <input type="text" name="email" id="email"/></label></p>
<p><input type="submit" value="Registrera" /></p>
</form>
</body>
</html>

OBS! WordPress-pluginet som visar script har en bugg som gör att på rad 19 och 20 står det emptyempty, detta ska bytas ut mot ett enkelt empty!

Skydda dokument

Om du vill skydda ett dokument från folk som inte är inloggade, i mitt fall hello.php, så kollar du enkelt av ifall cookien som sätts när du loggar in finns. Gör den inte det så skickas man till loggain.php.

<?php
// Kollar om användaren verkligen är inloggad!
if (!isset($_COOKIE['user'])) {
header('Location: loggain.php'); // Skickar användaren till login-sidan!
};
?>

Skydda sidor från inloggade

Vissa sidor, som registrering och inloggnings-sidor vill man skydda från de som redan är inloggade. Då är det bara att göra tvärt om. Ifall cookien är satt så skickas man till hello.php.

<?php
// Kollar om användaren redan är inloggad!
if (isset($_COOKIE['user'])) {
header('Location: hello.php'); // Skickar användaren vidare!
};
?>

Logga ut

Logga ut-länken ser ut på följande vis:

<a href="loggain.php?loggaut" title="Logga ut!">Logga ut</a>

Observera

Detta är varken skyddat från spambotar eller allmänt destruktiva personer och bör därför endast användas till små sajter eller som grund till ett mer avancerat system. Detta är mer en guide för att visa hur ett login-system är uppbyggt och hur man skickar och tar emot information från en databas.