Probleem met mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in
Het volgende probleem treedt op:
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\USB WebServer\root\Youtube11\index.php on line 27
Code die ik tot nog toe heb:
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
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
<?php
require_once('config.php');
$query = "SELECT * FROM pagination";
$result = mysqli_query($con, $query);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pagination in PHP with Next and Previous</title>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
<body>
<table class="table table-striped">
<tr>
<td>User ID</td>
<td>User Name</td>
<td>User Email</td>
</tr>
<tr>
<?php
while($row = mysqli_fetch_assoc($result))
{
?>
<td> <php? echo $row['ID'] ?>
require_once('config.php');
$query = "SELECT * FROM pagination";
$result = mysqli_query($con, $query);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pagination in PHP with Next and Previous</title>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
<body>
<table class="table table-striped">
<tr>
<td>User ID</td>
<td>User Name</td>
<td>User Email</td>
</tr>
<tr>
<?php
while($row = mysqli_fetch_assoc($result))
{
?>
<td> <php? echo $row['ID'] ?>
<td> <php? echo $row['Username'] ?> </td>
<td> <php? echo $row['Email'] ?> </td>
</tr>
</body>
</html>
Wie helpt mij?
En de fout is dat je niet controleert of je query gelukt is. Blijkbaar mislukt deze om een bepaalde reden.
Los van dit gebruik je ook foute PHP-tags.
Gewijzigd op 14/05/2022 19:27:46 door - Ariën -
Zonder de HTML
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
require_once('config.php');
$query = "SELECT * FROM pagination";
$result = mysqli_query($con, $query);
?>
require_once('config.php');
$query = "SELECT * FROM pagination";
$result = mysqli_query($con, $query);
?>
<php? echo $row['ID'] ?></td>
<php? echo $row['Username'] ?> </td>
<php? echo $row['Email'] ?> </td>
Toevoeging op 14/05/2022 19:37:42:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
require_once('config.php');
$query = "SELECT * FROM pagination";
$result = mysqli_query($con, $query);
?>
require_once('config.php');
$query = "SELECT * FROM pagination";
$result = mysqli_query($con, $query);
?>
<php? echo $row['ID'] ?>
<php? echo $row['Username'] ?>
<php? echo $row['Email'] ?>
Kan je jouw bericht aanpassen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
require_once('config.php');
$query = "SELECT * FROM pagination";
$result = mysqli_query($con, $query);
?>
<?php
while($row = mysqli_fetch_assoc($result))
{
?>
<php? echo $row['ID'] ?>
require_once('config.php');
$query = "SELECT * FROM pagination";
$result = mysqli_query($con, $query);
?>
<?php
while($row = mysqli_fetch_assoc($result))
{
?>
<php? echo $row['ID'] ?>
<php? echo $row['Username'] ?>
<php? echo $row['Email'] ?>
Toevoeging op 14/05/2022 19:44:46:
Het gaat mis bij de echo's
Daar wordt het in VS Code rood
Toevoeging op 14/05/2022 19:55:31:
Lol, volgens gaat de codeparser hier op zijn plaat door <php? wat verkeerd is.
Anyway, je weet wat er nu fout gaat in je script. Tijd om controles toe te voegen.
Gewijzigd op 14/05/2022 19:57:37 door - Ariën -
Inderdaad php? vind die niet leuk. Het moest uiteraard ?php zijn. Thanks!
Dat is niet het enige probleem in je script.
Maar we hadden te vroeg gejuicht :((. Dat lost het probleem niet op
Dat zei ik al om 19:26:55. ;-)
hoe kan ik een plaatje ervan uploaden?
www.imgbb.com kan dat.
Toevoeging op 14/05/2022 20:09:28:
Handig leesvoer over goede opbouw van queries.:
http://wouterj.nl/sql-boilerplate/
Bij Toevoeging op 14/05/2022 20:09:28:
Handig leesvoer over goede opbouw van queries.:
http://wouterj.nl/sql-boilerplate/
Gewijzigd op 14/05/2022 20:09:54 door - Ariën -
WouterJ zijn leesvoer heb ik gedaan. Hier kreeg ik geen foutmeldingen. Zie bijgaand plaatje
https://ibb.co/F7ttMQW en
code
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
/*
* MySQLi CONNECTIE BESTAND
* In dit bestand maken we de verbinding met een MySQL
* server doormiddel van MySQLi functies. In deze
* functie zit meteen het selecteren van een db, dus
* dat doen we ook meteen.
*/
/* Error-Handling
* ==============
* Als eerst maken we een functie voor het beheren van
* errors. Hiermee kunnen we makkelijk het probleem vinden
* als er iets mis is.
* Zodra een script online is wil je niet dat de gebruiker
* de foutmeldingen krijgt, vandaar dat we hier error_log
* gebruiken als DEBUG_MODE false is.
*/
// DEBUG_MODE, deze wordt false als het script online geplaatst is
define('DEBUG_MODE', true);
/*
* We slaan alle errors op in $errors. Deze lezen we in het
* script uit in via een foreach loop
*/
$errors = Array();
if( DEBUG_MODE )
{ // DEBUG_MODE staat aan
// Zorg dat we alle errors te zien krijgen
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_NOTICE);
}
else
{
// DEBUG_MODE uit dus geen errors tonen
ini_set('display_errors', 'Off');
error_reporting(0);
}
function SQLerror( $error, $message, $file )
{
// $error is het resultaat van mysql_error()
// $message is de tekst die bij de error staat,
// deze tekst zullen we gebruiken als DEBUG_MODE uit staat
// $file is het resultaat van __FILE__ in het bestand van de error
global $errors; // Zorg dat de error variabele die we net hebben gemaakt in deze functie komt
if( DEBUG_MODE )
{ # DEBUG_MODE aan => sla de errors op zodat we ze later kunnen tonen
$errors[] = $message.': '.$error;
}
else
{ # DEBUG_MODE uit => log de errors en sla alleen de $message op
// We slaan niet alleen de error op, maar ook het bestand en de datum
$log = $file.' ['.date('H:i:s').'] '.$error;
error_log($log);
$errors[] = $message;
}
}
/* CONNECTIE MET MySQL SERVER
* ==========================
*/
$sqlLink = mysqli_connect('localhost', 'root', 'usbw', 'sr_system');
// Verander de host, inlog naam, wachtwoord en sql-boilerplate (db) in de juiste gegevens
if( $sqlLink === false )
{
// Als mysqli_connect false returned is er iets mis gegaan, gebruik de net gemaakte error functie
// Omdat het de connectie betreft gebruiken we mysqli_connect_error()
SQLerror( mysqli_connect_error(), 'We kunnen geen verbinding aanmaken', __FILE__ );
}[/code]
Daar komen geen foutmeldingen uit. Dus de connectie is goed!
De vraag blijft waar de foutmelding nu zit?
/*
* MySQLi CONNECTIE BESTAND
* In dit bestand maken we de verbinding met een MySQL
* server doormiddel van MySQLi functies. In deze
* functie zit meteen het selecteren van een db, dus
* dat doen we ook meteen.
*/
/* Error-Handling
* ==============
* Als eerst maken we een functie voor het beheren van
* errors. Hiermee kunnen we makkelijk het probleem vinden
* als er iets mis is.
* Zodra een script online is wil je niet dat de gebruiker
* de foutmeldingen krijgt, vandaar dat we hier error_log
* gebruiken als DEBUG_MODE false is.
*/
// DEBUG_MODE, deze wordt false als het script online geplaatst is
define('DEBUG_MODE', true);
/*
* We slaan alle errors op in $errors. Deze lezen we in het
* script uit in via een foreach loop
*/
$errors = Array();
if( DEBUG_MODE )
{ // DEBUG_MODE staat aan
// Zorg dat we alle errors te zien krijgen
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_NOTICE);
}
else
{
// DEBUG_MODE uit dus geen errors tonen
ini_set('display_errors', 'Off');
error_reporting(0);
}
function SQLerror( $error, $message, $file )
{
// $error is het resultaat van mysql_error()
// $message is de tekst die bij de error staat,
// deze tekst zullen we gebruiken als DEBUG_MODE uit staat
// $file is het resultaat van __FILE__ in het bestand van de error
global $errors; // Zorg dat de error variabele die we net hebben gemaakt in deze functie komt
if( DEBUG_MODE )
{ # DEBUG_MODE aan => sla de errors op zodat we ze later kunnen tonen
$errors[] = $message.': '.$error;
}
else
{ # DEBUG_MODE uit => log de errors en sla alleen de $message op
// We slaan niet alleen de error op, maar ook het bestand en de datum
$log = $file.' ['.date('H:i:s').'] '.$error;
error_log($log);
$errors[] = $message;
}
}
/* CONNECTIE MET MySQL SERVER
* ==========================
*/
$sqlLink = mysqli_connect('localhost', 'root', 'usbw', 'sr_system');
// Verander de host, inlog naam, wachtwoord en sql-boilerplate (db) in de juiste gegevens
if( $sqlLink === false )
{
// Als mysqli_connect false returned is er iets mis gegaan, gebruik de net gemaakte error functie
// Omdat het de connectie betreft gebruiken we mysqli_connect_error()
SQLerror( mysqli_connect_error(), 'We kunnen geen verbinding aanmaken', __FILE__ );
}[/code]
Daar komen geen foutmeldingen uit. Dus de connectie is goed!
De vraag blijft waar de foutmelding nu zit?
https://github.com/wouterj/sql-boilerplate/blob/master/mysqli/producaal/query-select.php
Gewijzigd op 14/05/2022 20:28:02 door - Ariën -
Dat levert de volgende foutmeldingen op:
Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in C:\USB WebServer\root\Youtube11\index3.php on line 33
Notice: Undefined variable: sqlLink in C:\USB WebServer\root\Youtube11\index3.php on line 39
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\USB WebServer\root\Youtube11\index3.php on line 39
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in C:\USB WebServer\root\Youtube11\index3.php on line 53
Notice: Undefined variable: errors in C:\USB WebServer\root\Youtube11\index3.php on line 82
Maar ik weet niet wat ik hier mee moet. DE tabel pagination heb ik wel nog met enkele quotes voorzien omdat dit in andere documentatie ook staat.
Toevoeging op 14/05/2022 21:14:38:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
// Include het connectie bestand
require 'connect.php';
// Maak een array voor foutmeldingen voor de gebruiker
$userErrors = Array();
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
// Het formulier is verzonden
if( !isset($_POST['naam']) )
{
// Naam is niet ingevuld
$userErrors[] = 'U heeft geen naam ingevuld';
}
if( count($userErrors) == 0 )
{
// Er zit niks in $userErrors en dus is alles goed
// Gebruik altijd mysqli_real_escape_string voor alle
// variabelen die de gebruiker kan aanpassen (alles met $_)
$sQuery = "
SELECT
name,
job,
rank
FROM
users
WHERE
name = '".mysqli_real_escape_string(ucfirst(trim($_POST['naam'])))."'
";
// Gebruik in je query geen backtricks (`)
// en alleen quotes (') als je te maken hebt met een string ($_POST['naam'] in dit geval)
// Voer de query uit
$result = mysqli_query($sqlLink, $sQuery);
// De volgorde van de parameters (sqllink en query) zijn precies omgekeerd aan de mysql_*
// functies. En de link parameter is verplicht
if( $sQuery === false )
{
// De query is niet gelukt
SQLerror(mysqli_error(), 'Uw opdracht kan niet worden uitgevoerd', __FILE__);
}
else
{
// De query is gelukt, maar heeft hij wel een resultaat gekregen?
// Dat kijken we na met mysql_num_rows(), bij een SELECT query geeft deze
// het aantal geselecteerde rijen weer
if( mysqli_num_rows($result) > 0 )
{
// Er zijn meer dan 0 rijen opgehaald en dus is er iets gevonden
// Nu moeten we de resultaten nog fetchen voordat we ze kunnen gebruiken
// het fetchen zet ze in een array die we vervolgens met een while loop uitlezen
while( $row = mysqli_fetch_assoc($result) )
{
// $row is nu elk result. Met $row['kolomNaam'] kun je nu alles op vragen
echo $row['name'].' is een '.$row['job'].' en zijn rank is '.$row['rank'];
}
}
else
{
// Er is niks gevonden, dit is geen systeem fout maar een zoekfout => user error
$userError[] = 'Er kan niks gevonden worden';
}
}
}
}
?>
<!DOCTYPE HTML>
<html lang=nl>
<head>
<meta charset=UTF-8>
<title>SQL Boilerplate - SELECT query met MySQL</title>
</head>
<body>
<?php if( count($errors) > 0 ) :
// Er zijn errors gevonden ?>
<div class="error">
<ul>
<?php foreach( $errors as $err ) : ?>
<li><?php echo $err; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<?php if( count($userErrors) > 0 ) :
// Er zijn errors gevonden ?>
<div class="error">
<ul>
<?php foreach( $userErrors as $err ) : ?>
<li><?php echo $err; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<form action method=post>
<label>Naam: <input type=text name=naam /></label><br>
<input type=submit value=Toon />
</form>
</body>
// Include het connectie bestand
require 'connect.php';
// Maak een array voor foutmeldingen voor de gebruiker
$userErrors = Array();
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
// Het formulier is verzonden
if( !isset($_POST['naam']) )
{
// Naam is niet ingevuld
$userErrors[] = 'U heeft geen naam ingevuld';
}
if( count($userErrors) == 0 )
{
// Er zit niks in $userErrors en dus is alles goed
// Gebruik altijd mysqli_real_escape_string voor alle
// variabelen die de gebruiker kan aanpassen (alles met $_)
$sQuery = "
SELECT
name,
job,
rank
FROM
users
WHERE
name = '".mysqli_real_escape_string(ucfirst(trim($_POST['naam'])))."'
";
// Gebruik in je query geen backtricks (`)
// en alleen quotes (') als je te maken hebt met een string ($_POST['naam'] in dit geval)
// Voer de query uit
$result = mysqli_query($sqlLink, $sQuery);
// De volgorde van de parameters (sqllink en query) zijn precies omgekeerd aan de mysql_*
// functies. En de link parameter is verplicht
if( $sQuery === false )
{
// De query is niet gelukt
SQLerror(mysqli_error(), 'Uw opdracht kan niet worden uitgevoerd', __FILE__);
}
else
{
// De query is gelukt, maar heeft hij wel een resultaat gekregen?
// Dat kijken we na met mysql_num_rows(), bij een SELECT query geeft deze
// het aantal geselecteerde rijen weer
if( mysqli_num_rows($result) > 0 )
{
// Er zijn meer dan 0 rijen opgehaald en dus is er iets gevonden
// Nu moeten we de resultaten nog fetchen voordat we ze kunnen gebruiken
// het fetchen zet ze in een array die we vervolgens met een while loop uitlezen
while( $row = mysqli_fetch_assoc($result) )
{
// $row is nu elk result. Met $row['kolomNaam'] kun je nu alles op vragen
echo $row['name'].' is een '.$row['job'].' en zijn rank is '.$row['rank'];
}
}
else
{
// Er is niks gevonden, dit is geen systeem fout maar een zoekfout => user error
$userError[] = 'Er kan niks gevonden worden';
}
}
}
}
?>
<!DOCTYPE HTML>
<html lang=nl>
<head>
<meta charset=UTF-8>
<title>SQL Boilerplate - SELECT query met MySQL</title>
</head>
<body>
<?php if( count($errors) > 0 ) :
// Er zijn errors gevonden ?>
<div class="error">
<ul>
<?php foreach( $errors as $err ) : ?>
<li><?php echo $err; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<?php if( count($userErrors) > 0 ) :
// Er zijn errors gevonden ?>
<div class="error">
<ul>
<?php foreach( $userErrors as $err ) : ?>
<li><?php echo $err; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<form action method=post>
<label>Naam: <input type=text name=naam /></label><br>
<input type=submit value=Toon />
</form>
</body>
Heb je de foutmeldingen al vertaald?
mysqli_real_escape_string() expects exactly 2 parameters, 1 given
Verwacht 2, 1 gegeven. Dit leidt tot problemen!
39:
mysqli_query() expects parameter 1 to be mysqli, null given
Verwacht 1, 0 gegeven
53:
expects parameter 1 to be mysqli_result, null given
Verwacht 1, 0 gegeven
82:
Undefined variable:
ongedefineerde variable
Toevoeging op 14/05/2022 21:47:04:
Ik snap het nog steeds niet. Jullie hebben heel wat ervaring en ik heel weinig. Een tip van de sluier oplossen?
IK snap hem nog steeds niet. Volgens mij staat alles wel correct maar doet ie het nog steeds niet!
Plaatje van de database:
https://ibb.co/0nH6kQs
Welke argumenten mis ik?