Is deze opzet goed of niet goed?
en nu is mijn vraag doe ik het op de juiste manier?
aangezien ik dit moet gebruiken als voorbeeld om te laten zien dat ik met php oop en mysql kan werken
kunnen jullie mijn tips geven hier voor om een zo goed mogelijk systeem te krijgen
wat ik tot nu toe heb staat helaas even online op mijn webserver local maar is 24/7 online
de layout is gewoon even een gaar iets maar het gaat er om dat het systeem in php oop mysql goed gedaan is.
de urls zijn:
Werkend Voorbeeld: http://madirc.nl/a/
Broncode : http://madirc.nl/a/a/code.php
Ik hoop dat jullie mijn goeie tips kunnen geven en of dit de juiste opzet is
Met Vriendelijke Groet,
Rob
Gewijzigd op 14/03/2011 15:00:59 door Robert dat ben ik
- Gebruik geen * dit is een wildcard selecteer wat je wilt
- Variabelen buiten de quotes houden
- mysql injectie mogelijk!
- codeer je wachtwoorden sha1 ipv md5 (veiligheid)
- Gebruik geen eregi dit is verouderd!. Gebruik preg_match
- Waar is je fouthandeling?
- Gebruik phpmailer of swiftmailer ( xss injection mogelijk )
- Maak je site OF nederlands OF engels!
Toevoeging op 13/03/2011 12:07:29:
Vul 'en 'in en je krijgt deze error: (login.php)
Code (php)
1
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/html/a/include/class/class_lib.php on line 72
Vul ' en je krijgt deze error: (rezet.php)
Code (php)
1
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/html/a/include/class/class_lib.php on line 225
Toevoeging op 13/03/2011 12:08:46:
Vul overal ' in bij register.php en je krijgt deze error:
Code (php)
1
2
2
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/html/a/include/class/class_lib.php on line 117
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '','62.194.24.233','3d8d899acd8226a412f55f72a610f237','0')' at line 1
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '','62.194.24.233','3d8d899acd8226a412f55f72a610f237','0')' at line 1
Gewijzigd op 13/03/2011 12:05:21 door Jordi Kroon
Toevoeging op 13/03/2011 12:48:08:
ook is mysql_close() negens voor nodig
alleen snap ik die
- getallen buiten de quotes houden
- Gebruik geen * dit is een wildcard selecteer wat je wilt
- Variabelen buiten de quotes houden
even niet want mijn vars staan toch buiten de "" ? met ".$var." ?
en hoezo mijn mysql niet sluiten stel er zit 100 man blijven die verbindingen ook online hangen vandaar die mysql_close(); toch?
m.v.g Rob
Gewijzigd op 13/03/2011 12:55:11 door Robert dat ben ik
Quote:
bronUsing mysql_close() isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution.
maar de OOP manier is wel goed? of zijn hier nog andere tips die ik mee kan nemen in mijn project?
al vast super bedankt voor de reacties
m.v.r Rob
Gewijzigd op 13/03/2011 13:01:36 door Robert dat ben ik
MaDHouSe xxxx op 13/03/2011 12:52:16:
ja die dingen zijn aangepast
alleen snap ik die
- getallen buiten de quotes houden
- Gebruik geen * dit is een wildcard selecteer wat je wilt
- Variabelen buiten de quotes houden
(..)
alleen snap ik die
- getallen buiten de quotes houden
- Gebruik geen * dit is een wildcard selecteer wat je wilt
- Variabelen buiten de quotes houden
(..)
Ik bedoel dit :
- getallen buiten de quotes houden:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$select_table = mysql_query("SELECT * FROM users WHERE registered='1'");
//word
$select_table = mysql_query("SELECT * FROM users WHERE registered=1");
?>
$select_table = mysql_query("SELECT * FROM users WHERE registered='1'");
//word
$select_table = mysql_query("SELECT * FROM users WHERE registered=1");
?>
- Gebruik geen * dit is een wildcard selecteer wat je wilt
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$select_table = mysql_query("SELECT * FROM users WHERE registered=1");
//word
$select_table = mysql_query("SELECT colom1, colom2, colom3, enz FROM users WHERE registered=1");
?>
$select_table = mysql_query("SELECT * FROM users WHERE registered=1");
//word
$select_table = mysql_query("SELECT colom1, colom2, colom3, enz FROM users WHERE registered=1");
?>
- Variabelen buiten de quotes houden
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$select_table = mysql_query("select * from users where id='$userid' limit 1");
//word
$select_table = mysql_query("select * from users where id='" . $userid . "' limit 1");
?>
$select_table = mysql_query("select * from users where id='$userid' limit 1");
//word
$select_table = mysql_query("select * from users where id='" . $userid . "' limit 1");
?>
Let wel op die mysql injection
Gewijzigd op 13/03/2011 13:21:06 door Jordi Kroon
Iets als dit moet je hebben:
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
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
<?php
// Homepage
$db = new Database($config); // Of mysqli oid, gebruik iig een OOP interface, geen functies
$authentication = new Authentication($db);
if($authenictaion->isLoggedIn()) {
$user = $authentication->getUser();
echo 'Hallo '.$user->getName();
} else {
echo 'Je moet ingelogd zijn!';
}
// Login
$db = new Database($config); // Of mysqli oid, gebruik iig een OOP interface, geen functies
$authentication = new Authentication($db);
if($authenictaion->isLoggedIn()) {
// redirect
}
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// checks op leeg
try {
$authentication->logIn($_POST['username'], $_POST['password']);
// redirect
} catch(WrongPasswordException $e) {
// Geef foutmelding
} catch(BruteForceProtectionException $e) {
// Geef foutmelding
}
}
// Laat formulier zien
?>
// Homepage
$db = new Database($config); // Of mysqli oid, gebruik iig een OOP interface, geen functies
$authentication = new Authentication($db);
if($authenictaion->isLoggedIn()) {
$user = $authentication->getUser();
echo 'Hallo '.$user->getName();
} else {
echo 'Je moet ingelogd zijn!';
}
// Login
$db = new Database($config); // Of mysqli oid, gebruik iig een OOP interface, geen functies
$authentication = new Authentication($db);
if($authenictaion->isLoggedIn()) {
// redirect
}
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// checks op leeg
try {
$authentication->logIn($_POST['username'], $_POST['password']);
// redirect
} catch(WrongPasswordException $e) {
// Geef foutmelding
} catch(BruteForceProtectionException $e) {
// Geef foutmelding
}
}
// Laat formulier zien
?>
En dan is het ook nog mooi de view (wat daadwerkelijk wordt weergegeven) apart te houden.
Gewijzigd op 13/03/2011 13:33:50 door Pim -
EDIT: ik heb al een voorbeeld gevonden
Iedergeval bedankt voor jullie reacties
m.v.g Rob
Gewijzigd op 13/03/2011 14:35:17 door Robert dat ben ik
User heeft gewoon wat eigenschappen met getters en setters en heeft een loadFromId($id) functie, een loadFromUserName($name), een functie save(). Google naar 'Active Record' (de naam voor dit patroon) en je vindt daar vast wel wat over.
Dan blijft de authentication klasse over. De DB verbinding is daar btw niet nodig. User handelt dat af.
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
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
<?php
class Authentication
protected $user;
public function __construct()
{
session_start();
}
public function isLoggedIn()
{
if(isset($_SESSION['userid']) && isset($_SESSION['ip']) && $_SESSION['ip'] == $_SERVER['REMOTE_ADDR'])
return true;
return false;
}
public function getUser()
{
if(isset($this->user))
return $this->user;
if(!$this->isLoggedIn())
throw new Exception('Not logged in');
return $this->user = User::loadFromId($_SESSION['userid']);
}
public function login($username, $password)
{
try {
$user = User::loadFromUsername($username);
} catch(EntityNotFoundException($e) {
throw new WrongLoginException();
if($user->getPassword() !== $this->_hash($password))
throw new WrongLoginException();
$this->user = $user;
$_SESSION['userid'] = $user->getId();
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
return true;
}
}
?>
class Authentication
protected $user;
public function __construct()
{
session_start();
}
public function isLoggedIn()
{
if(isset($_SESSION['userid']) && isset($_SESSION['ip']) && $_SESSION['ip'] == $_SERVER['REMOTE_ADDR'])
return true;
return false;
}
public function getUser()
{
if(isset($this->user))
return $this->user;
if(!$this->isLoggedIn())
throw new Exception('Not logged in');
return $this->user = User::loadFromId($_SESSION['userid']);
}
public function login($username, $password)
{
try {
$user = User::loadFromUsername($username);
} catch(EntityNotFoundException($e) {
throw new WrongLoginException();
if($user->getPassword() !== $this->_hash($password))
throw new WrongLoginException();
$this->user = $user;
$_SESSION['userid'] = $user->getId();
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
return true;
}
}
?>
Mocht je vragen hebben of mocht het niet lukken met de User klasse, vraag maar raak.
Het is niet heel strikt/netjes OOP, maar je vroeg om een simpele versie.
EDIT: ja kom nou... ;)
Gewijzigd op 13/03/2011 14:38:21 door Pim -
Toevoeging op 13/03/2011 15:24:57:
hahahaha ja ik ga deze zeker gebruiken
echt super man voor je hulp dat waardeer ik enorm!!
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
48
49
50
51
52
53
54
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
48
49
50
51
52
53
54
<?php
class Authentication
{
protected $user;
public function __construct()
{
session_start();
}
public function isLoggedIn()
{
if(isset($_SESSION['userid']) && isset($_SESSION['ip']) && $_SESSION['ip'] == $_SERVER['REMOTE_ADDR'])
{
return true;
}
else
{
return false;
}
}
public function getUser()
{
if(isset($this->user))
{
return $this->user;
}
if(!$this->isLoggedIn())
{
row new Exception('Not logged in');
turn $this->user = User::loadFromId($_SESSION['userid']);
}
public function login($username, $password)
{
try
{
$user = User::loadFromUsername($username);
}
catch(EntityNotFoundException($e) {
throw new WrongLoginException();
if($user->getPassword() !== $this->_hash($password))
throw new WrongLoginException();
$this->user = $user;
$_SESSION['userid'] = $user->getId();
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
return true;
}
}
?>
class Authentication
{
protected $user;
public function __construct()
{
session_start();
}
public function isLoggedIn()
{
if(isset($_SESSION['userid']) && isset($_SESSION['ip']) && $_SESSION['ip'] == $_SERVER['REMOTE_ADDR'])
{
return true;
}
else
{
return false;
}
}
public function getUser()
{
if(isset($this->user))
{
return $this->user;
}
if(!$this->isLoggedIn())
{
row new Exception('Not logged in');
turn $this->user = User::loadFromId($_SESSION['userid']);
}
public function login($username, $password)
{
try
{
$user = User::loadFromUsername($username);
}
catch(EntityNotFoundException($e) {
throw new WrongLoginException();
if($user->getPassword() !== $this->_hash($password))
throw new WrongLoginException();
$this->user = $user;
$_SESSION['userid'] = $user->getId();
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
return true;
}
}
?>
Ik neem aan dat het zo gezet moet zijn?
en de connect naar database want die mis ik nog? :D
m.v.g Rob
Gewijzigd op 13/03/2011 15:24:16 door Robert dat ben ik
Quote:
User heeft gewoon wat eigenschappen met getters en setters en heeft een loadFromId($id) functie, een loadFromUserName($name), een functie save(). Google naar 'Active Record' (de naam voor dit patroon) en je vindt daar vast wel wat over.
En mijn getUser methode is goed, de jouwe niet ;). Kijk nog eens goed
na 2 uurtjes scripten en proberen
ben ik hier op uit gekomen
nu is mijn vraag als nog
is dit wel OOP?
het gaat om de pagina index.php
URL: http://madirc.nl/a/b/index.php
het is even een simpel iets zonder beveiliging.
na wat lessen te hebben gehad gister via videos heb ik dit gemaakt
het inloggen werkt het registreren werkt uitloggen werkt
maar is dit wel OOP of zit ik er gewoon weer naast?
m.v.g Rob
Gewijzigd op 14/03/2011 13:25:36 door Robert dat ben ik