Mysqli Query werkt niet in function

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Patrick B

Patrick B

19/12/2014 12:19:23
Quote Anchor link
Hallo,

Mijn huidige code werkt prima :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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!';
}

?>


Nu wil ik dit in een function plaatsen maar dat werkt niet en geeft false terug :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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!';
}

?>


Wat doe ik hier fout ?
Gewijzigd op 19/12/2014 12:20:23 door Patrick B
 
PHP hulp

PHP hulp

19/04/2024 16:06:43
 
- Ariën  -
Beheerder

- Ariën -

19/12/2014 12:23:08
Quote Anchor link
Je moet je $connect nog even beschikbaar maken via een global of via een functie-argument.
Gewijzigd op 19/12/2014 12:24:04 door - Ariën -
 
Patrick B

Patrick B

19/12/2014 12:25:55
Quote Anchor link
Hoe zou jij dat doen Aar met het script dat ik nu heb?
 
- Ariën  -
Beheerder

- Ariën -

19/12/2014 12:31:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
function userCheck($username) {
    global $connect;
    // hier de rest van de functie
}
?>


Of:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if (userCheck('testuser',$connectie) == true ) {
/* Doe iets */
?>
Gewijzigd op 19/12/2014 12:32:50 door - Ariën -
 
Patrick B

Patrick B

19/12/2014 12:56:39
Quote Anchor link
Als ik je eerste snippet bekijk zou dit moeten werken ?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
    }
}

?>
Gewijzigd op 19/12/2014 13:04:17 door Patrick B
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/12/2014 13:03:56
Quote Anchor link
Ja dat gaat werken.
 
Patrick B

Patrick B

19/12/2014 13:07:35
Quote Anchor link
Bedankt Aar, Werkt prima!
Maar zou iemand mij kunnen uitleggen wat global $connect; precies doet?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
}
?>
Gewijzigd op 19/12/2014 13:10:28 door Patrick B
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/12/2014 13:21:51
Quote Anchor link
Je mag functies zien als kleine aparte programma's in je 'grote' programma. Deze nemen dan echter niet elkaars variabelen over.

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

function echoNaam()
{

    $naam = 'Patrick';
    echo $naam; // geeft Patrick;
}

function
changeNaam()
{

    global $naam;
    $naam = 'Piet';
}


$naam = 'Frank';

echoNaam();

echo $naam; // geeft Frank

changeNaam();

echo $naam; // geeft Piet
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
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

?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php

function setUsername($user)
{

    $user->name = 'Henk';
}


class User
{
    public $name;
}


$user = new User();

setUsername($user);

echo $user->name; // geeft Henk

?>
Gewijzigd op 19/12/2014 13:30:40 door Frank Nietbelangrijk
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.