Goedemiddag,

Sinds deze week ben ik bezig met OOP. Naar mijn idee gaat het prima, maar ik wil het graag door deskundigen laten controleren.

Ik heb geprobeerd een klassiek loginsysteem naar OOP te vertalen door overnemen, afkijken en prutsen ;).

Kunnen jullie mij vertellen waarom dit goed of fout is?

index.php

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST')

{

require('classes/class.login.php');

$loginsystem = new main("localhost","root","","login");
$loginsystem->loginnow();
}

?>

<html>

<head>
<title>login</title>
</head>

<body>
<ul>
<form class="user" method="post" action="index.php">
<li>Naam: <input class="user" type="text" size="10" maxlength="40" name="gebruikersnaam"></li>
<li>Wachtwoord: <input class="user" type="password" size="10" maxlength="10" name="wachtwoord"></li>
<input class="submit_user" type="submit" value="Inloggen">
</form>
</ul>
</body>

</html>

class.login.php

<?php
class main {

private $host;
private $username;
private $password;
private $database;

public function __construct($host, $username, $password, $database) {
$this->host = $host;
$this->username= $username;
$this->password= $password;
$this->database= $database;

$this->connect();
}

private function connect() {
mysql_connect($this->host, $this->username, $this->password);
mysql_select_db($this->database);
}

public function loginnow() {
$result = mysql_query("SELECT gebruikerid FROM gebruikers WHERE gebruikersnaam='" . mysql_real_escape_string($_POST['gebruikersnaam']) . "' AND wachtwoord='" . mysql_real_escape_string($_POST['wachtwoord']) . "'");

if (mysql_num_rows($result) > 0) {
echo "Succesvol ingelogd.";
$_SESSION['gebruikersnaam'] = $gebruikersnaam;
}
else {
echo "Vul gebruikersnaam / wachtwoord in.";
}
}
}
?>
Kan, maar als je gebruik maakt van een autoloader wordt het lastig.

Nog een paar punten:

- Waarom database gegevens in $this zetten? Alleen de connectie volstaat toch?
- Ik mis foutenafhandeling

Kan je toelicht waarom je hebt gekozen voor user::connect ?
- Autoloader is weg als je de constructor bedoeld.
- Dit is een aangepast script van iemand anders, weet niet waarom die dat gedaan heeft.
- Foutenafhandeling moet inderdaad nog.

+ Gekozen voor connect omdat we de gebruiker gaan verbinden.

Toevoeging op 27/01/2011 20:03:02:

Als ik $this weghaal dan krijg ik de volgende error uit mijn user::connect

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in ...

Iemand een idee hoe dit komt?

Toevoeging op 28/01/2011 15:44:35:

Een volgend probleem. Ik probeer even mysqli, maar het gaat niet werken omdat ik $link niet kan bereiken (regel 24):

<?php

class database{

protected $host;
protected $username;
protected $password;
protected $database;

public function connect(){

$link = mysqli_connect($this->host, $this->username, $this->password, $this->database);

}
}

class user{

public function connect(){

$username = $_POST['gebruikersnaam'];
$password = $_POST['wachtwoord'];

$result = mysqli_query($link, "SELECT gebruikerid FROM gebruikers WHERE gebruikersnaam='" . $username . "' AND wachtwoord='" . $password . "'") or die(mysql_error());

if (mysqli_num_rows($result) > 0){
echo "Succesvol ingelogd.";
}
else{
echo "Vul gebruikersnaam / wachtwoord in.";
}
}
}

?>
Wouter OOP op 27/01/2011 18:39:33


Als ik $this weghaal dan krijg ik de volgende error uit mijn user::connect


is het niet user::connect() ipv user:connect?

Reageren