Eerste Poging ...
Even wat informatie.
De $database connectie wordt in een andere file gemaakt.
De %s functie wordt ook daar aangeroepen, deze bevat mysql_real_escape_string functie.
De error functie bevat de die() functie nadat hij de error heeft weergegeven.
De code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
class Inloggen {
global $database;
function check_inloggen () {
$result=$db->get_row($db->prepare("SELECT gebruikersnaam,wachtwoord FROM logins WHERE gebruikersnaam=%s AND wachtwoord=%s",$gebruikersnaam,$wachtwoord)); // escape string zit in andere functie die hier wordt aangeroepen
if(!$result)
error("Onjuiste gebruikersnaam of wachtwoord.");
}
function inloggen ($gebruikersnaam,$wachtwoord) {
$inloggen = $this->check_inloggen ()
if (!$inloggen)
error("Onjuiste gebruikersnaam of wachtwoord.");
session_regenerate_id (sha1($gebruikersnaam));
$_SESSION['gebruikersnaam'];
header (location : index.php);
}
}
?>
class Inloggen {
global $database;
function check_inloggen () {
$result=$db->get_row($db->prepare("SELECT gebruikersnaam,wachtwoord FROM logins WHERE gebruikersnaam=%s AND wachtwoord=%s",$gebruikersnaam,$wachtwoord)); // escape string zit in andere functie die hier wordt aangeroepen
if(!$result)
error("Onjuiste gebruikersnaam of wachtwoord.");
}
function inloggen ($gebruikersnaam,$wachtwoord) {
$inloggen = $this->check_inloggen ()
if (!$inloggen)
error("Onjuiste gebruikersnaam of wachtwoord.");
session_regenerate_id (sha1($gebruikersnaam));
$_SESSION['gebruikersnaam'];
header (location : index.php);
}
}
?>
Is het een begin of zit ik er compleet naast zover?
Gewijzigd op 25/03/2011 01:16:03 door Alex L
Quote:
De error functie bevat de die() functie nadat hij de error heeft weergegeven.
Dood aan die(), lang leven execptions ;-)
Voor de rest is het nog te weinig om er wat van te zeggen.
De quote:
Jelmer rrrr:
Heel heel heel strict genomen zou je inloggen en gebruikers moeten scheiden. Je hebt gebruikers, en je hebt een set classen die inloggen mogelijk maken. Die classen regelen dan het opslaan van de combinatie gebruiker – wachtwoord, (of gebruiker + openid, daarom zijn ze losgetrokken van de User class, zodat je verschillende manieren van inloggen kan maken) en die classen regelen het onthouden van de identiteit van iemand na het inloggen.
Gewijzigd op 25/03/2011 15:59:41 door Wouter J
Gewijzigd op 25/03/2011 11:17:53 door Mar cel
Het is een begin dus advies is zeker welkom.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
class Gebruiker {
global $database;
function Inloggen()
{
try {
$query = "SELECT gebruikersnaam,wachtwoord WHERE gebruikersnaam='%::gebruikersnaam%' AND wachtwoord='%::wachtwoord%'";
$stmt = $this->database->prepare($query);
$stmt->bindParam('::gebruikersnaam', $gebruikersnaam);
$stmt->bindParam('::wachtwoord', $wachtwoord);
$stmt->execute();
$result = $stmt->fetchAll();
if(!$result)
throw new Exception ('Onjuiste gebruikersnaam of wachtwoord');
session_regenerate_id (sha1($gebruikersnaam));
$_SESSION['gebruikersnaam'];
header (location : index.php);
}
catch(PDOException $e)
{
echo $e->getMessage(); }
}
?>
class Gebruiker {
global $database;
function Inloggen()
{
try {
$query = "SELECT gebruikersnaam,wachtwoord WHERE gebruikersnaam='%::gebruikersnaam%' AND wachtwoord='%::wachtwoord%'";
$stmt = $this->database->prepare($query);
$stmt->bindParam('::gebruikersnaam', $gebruikersnaam);
$stmt->bindParam('::wachtwoord', $wachtwoord);
$stmt->execute();
$result = $stmt->fetchAll();
if(!$result)
throw new Exception ('Onjuiste gebruikersnaam of wachtwoord');
session_regenerate_id (sha1($gebruikersnaam));
$_SESSION['gebruikersnaam'];
header (location : index.php);
}
catch(PDOException $e)
{
echo $e->getMessage(); }
}
?>
kill -9 global definities
en neem vooral ook eens een kijkje op:
http://php.net/manual/en/language.oop5.php
http://www.pfz.nl/wiki/object-oriented-programming/
http://www.pfz.nl/wiki/oop-toepassen/
Normaal PHP leren ging me zo goed af maar dit is toch ff een flinke tegenvaller kwa leersnelheid.
naja goed, volgende poging, zit er nu dichterbij of verder af? Trouwens let niet op de simpele en lage sessie veiligheid, is maar om te oefenen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
class Inloggen {
public $gebruikersnaam;
public $wachtwoord;
global $database;
function controleren()
{
try {
$query = "SELECT gebruikersnaam,wachtwoord WHERE gebruikersnaam='%::gebruikersnaam%' AND wachtwoord='%::wachtwoord%'";
$stmt = $this->database->prepare($query);
$stmt->bindParam('::gebruikersnaam', $gebruikersnaam);
$stmt->bindParam('::wachtwoord', $wachtwoord);
$stmt->execute();
$result = $stmt->fetchAll();
if(!$result)
throw new Exception ('Onjuiste gebruikersnaam of wachtwoord');
}
catch(PDOException $e)
{
echo $e->getMessage();
}
function inloggen() {
this->controleren();
session_regenerate_id (sha1($gebruikersnaam));
$_SESSION['gebruikersnaam'];
header (location : index.php);
}
function sessie_controleren {
if (isset($_SESSION['gebruikersnaam'])
$this->gebruikersnaam = $_SESSION['gebruikersnaam'];
$check = $this->controleren();
if ($check)
return TRUE;
}
}
?>
class Inloggen {
public $gebruikersnaam;
public $wachtwoord;
global $database;
function controleren()
{
try {
$query = "SELECT gebruikersnaam,wachtwoord WHERE gebruikersnaam='%::gebruikersnaam%' AND wachtwoord='%::wachtwoord%'";
$stmt = $this->database->prepare($query);
$stmt->bindParam('::gebruikersnaam', $gebruikersnaam);
$stmt->bindParam('::wachtwoord', $wachtwoord);
$stmt->execute();
$result = $stmt->fetchAll();
if(!$result)
throw new Exception ('Onjuiste gebruikersnaam of wachtwoord');
}
catch(PDOException $e)
{
echo $e->getMessage();
}
function inloggen() {
this->controleren();
session_regenerate_id (sha1($gebruikersnaam));
$_SESSION['gebruikersnaam'];
header (location : index.php);
}
function sessie_controleren {
if (isset($_SESSION['gebruikersnaam'])
$this->gebruikersnaam = $_SESSION['gebruikersnaam'];
$check = $this->controleren();
if ($check)
return TRUE;
}
}
?>
Gewijzigd op 25/03/2011 22:54:15 door Alex L
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
class User()
{
private $db;
public function __construct(PDO $pdo)
{
$this->db = $pdo;
}
public function getName(id)
{
$query = "
SELECT
nickname
FROM
users
WHERE
id = :id
";
$stmt = $this->db->prepare($query);
$stmt->bindParam(':id', $id, PDO::INT);
$result = $stmt->execute();
if(!$result)
{
throw new PDOException('De query is niet gelukt.');
}
}
}
try
{
$pdo = new PDO('mysql:host=localhost;dbname=website', 'gebruiker', 'wachtwoord');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$user = new User($pdo);
$wouter = $user->getName(5);
$alex = $user->getName(7);
}
catch(PDOException $p)
{
echo '[PDO] Er is een fout opgetreden op lijn '.$e->getLine().':';
echo "<br />\n".$e->getMessage();
}
?>
class User()
{
private $db;
public function __construct(PDO $pdo)
{
$this->db = $pdo;
}
public function getName(id)
{
$query = "
SELECT
nickname
FROM
users
WHERE
id = :id
";
$stmt = $this->db->prepare($query);
$stmt->bindParam(':id', $id, PDO::INT);
$result = $stmt->execute();
if(!$result)
{
throw new PDOException('De query is niet gelukt.');
}
}
}
try
{
$pdo = new PDO('mysql:host=localhost;dbname=website', 'gebruiker', 'wachtwoord');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$user = new User($pdo);
$wouter = $user->getName(5);
$alex = $user->getName(7);
}
catch(PDOException $p)
{
echo '[PDO] Er is een fout opgetreden op lijn '.$e->getLine().':';
echo "<br />\n".$e->getMessage();
}
?>
Verder hoor je ook niks te echoën vanuit een methode, dit moet je returnen. Dit mag niet vanuit de constructor.
---Edit---
Deze code is wel heel brak die je nu hebt:
- Wachtwoord en Gebruikersnaam moet je private of protected maken, niet public. Zie mijn uitleg daarover hier.
- Elke functie heeft ook een public/private/protected
- echo niks vanuit een class
- Header(location : index.php), location : index.php is een string zet dit tussen quotes.
- Je vergeet de methode controleren af te sluiten
- Je vergeet de methode sessie_controleren af te sluiten
- Gebruik goede namen, class inloggen methode inloggen?
Gewijzigd op 25/03/2011 23:04:35 door Wouter J
Wouter J op 25/03/2011 22:59:11:
Je moet geen try catch systeem maken in je class, maar erbuiten:
(...)
(...)
Dit is niet per definitie zo. Exceptions kan je rethrowen, of gewoon weten dat iets niet goed ging.
Maar goed hier is het inderdaad niet de bedoeling. Hier is het volgens mij eigenlijk niet eens de bedoeling dat user die query doet...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
class Inloggen {
private $gebruikersnaam;
private $wachtwoord;
private $database;
public function getName(gebruikersnaam,wachtwoord)
{
$query = "SELECT gebruikersnaam,wachtwoord WHERE gebruikersnaam=':gebruikersnaam' AND wachtwoord=':wachtwoord'";
$stmt = $this->database->prepare($query);
$stmt->bindParam(':gebruikersnaam', $gebruikersnaam);
$stmt->bindParam(':wachtwoord', $wachtwoord);
$result = $stmt->execute();
if(!$result)
throw new Exception ('Onjuiste gebruikersnaam of wachtwoord');
}
private function setSession() {
this->getName();
session_regenerate_id (sha1($gebruikersnaam));
$_SESSION['gebruikersnaam'] = $gebruikersnaam;
header ("location : index.php");
}
}
public function getSession {
if (isset($_SESSION['gebruikersnaam'])
$this->gebruikersnaam = $_SESSION['gebruikersnaam'];
$result = $this->getName();
if ($result)
return TRUE;
}
}
}
?>
class Inloggen {
private $gebruikersnaam;
private $wachtwoord;
private $database;
public function getName(gebruikersnaam,wachtwoord)
{
$query = "SELECT gebruikersnaam,wachtwoord WHERE gebruikersnaam=':gebruikersnaam' AND wachtwoord=':wachtwoord'";
$stmt = $this->database->prepare($query);
$stmt->bindParam(':gebruikersnaam', $gebruikersnaam);
$stmt->bindParam(':wachtwoord', $wachtwoord);
$result = $stmt->execute();
if(!$result)
throw new Exception ('Onjuiste gebruikersnaam of wachtwoord');
}
private function setSession() {
this->getName();
session_regenerate_id (sha1($gebruikersnaam));
$_SESSION['gebruikersnaam'] = $gebruikersnaam;
header ("location : index.php");
}
}
public function getSession {
if (isset($_SESSION['gebruikersnaam'])
$this->gebruikersnaam = $_SESSION['gebruikersnaam'];
$result = $this->getName();
if ($result)
return TRUE;
}
}
}
?>
Toevoeging op 26/03/2011 19:05:44:
Na verschillende tutorials nog een paar keer gelezen te hebben kom ik nog niet verder.
Waar zet je de fout afhandeling neer? In het procedure gedeelte met echo's of hoe? En stel je voor dat de gebruikersnaam en wachtwoord correct zijn, moet ik de sessie aanmaak dan in een object of in de procedure gedeelte zetten?
Heb rondgekeken op dit forum maar er is geen touw aan te knopen, ieder script is compleet anders ingedeelt.