Scripts

Login, rechten, sessies

Voorbeeld staat online.. Voor een voorbeeld als student inloggen doe: loginnaam: s263681 wachtwoord: pass Voor docent voorbeeld loginnaam: d000000 wachtwoord: pass Ik heb dit script zelf geschreven voor een schoolopdracht. Het was de bedoeling dat een student in zou kunnen loggen en dan kreeg die zijn cijferlijst te zien. Wanneer een docent inlogt, dan krijgt die een heel andere pagina. Het script werkt met sessies, waaruit die verschillende gegevens haalt. Er zit een Setup.PHP bij, waarmee je database aan kan worden gemaakt, met een aantal voorbeeldgegevens. De sessie verloopt na een korte periode (10 minuten, is aan te passen in expire.php) Het script is gemakkelijk veiliger te maken door je password gecodeerd weg te schrijven. Een kleine aanpassing in het script is dan voldoende, staat aangegeven waar dat kan! (voor de testers onder ons, namen van de pagina's is allemaal lowercase)

login-rechten-sessies
--- INDEX.PHP---

<?php
[code]session_start();

// wanneer alle velden zijn ingevuld dan hier verder
if (isset($_POST['username']) && isset($_POST['password']) && $_POST['username'] <> NULL && $_POST['password'] <> NULL){
	// standaart is er geen fout
	$fout = "nee";		
	include("verbinden.php");
	// zoeken naar de gebruiker, hier ook de aanpassing doen voor encryptie 
	$gebruiker_sql = "SELECT id,type FROM user WHERE loginnaam = '" . $_POST['username'] . "' AND wachtwoord = '" . $_POST['password'] . "'";
	$gebruiker_result = mysql_query($gebruiker_sql);
	// wanneer er een gebruiker is gevonden dan hier verder
	if ($gebruiker_result){
		$gebruiker = mysql_fetch_array($gebruiker_result);
	// controleren of het geselecteerde type van de gebruiker overeenkomt
		if ($gebruiker['type'] == $_POST['type']){
			//$login meegeven (ivm foutafhandeling later)
			$login = "succes";
			// de sessie variabelen vullen
			$_SESSION['id'] = $gebruiker['id'];
			include("tijd.php");
			// de expiretijd de 1e keer instellen
			$expire =  mktime($uur,$minuut+10,$seconden,$maand,$dag,$jaar);
			$_SESSION['expire'] = $expire;
			$_SESSION['type'] = $gebruiker['type'];
			echo ("U bent ingelogd, een moment gedult alstublieft, u wordt doorgestuurd");
			// met javascript doorlinken naar een andere pagina. De sessie blijft bestaan!
?>

<html>
<head>
<meta http-equiv="refresh" content="2;URL=index2.php" />
</head>
</html>

<?
			}
		else {
			// wanneer type niet overeenkomt dan $login = "type"
			$login = "type";
			}
		}
		
// FOUTAFHANDELING:

// als de typen van de login niet overeenkomen dan fout geven		
	if (isset($login) && $login == "type"){
		$fout = "ja";
		echo ("<font color=red>U hebt niet de bevoegdheid om als dit type in te loggen!</font>");
		}
// als $login niet bestaat, is er geen record in de DB gevonden met de user en pass combinatie
	else if (!isset($login)){
		$fout = "ja";
		echo ("<font color=red>De combinatie van gebruikersnaam en wachtwoord is onjuist</font>");
		}
	}

// wanneer maar 1 van de 2 velden is ingevuld fout geven
else if (isset($_POST['username']) || isset($_POST['password'])){
	$fout == "ja";
	echo ("<font color=red>Vul beide velden in voordat u in kan loggen</font>");
	}
	
// wanneer niets ingevuld of wanneer er een fout is, formulier weergeven
if (!isset($_POST['username']) && !isset($_POST['password']) || $fout == "ja"){
?>
<form name="form1" method="post" action="index.php">
  <table width="80%" border="0">
    <tr>
      <td width="15%">Gebruikersnaam:</td>
      <td><input name="username" type="text" id="username"></td>
    </tr>
    <tr>
      <td>Wachtwoord:</td>
      <td><input name="password" type="password" id="password"></td>
    </tr>
	<tr>
      <td>Type:</td>
      <td><select name="type">
	  	  <option value="docent">Docent</option>
		  <option value="student">Student</option>
		  </select></td>
    </tr>
  </table>
  <p>
    <input name="Login" type="submit" id="Login" value="Login">
  </p>
</form>


<?php
}
?>[/code]

---INDEX2.PHP---

[code]<?php
session_start();

// in expire.php wordt gekeken of de tijd verlopen is
include ("expire.php");
	
//als de sessie bestaat, dan gaat die hier verder
if (isset($_SESSION['id'])){
	include("verbinden.php");
	if ($_SESSION['type'] == "student"){
		// wanneer als student ingelogd, dan functie student aanroepen, id meegeven
		student($_SESSION['id']);
		}
		// wanneer als docent ingelogd, dan functie docent aanroepen, id meegeven
	else if ($_SESSION['type'] == "docent"){
		docent($_SESSION['id']);
		}
	}

// als de sessie niet bestaat, geef melding en ga terug naar index.php
else if(!isset($_SESSION['id'])){
	echo ("<font color=red>U bent niet ingelogd!</font>");
?>

<html>
<head>
<meta http-equiv="refresh" content="2;URL=index.php" />
</head>
</html>

<?
	}

// de functie student, krijgt een ID mee, om later gegevens uit DB te kunnen halen.
function student($id){
	echo $id;
	echo ("<br><a href=uitloggen.php>Uitloggen</a><br><br>");
	echo ("<br>U bent ingelogd als student");
	}

// de functie docent, krijgt een ID mee, om later gegevens uit DB te kunnen halen.
function docent($id){
	echo $id;
	echo ("<br><a href=uitloggen.php>Uitloggen</a><br><br>");
	echo ("<br>U bent ingelogd als docent");
	}
?>[/code]


---TIJD.PHP---

[code]<?php
	$uur = date("H");
	$minuut = date("i");
	$seconden = date("s");
	$dag = date("d");
	$maand = date("m");
	$jaar = date("Y");
			
?>[/code]


---EXPIRE.PHP---

[code]<?php

// tijd.php meegeven
include ("tijd.php");

// var maken met de tijd die er nu is
$nu = mktime($uur,$minuut,$seconden,$maand,$dag,$jaar);
// var maken voor de tijd dat de sessie verloopt
$expire =  mktime($uur,$minuut+10,$seconden,$maand,$dag,$jaar);

// wanneer de expiretijd in de sessie kleiner dan de tijd van nu, melding geven en uitloggen.
	if (isset($_SESSION['expire']) && $_SESSION['expire'] < $nu){
	echo ("<font color=red>Je sessie is verlopen, log opnieuw in</font><br>");
	$fout = "ja";
	include_once("uitloggen.php");
	exit;
	}
// wanneer de sessie nog geldig is, tijd vernieuwen
	else {
	$_SESSION['expire'] = $expire;
		}
			
?>[/code]


---UITLOGGEN.PHP---

[code]<?php
session_start();
session_destroy();
// sessie is beëindigd, ga terug naar de loginpagina
?>

<html>
<head>
<meta http-equiv="refresh" content="0;URL=index.php" />
</head>
</html>

<?

exit();
?>[/code]


---VERBINDEN.PHP---

[code]<?php


//Hier wordt de verbinding met de database gemaakt
 $db = @mysql_connect("localhost","root") or die ( "Het maken van de verbinding met de database is mislukt");
  	@mysql_select_db(cijfersysteem,$db);
  
?>[/code]



---SETUP.PHP---

[code]<?php
include("verbinden.php");
$db_SQL_create="CREATE DATABASE `cijfersysteem` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci";
$bool=mysql_query($db_SQL_create);
if($bool==1) echo ("<center>Het aanmaken van de database is gelukt<br>");
	if($bool<>1) echo ("<center><font color=red>Er is een fout opgetreden bij het maken van de database.<br></font>");
$db_select="USE cijfersysteem";
$bool=mysql_query($db_select);
if($bool==1) echo ("<center>U werkt nu in de database<br>");
	if($bool<>1) echo ("<center><font color=red>Er is een fout opgetreden bij openenen van de database.<br></font>");

$create_user="CREATE TABLE `user` (
  `id` int(6) NOT NULL auto_increment,
  `loginnaam` varchar(20) NOT NULL default '',
  `wachtwoord` varchar(20) NOT NULL default '',
  `type` varchar(7) NOT NULL default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `username` (`loginnaam`)
)";
$bool=mysql_query($create_user);
if($bool==1) echo ("Usertabel is aangemaakt<br>");
	if($bool<>1) echo ("<center><font color=red>Er is een fout opgetreden bij het maken van userteabel.<br></font>");


$user_insert="INSERT INTO `user` VALUES (1,'s123142','pass','student')";
$bool=mysql_query($user_insert);
$user_insert="INSERT INTO `user` VALUES (2,'s263681','pass','student')";
$bool=mysql_query($user_insert);
$user_insert="INSERT INTO `user` VALUES (3,'s257095','pass','student')";
$bool=mysql_query($user_insert);
$user_insert="INSERT INTO `user` VALUES (4,'d000000','pass','docent')";
$bool=mysql_query($user_insert);
$user_insert="INSERT INTO `user` VALUES (5,'d111111','pass','docent')";
$bool=mysql_query($user_insert);
if($bool==1) echo ("Voorbeeldusers zijn aangemaakt<br>");
	if($bool<>1) echo ("<center><font color=red>Er is een fout opgetreden bij het maken van voorbeeldusers.<br></font>");

$create_student="CREATE TABLE `student` (
  `id` int(6) NOT NULL auto_increment,
  `studnr` varchar(7) NOT NULL default '',
  `voornaam` varchar(20) NOT NULL default '',
  `tussenvoegsel` varchar(20) NOT NULL default '',
  `achternaam` varchar(20) NOT NULL default '',
  `adres` varchar(40) NOT NULL default '',
  `postcode` varchar(6) NOT NULL default '',
  `plaats` varchar(25) NOT NULL default '',
  `studie` varchar(40) NOT NULL default '',
  `startjaar` year NOT NULL default '2001',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `studnr` (`studnr`)
)";
$bool=mysql_query($create_student);
if($bool==1) echo ("Tabel student is aangemaakt<br>");
	if($bool<>1) echo ("<center><font color=red>Er is een fout opgetreden bij het maken van tabel student.<br></font>");

$student_insert="INSERT INTO `student` VALUES (1,'s257095','peter','','kloosterman','de Essenbree 54','8106AT','Mariënheem','BI','2002')";
$bool=mysql_query($student_insert);
$student_insert="INSERT INTO `student` VALUES (2,'s263681','robert','','deiman','bevernel 21','8101HC','Raalte','BI','2002')";
$bool=mysql_query($student_insert);
$student_insert="INSERT INTO `student` VALUES (3,'s123142','piet','van','pietersen','Pietlaan 38','1619PT','Pietersberg','TI','2003')";
$bool=mysql_query($student_insert);
if($bool==1) echo ("Voorbeeldstudenten zijn aangemaakt<br>");
	if($bool<>1) echo ("<center><font color=red>Er is een fout opgetreden bij het maken van voorbeeldstudenten.<br></font>");

// het type float(3,1) betekend dat er maximaal 2 tekens voor de , staan en minimaal (en maximaal) 1 erachter.
$create_result="CREATE TABLE `resultaten` (
  `id` int(6) NOT NULL auto_increment,
  `studnr` varchar(7) NOT NULL default '',
  `vak` varchar(20) NOT NULL default '',
  `resultaat` float(3,1) NOT NULL default '0',
  `datum` date NOT NULL default '2002-11-11',
  PRIMARY KEY  (`id`)
)";
$bool=mysql_query($create_result);
if($bool==1) echo ("Resultatentabel is aangemaakt<br>");
	if($bool<>1) echo ("<center><font color=red>Er is een fout opgetreden bij het maken van resultatentabel.<br></font>");

$resultaten_insert="INSERT INTO `resultaten` VALUES (1,'s123142','MIS',6.7,'2004-10-11')";
$bool=mysql_query($resultaten_insert);
$resultaten_insert="INSERT INTO `resultaten` VALUES (2,'s263681','DW',7.6,'2004-08-17')";
$bool=mysql_query($resultaten_insert);
$resultaten_insert="INSERT INTO `resultaten` VALUES (3,'s257095','PHP',5.3,'2004-05-05')";
$bool=mysql_query($resultaten_insert);
$resultaten_insert="INSERT INTO `resultaten` VALUES (4,'s263681','IO',10,'2005-11-11')";
$bool=mysql_query($resultaten_insert);
if($bool==1) echo ("Voorbeelresultaten zijn aangemaakt<br>");
	if($bool<>1) echo ("<center><font color=red>Er is een fout opgetreden bij het maken van voorbeelresultaten.<br></font>");

// Het stukje voor wissen van de database, wanneer er een fout was ontstaan bij het creëren.

/*$wissen = "DROP DATABASE `cijfersysteem`";
$voeruit = mysql_query($wissen);
if($voeruit==1) echo ("Database is gewist");
if($voeruit<>1) echo ("FOUT BIJ WISSEN");*/

?>[/code]

Reacties

0
Nog geen reacties.