Verbinding mysqli telkens opnieuw toevoegen
Beste forum helpers/lezers,
Met onderstaande code wil ik graag een formulier laten controleren of de gebruiker al bestaat. nu had ik het zelfde formulier ook gemaakt in mysql, omdat mysqli beter is wil ik het in mysqli maken. maar met de mysqli moet ik bij elke functie mijn db.php toevoegen als ik dat niet doe krijg ik een foutmelding. vindt het raar want bij de mysql versie werkte het wel zonder telkens de db.php toe te voegen. wie kan mij helpen of kan dit niet anders?
deze foutmelding krijg ik als ik de database niet telkens toevoeg:
Fatal error: Call to a member function query() on a non-object in
Met onderstaande code wil ik graag een formulier laten controleren of de gebruiker al bestaat. nu had ik het zelfde formulier ook gemaakt in mysql, omdat mysqli beter is wil ik het in mysqli maken. maar met de mysqli moet ik bij elke functie mijn db.php toevoegen als ik dat niet doe krijg ik een foutmelding. vindt het raar want bij de mysql versie werkte het wel zonder telkens de db.php toe te voegen. wie kan mij helpen of kan dit niet anders?
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
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
<?php
$mysqli = new mysqli('localhost', 'test', 'test', 'test');
if(mysqli_connect_errno())
{
trigger_error('Fout bij verbinding: '.$mysqli_error);
}
?>
<?php
session_start ();
include('inc/db.php'); <-----hier is de database al toegevoegd
$mysqli->set_charset("utf8");
function gebruiker_check($gebruikersnaam){
include('inc/db.php'); <-----------hier moet ik het nogmaals doen ander krijg ik een foutmelding
$sql = $mysqli->query("SELECT username FROM gevens WHERE username='$gebruikersnaam'") or die($mysqli->error);
if($sql->num_rows == 0){
$bezet1 = 'nee' ;
} else {
$bezet1 = 'ja';
}
return $bezet1;
}
$gbtest = $mysqli->real_escape_string($_POST['gebruikersnaam']);
if(gebruiker_check($gbtest)== 'ja'){
$error .= "De gebruikersnaam is al ingebruik.<br />";
}
?>
$mysqli = new mysqli('localhost', 'test', 'test', 'test');
if(mysqli_connect_errno())
{
trigger_error('Fout bij verbinding: '.$mysqli_error);
}
?>
<?php
session_start ();
include('inc/db.php'); <-----hier is de database al toegevoegd
$mysqli->set_charset("utf8");
function gebruiker_check($gebruikersnaam){
include('inc/db.php'); <-----------hier moet ik het nogmaals doen ander krijg ik een foutmelding
$sql = $mysqli->query("SELECT username FROM gevens WHERE username='$gebruikersnaam'") or die($mysqli->error);
if($sql->num_rows == 0){
$bezet1 = 'nee' ;
} else {
$bezet1 = 'ja';
}
return $bezet1;
}
$gbtest = $mysqli->real_escape_string($_POST['gebruikersnaam']);
if(gebruiker_check($gbtest)== 'ja'){
$error .= "De gebruikersnaam is al ingebruik.<br />";
}
?>
deze foutmelding krijg ik als ik de database niet telkens toevoeg:
Fatal error: Call to a member function query() on a non-object in
- Ariën -:
Code-tags rechtgezet
Gewijzigd op 06/01/2017 20:38:57 door - Ariën -
Een variabele buiten een functie is binnen een functie niet bekend.
Die $mysqli kent ie dus binnen de functie gebruiker_check niet.
Je kunt $mysqli wel van 'buitenaf' aan de functie meegeven.
Wijzig de 1e regel van de functie in:
En bij het aanroepen van de functie geef je dan behalve de gebruikersnaam ook $mysqli mee als 2e parameter.
Die 'include' binnen de functie kun je dan weghalen.
Die $mysqli kent ie dus binnen de functie gebruiker_check niet.
Je kunt $mysqli wel van 'buitenaf' aan de functie meegeven.
Wijzig de 1e regel van de functie in:
En bij het aanroepen van de functie geef je dan behalve de gebruikersnaam ook $mysqli mee als 2e parameter.
Die 'include' binnen de functie kun je dan weghalen.
Bedankt voor je hulp Ozzie. heb je een voorbeeldje hoe ik die tweede parameter meegeef?
wordt dan :
Verder raad ik ook aan om geen 'ja' of 'nee' te gebruiken maar true of false. Dan hoef je ook niet meer te controleren op 'ja' wat misschien ook wel eens per ongeluk 'Ja' kan zijn (wat dan niet werkt).
Lano heeren op 06/01/2017 16:55:15:
vindt het raar want bij de mysql versie werkte het wel zonder telkens de db.php toe te voegen.
Dit komt omdat de mysql_-functies impliciet uitgaan van de huidige connectie wanneer je geen connectie-resource-parameter meegeeft.
Bij mysqli_-functies moet je het connectie-object expliciet meegeven, maar alleen als je van de proecedurele variant gebruik maakt. Indien je de object georiënteerde schrijfwijze gebruikt hoeft dit niet.
Ingeval je mysqli gebruikt zijn er meerdere redenen waarom je eigenlijk altijd de object georiënteerde schrijfwijze zou moeten gebruiken. Dit heeft, wat mij betreft, de sterke voorkeur.
ipv als 2e parameter meegeven
kun je ook IN de functie
global $mysqli ; plaatsen (misschien wat mooier)
kun je ook IN de functie
global $mysqli ; plaatsen (misschien wat mooier)
Global is juist niet mooier, maar onoverzichtelijker en op nog meer punten nadeliger.
De de procedurele functies van MySQLi moet je die die extra parameter nu eenmaal meegeven. Bij de OO-versie van MySQLi (ik raad het ook aan!) is dit juist niet nodig.
De de procedurele functies van MySQLi moet je die die extra parameter nu eenmaal meegeven. Bij de OO-versie van MySQLi (ik raad het ook aan!) is dit juist niet nodig.
Gewijzigd op 07/01/2017 16:39:12 door - Ariën -




