Mysqli Query werkt niet in function
Mijn huidige code werkt prima :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$dbServer = "localhost";
$dbUsername = "******";
$dbPassword = "******";
$dbDatabase = "******";
$connect = mysqli_connect($dbServer, $dbUsername, $dbPassword, $dbDatabase)or die( header('Location: 500'));
$user = 'testuser';
$sql = "SELECT * FROM users WHERE userNAME = '$user'";
$query = mysqli_query($connect, $sql);
if (mysqli_num_rows($query) > 0) {
echo 'Bestaat al!';
} else {
echo 'Bestaat niet!';
}
?>
$dbServer = "localhost";
$dbUsername = "******";
$dbPassword = "******";
$dbDatabase = "******";
$connect = mysqli_connect($dbServer, $dbUsername, $dbPassword, $dbDatabase)or die( header('Location: 500'));
$user = 'testuser';
$sql = "SELECT * FROM users WHERE userNAME = '$user'";
$query = mysqli_query($connect, $sql);
if (mysqli_num_rows($query) > 0) {
echo 'Bestaat al!';
} else {
echo 'Bestaat niet!';
}
?>
Nu wil ik dit in een function plaatsen maar dat werkt niet en geeft false terug :
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$dbServer = "localhost";
$dbUsername = "******";
$dbPassword = "******";
$dbDatabase = "******";
$connect = mysqli_connect($dbServer, $dbUsername, $dbPassword, $dbDatabase)or die( header('Location: 500'));
function userCheck($username)
{
$sql = "SELECT * FROM users WHERE userNAME = '$username'";
$query = mysqli_query($connect, $sql);
if (mysqli_num_rows($query) > 0) {
return true;
} else {
return false;
}
}
if (userCheck('testuser') == true ){
echo 'Bestaat al!';
} else {
echo 'Bestaat niet!';
}
?>
$dbServer = "localhost";
$dbUsername = "******";
$dbPassword = "******";
$dbDatabase = "******";
$connect = mysqli_connect($dbServer, $dbUsername, $dbPassword, $dbDatabase)or die( header('Location: 500'));
function userCheck($username)
{
$sql = "SELECT * FROM users WHERE userNAME = '$username'";
$query = mysqli_query($connect, $sql);
if (mysqli_num_rows($query) > 0) {
return true;
} else {
return false;
}
}
if (userCheck('testuser') == true ){
echo 'Bestaat al!';
} else {
echo 'Bestaat niet!';
}
?>
Wat doe ik hier fout ?
Gewijzigd op 19/12/2014 12:20:23 door Patrick B
Gewijzigd op 19/12/2014 12:24:04 door - Ariën -
Hoe zou jij dat doen Aar met het script dat ik nu heb?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
function userCheck($username) {
global $connect;
// hier de rest van de functie
}
?>
function userCheck($username) {
global $connect;
// hier de rest van de functie
}
?>
Of:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
function userCheck($username, $con) {
// hier de rest van de functie met $con als de connectie.
}
?>
function userCheck($username, $con) {
// hier de rest van de functie met $con als de connectie.
}
?>
en dan elke userCheck()-functieaanroep aanpassen met de $connectie als tweede argument:
Gewijzigd op 19/12/2014 12:32:50 door - Ariën -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$connect = mysqli_connect($dbServer, $dbUsername, $dbPassword, $dbDatabase)or die( header('Location: 500'));
// Check if user exist in db
function userCheck($username)
{
global $connect;
$sql = "SELECT * FROM users WHERE userNAME = '$username'";
$query = mysqli_query($connect, $sql);
if (mysqli_num_rows($query) > 0) {
return true;
} else {
return false;
}
}
?>
$connect = mysqli_connect($dbServer, $dbUsername, $dbPassword, $dbDatabase)or die( header('Location: 500'));
// Check if user exist in db
function userCheck($username)
{
global $connect;
$sql = "SELECT * FROM users WHERE userNAME = '$username'";
$query = mysqli_query($connect, $sql);
if (mysqli_num_rows($query) > 0) {
return true;
} else {
return false;
}
}
?>
Gewijzigd op 19/12/2014 13:04:17 door Patrick B
Ja dat gaat werken.
Maar zou iemand mij kunnen uitleggen wat global $connect; precies doet?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$connect = mysqli_connect($dbServer, $dbUsername, $dbPassword, $dbDatabase)or die( header('Location: 500'));
function userCheck($username)
{
global $connect;
$sql = "SELECT * FROM users WHERE userNAME = '$username'";
$query = mysqli_query($connect, $sql);
return (mysqli_num_rows($query) > 0 ? true : false);
}
if (userCheck('gebruikersnaam') == true ){
//Bestaat
} else {
//Bestaat niet
}
?>
$connect = mysqli_connect($dbServer, $dbUsername, $dbPassword, $dbDatabase)or die( header('Location: 500'));
function userCheck($username)
{
global $connect;
$sql = "SELECT * FROM users WHERE userNAME = '$username'";
$query = mysqli_query($connect, $sql);
return (mysqli_num_rows($query) > 0 ? true : false);
}
if (userCheck('gebruikersnaam') == true ){
//Bestaat
} else {
//Bestaat niet
}
?>
Gewijzigd op 19/12/2014 13:10:28 door Patrick B
Iedere functie krijgt zijn eigen stukje geheugen toegewezen. Dit geheugen is bij aanvang van de functie leeg. Er bestaan dus geen variabelen in de functie. Zeg maar dezelfde situatie als wanneer je script begint vanaf de eerste regel. dan is alles blanco. (behalve SUPERGLOBALS zoals $_GET, $_POST en $_SERVER)
Bij het verlaten van de functie wordt het stukje geheugen ook weer direct vrij gegeven en is de inhoud van de variabelen binnen je functie ook direct gewist.
Ook jouw $connect die BUITEN de functie userCheck tot leven is geroepen bestaat niet binnen de functie.
Met global echter wordt een variabele van buiten de functie (wat we GLOBAL SPACE noemen) alsnog zichtbaar binnen de functie.
Belangrijk om te weten is dat $connect dan geen clone is van de $connect buiten de functie maar echt dezelfde variabele is. Als je deze variabele dus overschrijft binnen je functie dan is deze ook buiten je functie overschreven.
Hier een klein voorbeeldje:
Code (php)
Alhoewel je zou denken dat $naam wordt overschreven met de waarde Patrick is dit na het verlaten van de functie echoNaam nog steeds Frank omdat $naam binnen de functie echoNaam een geheel ANDERE variabele is dan buiten de functie.
Toevoeging op 19/12/2014 13:34:45:
Anders wordt het als je de naam als PARAMETER gaat meegeven:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function changeNaam($naam) // <-- parameter $naam
{
$naam = 'Piet';
}
$naam = 'Frank';
changeNaam($naam);
echo $naam; // geeft Frank
?>
function changeNaam($naam) // <-- parameter $naam
{
$naam = 'Piet';
}
$naam = 'Frank';
changeNaam($naam);
echo $naam; // geeft Frank
?>
Hier wordt er een KOPIE van $naam aangemaakt binnen de functie. Als we die kopie een andere waarde geven binnen de functie dan blijft het origineel buiten de functie dus ongewijzigd.
Toevoeging op 19/12/2014 13:44:36:
Om het verhaal even compleet te maken: (neem het volgende maar even aan ter kennisgeving)
Bij objecten die als parameter worden doorgegeven blijft het weer wel om hetzelfde object gaan.
Code (php)
Gewijzigd op 19/12/2014 13:30:40 door Frank Nietbelangrijk