aanmelden-inloggen

Vragen/antwoorden betreffende het maken van je eigen website.

filius
Lid geworden op: 20 mar 2009, 17:13

19 jan 2011, 14:18

Graag wilde ik een inlog formulier op mijn website zodat onze leden zich kunnen aanmelden om op een beveiligde pagina te komen .Hoe kan ik zo iets maken.Met PHP of hoe? Ik heb een server die php ondersteund"one.com"

ultddave
Lid geworden op: 11 mei 2009, 13:59
Locatie: Limburg > Genk

19 jan 2011, 17:13

Heb je een database (MySQL bijvoorbeeld) ter beschikking? ;)

In het algemeen moet het zo gebeuren:
- HTML formulier maken op pagina1. Die bevat bijvoorbeeld 2 invoervelden (naam+wachtwoord), de waardes hiervan worden doorgestuurd als "POST" variabelen (geen "GET" gebruiken bij loginpagina's).
- Op de PHP pagina (pagina2 bijvoorbeeld) ga je die waarde van de POST variabelen opvragen.
- Die waardes ga je dan evalueren (kijken of ze niet NULL zijn etc).
- Indien de waardes geldig zijn, ga je een connectie opzetten met de database.
- Dan ga je een SQL query uitvoeren die kijkt of die naam voorkomt in de database en gelinkt is aan dat wachtwoord.
- Indien niet, laat je een foutmelding zien.
- Indien wel kan je de inhoud van de ledenpagina laten zien.
- (Indien je werkt met meerdere pagina's die enkel voor leden beschikbaar zijn, moet je bij het inloggen een SESSION variabele aanmaken met een bepaalde waarde.)
- (Deze waarde moet dan gechecked worden bij elke ledenpagina dmv een korte "if-else" test)

Indien je leden gaat laten registreren:
- Voer een hash functie uit op het wachtwoord via PHP. (daarvoor bestaan functies)

Indien je de leden zelf gaat toevoegen aan de database, kan je dat eventueel achterwege laten. Maar het is veiliger met een hash.

Ik moet binnekort zelf zo een script uitwerken voor een website, dus als ik het af heb, zal ik het hier plaatsen. ;)

PS: Elke pagina die PHP code bevat, moet de extensie ".php" krijgen. Je kan tevens HTML, CSS, JavaScript gebruiken in pagina's met extensie ".php". Dus daar moet je geen schrik voor hebben. ;)

PS:
De database kan best 3 of 4 velden bevatten:
id (BIGINT, autoincrement, primary key, not null)
naam(VARCHAR(50) bijvoorbeeld, not null)
wachtwoord(VARCHAR(50) bijvoorbeeld, not null)
Optioneel: emailadres(VARCHAR(70) bijvoorbeeld, not null)

Eventueel kan je ook een registratiedatum en dergelijke bijhouden, hangt af van het doel van de website. ;)

PS: Je kan uiteraard ook met cookies werken ipv sessions.

Mvg,
Dave
.NET en Java Programmeur

ultddave
Lid geworden op: 11 mei 2009, 13:59
Locatie: Limburg > Genk

07 feb 2011, 19:33

Pagina: loginscript.php

Code: Selecteer alles

<?php
	session_start();
?>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" >
	<head> 
		<meta name="description" content="beschrijving website" />
		<meta name="keywords" content="zoekwoorden, website, gescheiden, door, komma" />
		<meta name="robots" content="index, follow" />
		<title> Titel </title>
		<link href="style.css" rel="stylesheet" type="text/css" />
	</head>
	<body>
		<?php
			
			if(!isset($_SESSION[session_name()]))
			{
				if(isset($_POST['username']) && isset($_POST['password']))
				{
					$username = $_POST['username'];
					$password = $_POST['password'];
					
					$mysql = mysql_connect('localhost', 'root', '');
					if (!$mysql) {
						die('Could not connect: ' . mysql_error());
					}
					
					mysql_select_db('dave', $mysql);
				
					$result = mysql_query('SELECT * FROM users WHERE username="'.mysql_real_escape_string($username).'" AND password="'.mysql_real_escape_string($password).'"');
					if(mysql_num_rows($result) > 0) 
					{
						echo 'U bent nu ingelogd';
						$_SESSION[session_name()] = 1;
					} 
					mysql_close($mysql);
				}
			}
			else
			{
				echo 'Welkom';
			}
			
			if(!isset($_SESSION[session_name()]))
			{
				echo 'Gebruikersnaam of wachtwoord is incorrect';
				?>
				<form method="post" action="loginscript.php">
					Naam: <input type="text" maxlength="20" name="username" />
					<br/>
					Wachtwoord <input type="password" maxlength="20" name="password" />
					<br/>
					<input type="submit" name="submit" value="Login" />
				</form>
				<?php
			}
				
		?>
	</body>
</html>
Op elk pagina voor de leden:

Code: Selecteer alles

<?php
	session_start();
?>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" >
	<head> 
		<meta name="description" content="beschrijving website" />
		<meta name="keywords" content="zoekwoorden, website, gescheiden, door, komma" />
		<meta name="robots" content="index, follow" />
		<title> Titel </title>
		<link href="style.css" rel="stylesheet" type="text/css" />
	</head>
	<body>
		<?php
			if(!isset($_SESSION[session_name()]))
			{
				?>
				<form method="post" action="loginscript.php">
					Naam: <input type="text" maxlength="20" name="username" />
					<br/>
					Wachtwoord <input type="password" maxlength="20" name="password" />
					<br/>
					<input type="submit" name="submit" value="Login" />
				</form>
				<?php
			}
			else
			{
				// Hier komt de inhoud.
				echo 'U bent ingelogd en kan deze tekst lezen';
			}
				
		?>	
	</body>
</html>

In het loginscript.php moet je deze zaken veranderen:
$mysql = mysql_connect('localhost', 'root', '');
In bovenstaande regel moet je je database wachtwoord tussen die 2 laatste aanhalingstekens plaatsen. Bijvoorbeeld:
$mysql = mysql_connect('localhost', 'root', 'mijnwachtwoord');
En:
mysql_select_db('dave', $mysql);
Daar moet je 'dave' vervangen door de naam van je database.

In de database moet een tabel zijn genaamd "users". Met zoiezo een kolom genaamd "username" waarin de gebruikersnaam van de gebruiker staat. En een kolom "password" met het wachtwoord van de gebruiker.

Indien ze anders zouden heten kan je dat hier aanpassen:
$result = mysql_query('SELECT * FROM users WHERE username="'.mysql_real_escape_string($username).'" AND password="'.mysql_real_escape_string($password).'"');
Het woord "users" achter "FROM" duid de tabel naam aan. Dus als je tabel 'gebruikers' heet, wordt dat SELECT * FROM gebruikers .....

En dan de stukken username=... en password=... moet je vervangen door de kolomnaam die je dan gebruikt voor de gebruikersnaam & wachtwoord.

Dus als je tabel gebruikers heet, en je kolommen naam en wachtwoord heten, wordt het dit:
$result = mysql_query('SELECT * FROM gebruikers WHERE naam="'.mysql_real_escape_string($username).'" AND wachtwoord="'.mysql_real_escape_string($password).'"');
Bovenstaande versie bevat geen hashing voor de wachtwoorden te beveiligen, alsook geen ondersteuning voor cookies. Dus als je inlogt, blijf je enkel ingelogd totdat je je browser sluit. Als je daarna terug de site bezoekt, moet je terug inloggen.

Elke pagina die de gebruiker kan bezoeken, ongeacht of deze voor gasten en/of leden zichtbaar is, moet:
<?php
session_start();
?>
bovenaan hebben staan. De extensie moet van alle pagina's ook .php zijn ipv .html dan. Anders wordt de code niet uitgevoerd. ;)

PS: Dit is een zeer simpel login script, het kan uiteraard veel uitgebreider.

Mvg,
Dave
.NET en Java Programmeur

filius
Lid geworden op: 20 mar 2009, 17:13

21 mar 2011, 11:38

Sorry voor de late reactie.Ik ben er mee bezig geweest en het is nu toch gelukt, waarvoor dank aan Ultddave.