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.

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:
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.
Tweets!


Skulle vilja rekommendera en md5($pass .’salttext’); på lösenordet samt en kontroll så ingen modifierar din sql sträng i formuläret.
Fin guide annars :)
Helt sant! Det finns mycket man bör lägga till för att det ska bli säkert att använda, men somsagt, detta är en bra grund! :)
Precis :)
Personligen så föredrar jag sessions, men använder man sig av cookies så bör man även kontrollera så att det är rätt IP-adress. Dvs, att din IP-adress sparas i databasen tillsammans med en hash när du loggar in, så att ingen annan kan stjäla dina cookies och automatiskt bli inloggad.
Anledningen till att jag väljer cookies är att du då enkelt kan göra den tidsbaserad och lägga till funktionen ”kom ihåg mig”. Vad jag vet är det svårt med sessions då de dör så fort du stänger ner webbläsaren.
Tjenare,det går och registera sig,men när jag går in på login.php så står det:
// 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 ‘
Fyll i användarnamn och lösenord!
‘; } 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
‘Fel användarnamn eller lösenord!
‘; 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”); }}; }; ?>
Vet du vad som är fel?
@Drager
Jag skulle gissa på att du har döpt loggain.php till loggain.html.
Eller saknar .
Ja, precis som Niklas säger verkar det som att du använder något annat format än php!
Får Felet:
Fatal error: Call to undefined function emptyempty() in C:\xampp\htdocs\Hemsida\Bajs\registrera.php on line 19
Det är tyvärr en bugg i kod-visaren på min sajt. Ta bort ett ”empty” så ska det fungera. Felet hittar du som sagt på rad 19!
Tjennare, jätte bra guide du lagt upp!
Jag har lite problem med loggain.php och registrera.php
När jag registrerar en användare när jag klickar på registrera-knappen så kommer detta upp (användaren blir registrerad och hamnar i tabellen på phpmyadmin sidan iallafall)
Warning: Cannot modify header information – headers already sent by (output started at /home/*****/public_html/projekt/login/db.php:10) in /home/*****/public_html/projekt/login/registrera.php on line 33
Warning: Cannot modify header information – headers already sent by (output started at /home/*****/public_html/projekt/login/db.php:10) in /home/*****/public_html/projekt/login/registrera.php on line 34
Sedan på loggain.php när jag försöker logga in med en användare jag vet finns i databasen så kommer detta meddelande upp:
Warning: Cannot modify header information – headers already sent by (output started at /home/91emlu35/public_html/projekt/login/db.php:10) in /home/91emlu35/public_html/projekt/login/loggain.php on line 30
Warning: Cannot modify header information – headers already sent by (output started at /home/*****/public_html/projekt/login/db.php:10) in /home/*****/public_html/projekt/login/loggain.php on line 31
Kan någon hjälpa mig och förklara vad som är felet?
//Emil
Hm, felet är att det redan har satts en cookie eller något dylikt när den försöker sätta inloggnings-cookien… Har du modifierat scriptet något innan du testa?
Tja!
På loggain.php står det:
// 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 ‘
Fyll i användarnamn och lösenord!
‘; } 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
‘Fel användarnamn eller lösenord!
‘; 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”); }}; }; ?>
Vad kan vara felet?
Hej!
Jag försöker integrera det här scriptet i en sida och vill inte ha en sida för inloggning utan jag vill att inloggningsfälten ska vara integrerade i en på alla sidor om man inte är inloggad. Är man inloggad ska där istället finnas information om den inloggade användaren.
Problemet är då att koden kommer efter att sidan redan skickat header information så att redirecta och sätta cookies osv funkar inte. Hur löser man det problemet?
Tacksam för hjälp!
Heej jag undrar om nån vet nåt program som cutenews så att t.ex när nån ska skriva en nyhet och den behöver inte röra index utan bara loggar in på tyå sånt om nån e expert på cutenews så hjälp mig osså
En mycket bra turtorial, men jag får inte till ”skydda dokument” och ”skydda sidor från inloggade”. Hur jag än försöker så kommer jag åter till log-in- sidan då jag redan loggat in respektive till log-in-sidan då jag trycker på forum, vilket kräver just inloggning. VAD gör jag för fel? Sätter jag HeaderLocation på fel ställe i scriptet?? Tacksam för hjälp
Hej!
Jag får följande fel med koden för registreringen.
Notice: Undefined index: namn in C:\Program\wamp\www\registrera\reg.php on line 13
Användarnamnet är upptaget!
PHP Koden som felet pekar mot:
// Om anvämdarnamnet är taget
$sql = ”SELECT COUNT(*) FROM kund WHERE foretagsnamn=’{$_POST['namn']}’”;
$rad = mysql_query($sql);
if (mysql_result($rad, 0) > 0) {
echo ‘Användarnamnet är upptaget!’;
Har ändrat i formuläret till egna namn:
orm action=”reg.php?reg” method=”post” enctype=”multipart/form-data”>
Användarnamn:
Lösenord:
Upprepa:
Email:
Någon idé varför det inte fungerar?
Hej och tack så jätte mycket för denna guide!
Ni har hjälpt mig jätte mycket!
Men jag har ett problem när jag skulle göra Loggain.php, värkar som om rätt många har fått problemet med Loggain.php med.
Får asså detta när jag loggar in:
// Kopplar upp dig till databasen include_once(‘db.php’); // Kollar om användaren redan är inloggad! if (isset($_COOKIE['user'])) { header(‘Location: Home.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 ‘
Fyll i användarnamn och lösenord!
‘; } 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
‘Fel användarnamn eller lösenord!
‘; exit; } else { // Om användaren fanns så ska en cookie sättas som visar att man är inloggad setcookie(‘user’, $_POST['user']); header(”Location: home.php”); }}; }; ?>
Användarnamn:
Lösenord:
Tror detta beror på att när jag lägger in koden som ligger över så blir den ”grå” som om den inte funkar. Men koden i body får färger som visar att det funkar.
Tack så jätte mycket hälsningar Johan =)
Ni som får problem som killen över mig, lägg koden längst upp och lägg till <? över hela skiten.
Hallå där då det har varit soppas mycket problem med loggain.php öppna logga in .php och lägg till <?php längst upp sen sök efter
echo ‘Fel användarnamn eller lösenord!’;
och byt ut till
echo ‘Fel användarnamn eller lösenord!’;
så blir ni av med felet skulle uppskatta ifall ägarn till scripten uppdaterade detta så de står på tutorialen.
Har fixat det nu!
För alla er som har detta problem:
// Kopplar upp dig till databasen include_once(’db.php’); // Kollar om användaren redan är inloggad! if (isset($_COOKIE['user'])) { header(’Location: Home.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 ‘
Fyll i användarnamn och lösenord!
‘; } 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
‘Fel användarnamn eller lösenord!
‘; exit; } else { // Om användaren fanns så ska en cookie sättas som visar att man är inloggad setcookie(’user’, $_POST['user']); header(”Location: home.php”); }}; }; ?>
Problemet är att ni måste lägga till <?PHP i början av dokumenten och sedan spara filen som .php och inte .html
Hej!
Jag antar utan att våga mig på en garanti; att ett <?php saknas i början av koden till loggain.php
Tjena, jättebra guide, men har ett problem lägger det direkt upp min databas och när jag försöker hitta det när jag går in på min domän så kommer inget upp :S
Utveckla gärna. Vad är det som ska komma upp?
Tack för en bra tutorial. En liten fråga. Som test så la jag till loggaut -länken i hello.php. Men när jag klickar på länken som ju pekar på loggain.php så verkar det som att cookien inte tas bort eftersom jag kommer tillbaka till hello.php.
Tack på förhand
Emil
Hej igen,
Slarv av mig, jag hade vid en tidigare felsökning bytt namnet på min cookie, dvs ändrat ”user” till något annat och sen inte uppdaterat överallt. Nu funkar det.
/Emil
Perfekt. Kul att du gillade guiden!
Hej, bra script förutom en sak.. förmpdoligen jag som gjort fel…
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /home/a3455845/public_html/Login/db.php on line 9
Kolla så att rad 9 verkligen stämmer överens med den som står i guiden. Om inte, byt ut till:
mysql_select_db($db, $con) or die(mysql_error());
Så kommer du få ett mer utförligt error-meddelande!
Någonting har gått helt galet… börjar om från början. Jag använder 000webhost.com de har både mysql och php så det borde funka.. aja, vi får se om det funkar den här gången
Här kommer jag och min IQ och säger: jag glömde ändra localhost till det andra XD
Skönt att det fungerar nu då!
Hej och tack för en en fin guide!
Jag är nybörjare inom php, och har följt allt steg för steg och lagt upp på min server för att testa, problemet är att inget syns när man går in på sidorna.
Så det jag undrar är om jag ska skriva html sidor och länka till php, eller om jag ska baka in html i php filerna?
Jag har provat skriva html i phpfilerna men det syns ända inget där ;(
Tacksam om jag kan få hjälp.
Får du några error-meddelanden? Du ska skriva HTML i PHP-filerna. Det är endast det som innanför < ?php och ? > som kommer tolkas som PHP. Har du kopierat allt rakt av eller har du ändrat om?
Nej jag får inte error, bara helt vitt.
Det ända jag har ändrat är i db.php filen till mina uppgifter
Hmm, det innebär nog att du har error-meddelanden avslaget. Har du dubbelkollat så att inställningarna stämmer i db.php och att mysql-databasen är korrekt?
Som jag förslog till personen ovan kan du byta ut uppkopplings-delen i db.php till
$con = mysql_connect($server, $username, $password) or die(mysql_error());
mysql_select_db($db, $con) or die(mysql_error());
Detta tillägg gör att om något går snett så skriver PHP ut anledningen.
Hej och tack för hjälpen!
Nu har jag kommit en bit på vägen, jag kollade .db filen och bytte lösenord.
Men ”loggain.php” är fortfarande helt vit?
registrera.php fungerar, men jag kan ju inte logga in eftersom loggain.php är vit?
Med största sannolikhet är det något PHP-error där också. Det allra bästa vore om du på något vis, genom ditt webbhotell, kunde aktivera PHP-errors. Det skriver då ut ett error-meddelande där det står på vilket rad och i vilken fil du hittar felet i. Det är riktigt svårt att gissa sig fram.
Nu har jag slagit på PHP-errors, och när jag skriver in allt på registrera.php och sen går vidare får jag ett felmeddelande: ”Fatal error: Call to undefined function emptyempty()”….”on line 21″
Har försökt kolla men ser inget fel?
Perfekt! Det är visst fel på min kodvisare här på designskolan. emptyempty ska vara empty. Prova om det fungerar nu!
emtyemty fanns på raden under också.
loggain.php hade ett fel på rad 25 echo ‘Fel användarnamn eller lösenord!’; lilla fnutten ska flyttas fram innan .
Men nu fungerar det som det ska!
Ännu en gång tack för hjälpen!
Du har ju min mailadress om du skulle behöva hjälp med något!
(men som du förstår är jag ingen expert på programmering ;) )
Grymt, kul att det fungerar nu! Har även lagt till en varning om emptyempty-buggen.
jag stöter på ett par problem.
Det första är vid registrering. när sidan kommer upp är användarenamn och password redan ifyllt med root ******
tar jag bort dem och fyller i nytt material får jag felmeddelandet :
Warning: Cannot modify header information – headers already sent by (output started at E:\xampp\htdocs\medlem\db.php:9) in E:\xampp\htdocs\medlem\registrera.php on line 33
Warning: Cannot modify header information – headers already sent by (output started at E:\xampp\htdocs\medlem\db.php:9) in E:\xampp\htdocs\medlem\registrera.php on line 34
Men användaren registreras ändå i databasen.
Och när jag ska försöka logga in så är även där namn och lösen ifyllt med Root *****
och där får jag ist detta felmeddelandet:
Warning: Cannot modify header information – headers already sent by (output started at E:\xampp\htdocs\medlem\db.php:9) in E:\xampp\htdocs\medlem\loggain.php on line 30
Warning: Cannot modify header information – headers already sent by (output started at E:\xampp\htdocs\medlem\db.php:9) in E:\xampp\htdocs\medlem\loggain.php on line 31
Det enda jag har ändrat är att den ska visa till hej.php ist för hello.php på samtliga ställen.
Jag får fel på registera.php på rad 24!!
Snälla hjälp!
Tack så sjukt mycket! Just detta vad jag tittade efter. Du är en fantastisk person du som skrev denna tutorial. Älskar att det är så kortfattat och beskriver bra vad som hör till vad.