Undefined variable: mysqli
Kan iemand mij zeggen wat ik fout heb gedaan in de volgende code?
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
define('HOSTNAAM', $_CONFIG['hostnaam']);
define('GEBRUIKERSNAAM', $_CONFIG['gebruikersnaam']);
define('WACHTWOORD', $_CONFIG['wachtwoord']);
define('DATABASE', $_CONFIG['database']);
$database = new Database(HOSTNAAM, GEBRUIKERSNAAM, WACHTWOORD, DATABASE);
$database->connect();
$database->connect($mysqli);
define('GEBRUIKERSNAAM', $_CONFIG['gebruikersnaam']);
define('WACHTWOORD', $_CONFIG['wachtwoord']);
define('DATABASE', $_CONFIG['database']);
$database = new Database(HOSTNAAM, GEBRUIKERSNAAM, WACHTWOORD, DATABASE);
$database->connect();
$database->connect($mysqli);
Hierboven pakt hij de variable $mysqli niet terwijl die variable toch duidelijk is aangegeven hieronder na de connect() function...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Database extends mysqli {
protected $hostnaam = HOSTNAAM;
protected $gebruikersnaam = GEBRUIKERSNAAM;
protected $wachtwoord = WACHTWOORD;
protected $database = DATABASE;
public function connect() {
$mysqli = @new mysqli($this->hostnaam, $this->gebruikersnaam, $this->wachtwoord, $this->database);
if (mysqli_connect_errno()) {
printf('Error');
}
return true;
}
function query($query) {
$result = parent::query($query);
if($this->error) {
throw new Exception(mysqli_error($this), mysqli_errno($this));
}
return $result;
}
}
protected $hostnaam = HOSTNAAM;
protected $gebruikersnaam = GEBRUIKERSNAAM;
protected $wachtwoord = WACHTWOORD;
protected $database = DATABASE;
public function connect() {
$mysqli = @new mysqli($this->hostnaam, $this->gebruikersnaam, $this->wachtwoord, $this->database);
if (mysqli_connect_errno()) {
printf('Error');
}
return true;
}
function query($query) {
$result = parent::query($query);
if($this->error) {
throw new Exception(mysqli_error($this), mysqli_errno($this));
}
return $result;
}
}
alle hulp is welkom
Toevoeging op 05/01/2017 15:29:10:
Euh ... wat wil je hier eigenlijk doen?
$database->connect($mysqli);
Toevoeging op 05/01/2017 15:33:34:
dus zoiets:
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
public function connect() {
static $mysqli;
$mysqli = @new mysqli($this->hostnaam, $this->gebruikersnaam, $this->wachtwoord, $this->database);
if (mysqli_connect_errno()) {
printf('<title>Er is een fout opgetreden</title>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<div class="container">
<div class="modal show" id="myModal" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Er is een fout opgetreden</h4>
</div>
<div class="modal-body">
<p>Het lijkt erop dat er een fout is tussen de verbinding met de database. Als u wilt kunt u contact opnemen met het bestuur met de volgende foutcode: <b>'. mysqli_connect_errno().'</b></p>
</div>
<div class="modal-footer">
<a href="'.URL.'"><button id="btn" class="btn btn-default">Probeer het opnieuw</button></a>
</div>
</div>
</div>
</div>
</div>');
}
return $mysqli;
}
static $mysqli;
$mysqli = @new mysqli($this->hostnaam, $this->gebruikersnaam, $this->wachtwoord, $this->database);
if (mysqli_connect_errno()) {
printf('<title>Er is een fout opgetreden</title>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<div class="container">
<div class="modal show" id="myModal" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Er is een fout opgetreden</h4>
</div>
<div class="modal-body">
<p>Het lijkt erop dat er een fout is tussen de verbinding met de database. Als u wilt kunt u contact opnemen met het bestuur met de volgende foutcode: <b>'. mysqli_connect_errno().'</b></p>
</div>
<div class="modal-footer">
<a href="'.URL.'"><button id="btn" class="btn btn-default">Probeer het opnieuw</button></a>
</div>
</div>
</div>
</div>
</div>');
}
return $mysqli;
}
Toevoeging op 05/01/2017 15:35:16:
EDIT:
static moet global zijn
>> De MYSQLI variable pakken, hoe maak ik hem dan bekend? want het is een public function. Moet ik dan global of static gebruiken voor mysqli?
Leg eens rustig uit wat je wilt. Stap voor stap, niet in code maar in woorden.
Ik wil dat ik in elke file/class/functions de variable $mysqli kan gebruiken.
En verder is het gebruik van global in de wereld van het OO-design behoorlijk vies. Ikzelf geef ze gewoon mee in de instance waar je de class aanroept.
Waarom zou je dat willen? Dat klinkt namelijk totaal niet logisch.
Je zit nu met te weinig ervaring van OO-nu al een eigen class om die van de standaard MySQLi-class te bouwen.
Ik vind het nu best vergezocht... ;-)
Toevoeging op 05/01/2017 15:47:58:
Ik heb $mysqli nodig voor query's .
Die in een class staan
En hoe moet ik anders $mysqli uit de class halen zonder global $mysqli?
Gewijzigd op 05/01/2017 15:52:26 door - Rob -
Dus volgens jou is een User een database?
Begrijp je eigenlijk wel wat extend precies doet, en waarvoor je het moet gebruiken?
Het is niet een soort 'include' van een willekeurige class ofzo.
Gewijzigd op 05/01/2017 15:55:39 door - Ariën -
>> En hoe moet ik anders $mysqli uit de class halen zonder global $mysqli?
Ik wil niet vervelend doen, maar lees de reactie van Ariën. Je bent op dit moment, met alle respect, als een kip zonder kop zomaar iets aan het doen. Het schiet z'n doel voorbij en je hebt er uiteindelijk alleen jezelf mee. Je leert niet zomaar even OOP door 1 tutorial te lezen. OOP is een gerichte denkwijze die jij overduidelijk nog niet onder de knie hebt. Volg het advies van Ariën op en ga je eerst eens wat beter verdiepen, want anders ga je tegen een hoop moeilijkheden aanlopen. Nogmaals ... goed bedoeld.
- Ariën - op 05/01/2017 15:52:45:
Code (php)
1
2
3
4
2
3
4
REQUIRE_ONCE $_SERVER["DOCUMENT_ROOT"] . '/core/classes/database_class.php';
class User extends Database {
}
class User extends Database {
}
Dit zijn gewoon moeten werken ^^ Ik heb zelfs nog gekeken bij een paar bestanden die ik mijn pc had (die waren van iemand anders) en daar werkte het
Het heeft verder dan ook geen zin om verder te discussiëren. Dan kun je het beter zelf gewoon allemaal op je eigen houtje uitzoeken en op je eigen manier doen. Succes.
- Rob - op 05/01/2017 16:04:19:
Dat het werkt wil niet zeggen dat het klopt. Op een snelweg waar je de enige bent zo vroeg in de morgen mag je ook niet 180 km/h rijden.
OO-design is erg leuk, mits je de theorie erachter wilt snappen. Anders kan je net zo goed geen OO-design gebruiken.
Oké! hartstikke bedankt. Ik denk dat ik OO-design nog even achterwege laat en eerst verder expirimenteer
Het maken van een connectie met een database is iets wat je toch altijd doet (lijkt mij?) dus dit zou je ook in de constructor (__construct()) kunnen opnemen. Dit scheelt je weer een methode-aanroep (connect() kan dan weg).