Det kör jag med. Har inte gjort det själv men det funkar klockrent.
Tabellstruktur
#
# Struktur för tabell `members`
#
CREATE TABLE members (
id int(11) NOT NULL auto_increment,
user varchar(30) NOT NULL default '',
pass varchar(30) NOT NULL default '',
name varchar(50) NOT NULL default '',
email varchar(50) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM;
conn.php (databasuppkopplingen)
<?php
// Byt ut mot dina inloggningsuppgifter och databas
$mysql_server = "localhost";
$mysql_user = "user";
$mysql_password = "malte";
$mysql_database = "members_area";
$conn = mysql_connect($mysql_server, $mysql_user, $mysql_password);
mysql_select_db($mysql_database, $conn);
// En funktion att användas när magic_quotes_gpc inte är satt. För att förhindra SQL-injections, eller i lidrigare fall MySQl-fel.
function db_escape ($post)
{
if (is_string($post)) {
if (get_magic_quotes_gpc()) {
$post = stripslashes($post);
}
return mysql_real_escape_string($post);
}
foreach ($post as $key => $val) {
$post[$key] = db_escape($val);
}
return $post;
}
/*
Se till att det inte finns några dolda tecken, typ radbyte
eller mellanslag, efter den avslutande PHP-taggen !!!
*/
?>
index.php
<?php
session_start(); // Alltid överst på sidan
include "conn.php"; // Databasanslutningen
// Inloggning
if (isset($_POST['submit'])){
$_POST = db_escape($_POST);
$sql = "SELECT id FROM members
WHERE user='{$_POST['user']}'
AND pass='{$_POST['passwd']}'";
$result = mysql_query($sql);
// Hittades inte användarnamn och lösenord
// skicka till formulär med felmeddelande
if (mysql_num_rows($result) == 0){
header("Location: index.php?badlogin=");
exit;
}
// Sätt sessionen med unikt index
$_SESSION['sess_id'] = mysql_result($result, 0, 'id');
$_SESSION['sess_user'] = $_POST['user'];
header("Location: welcome.php");
exit;
}
// Utloggning
if (isset($_GET['logout'])){
session_unset();
session_destroy();
header("Location: index.php");
exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<title>Index</title>
</head>
<body>
<?php
// Om inte inloggad visa formulär, annars logga ut-länk
if (!isset($_SESSION['sess_user'])){
echo "<h3>Logga in</h3>\n";
// Visa felmeddelande vid felaktig inloggning
if (isset($_GET['badlogin'])){
echo "Fel användarnamn eller lösenord!<br>\n";
echo "Försök igen!\n";
}
?>
<form action="index.php" method="post">
Användarnamn:<br>
<input type="text" name="user"><br>
Lösenord:<br>
<input type="password" name="passwd"><br>
<input type="submit" name="submit" value="Logga in">
</form>
Inte medlem ?<br>
<a href="register.php">Registera dig</a>
<?php
} else {
echo "<a href=\"index.php?logout=\">Logga ut</a>\n";
}
?>
</body>
</html>
register.php (för att registrera sig)
<?php
session_start(); // Alltid överst på sidan
include "conn.php"; // Databasanslutningen
if (isset($_POST['submit'])){
$_POST = db_escape($_POST);
// Tag bort eventuella blanksteg i början eller slutet
foreach($_POST as $key => $val){
$_POST[$key] = trim($val);
}
//Kolla efter tomma fält
if (empty($_POST['user']) || empty($_POST['passwd']) ||
empty($_POST['name']) || empty($_POST['email'])) {
$reg_error[] = 0;
}
// Kolla om användarnamnet är upptaget
$sql = "SELECT COUNT(*) FROM members WHERE user='{$_POST['user']}'";
$result = mysql_query($sql);
if (mysql_result($result, 0) > 0) {
$reg_error[] = 1;
}
// Kolla om e-post kan tänkas vara ok
if (!preg_match('/^[-A-Za-z0-9_.]+[@][A-Za-z0-9_-]+([.][A-Za-z0-9_-]+)*[.][A-Za-z]{2,6}$/', $_POST['email'])) {
$reg_error[] = 2;
}
// Kolla så att lösenorden stämmer överrens
if ($_POST['passwd'] != $_POST['passwd2']) {
$reg_error[] = 3;
}
// Inga fel? Spara och logga in samt skicka till välkomstsida
if (!isset($reg_error)) {
$sql = "INSERT INTO members(user, pass, name, email)
VALUES('{$_POST['user']}', '{$_POST['passwd']}', '{$_POST['name']}', '{$_POST['email']}')";
mysql_query($sql);
$_SESSION['sess_id'] = mysql_insert_id();
$_SESSION['sess_user'] = $_POST['user'];
header("Location: welcome.php");
exit;
}
} else {
// Sätt variabler för tomt formulär
for ($i=0; $i<4; $i++) {
$back[$i] = "";
}
}
$error_list[0] = "Alla fält är inte infyllda";
$error_list[1] = "Användarnamnet är upptaget";
$error_list[2] = "Felaktig e-postadress";
$error_list[3] = "Lösenorden stämmer inte överrens";
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<title>Registrera dig</title>
</head>
<body>
<h3>Registrera dig</h3>
<?php
if (isset($reg_error)){
echo "Något blev fel:<br>\n";
echo "<ul>\n";
for ($i=0; $i<sizeof($reg_error); $i++) {
echo "<li>{$error_list[$reg_error[$i]]}</li>\n";
}
echo "</ul>\n";
$back[0] = stripslashes($_POST['user']);
$back[2] = stripslashes($_POST['name']);
$back[3] = stripslashes($_POST['email']);
}
?>
<form action="register.php" method="post">
<table cellspacing="3">
<tr>
<td>Användarnamn:</td>
<td><input type="text" name="user" value="<?=$back[0] ?>"></td>
</tr>
<tr>
<td>Lösenord:</td>
<td><input type="password" name="passwd" value=""></td>
</tr>
<tr>
<td>Repetera lösenord:</td>
<td><input type="password" name="passwd2" value=""></td>
</tr>
<tr>
<td>Ditt namn:</td>
<td><input type="text" name="name" value="<?=$back[2] ?>"></td>
</tr>
<tr>
<td>E-postadress</td>
<td><input type="text" name="email" value="<?=$back[3] ?>"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="submit" value="Spara dina uppgifter">
</td>
</tr>
</table>
</form>
</body>
</html>
welcome.php (sida man kommer till efter inloggning)
<?php
session_start(); // Alltid överst på sidan
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])){
header("Location: index.php");
exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<title>Välkommen</title>
</head>
<body>
Välkommen <?=$_SESSION['sess_user'] ?><br>
<a href="index.php?logout=">Logga ut</a>
</body>
</html>