Geef je database object mee als parameter in je construct.
<?php
class database{
public function connect(){
$link = mysqli_connect('localhost','root','','login');
}
}
$database = new Database;
$user = new User($database);
class user{
private $_database;
public function connect(database $database){
$this->_database = $database; //nu kan je gewoon alle functies gebruiken uit je db object via $this->_database->functie()
$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.";
}
}
}
?>
Bedankt voor de hulp zover. Ik gebruik ook objecten in php, alleen niet in mysqli.
Zou je me een voorbeeld kunnen geven hoe ik dat hier zou kunnen gebruiken?
- Gebruik de OOP interface van MySQLi
- Mysql_error is geen MySQLi.
- Gebruik geen or die in OOP, doe mooie foutafhandeling met exceptions
- Regel 21 en 22 onnodig variabele kopiëren
- Gebruik geen superglobals in OOP, laat de gebruik die invoeren.
- Functie connect geeft niet aan wat er gebeurd. Noem hem bijv. login.
Ik neem aan dat je de basale concepten van OOP kent. Een daarvan is 'Encapsulation', het scheiden van verantwoordelijkheden. Dit geldt voor objecten, maar helemaal voor methodes. De functie user::connect() mag dus niet de database laten verbinden EN de gebruiker in laten loggen.
Ook mag het object geen gegevens uit server data halen, deze moet je als argumenten invoeren en mag het geen data echoën, alleen teruggeven.
Nee, dat kan wel, maar user::connect(), wat inderdaad beter user::login() kan heten, mag nooit Database::connect() aanroepen.
<?php
class user{
protected $_database;
public function setDatabas($database){
$this->_database = $database;
}
public function login($username, $password){
// Gebruik MySQLi's OOP interface
// Laat het database object bij fouten exceptions geven
// Gebruik prepared statements
$result = $this->_database->query("SELECT gebruikerid FROM gebruikers WHERE gebruikersnaam=? AND wachtwoord=?", $username, $password);
if ($result->num_rows > 0){
return true; // Hoe dat wordt weergegeven is niet de verantwoordelijkheid van dit object
}
else{
return false;
}
}
}