SELECT functie meerdere keren gebruiken
DMV het script hieronder probeer ik een tabel te maken waarin de rechten per groep en module worden weergegeven in de vorm van radiobuttons. Bovenin de pagina heb ik 2 query's gemaakt die nodig zijn om alle informatie uit de database te halen. Ik ben nog een beginneling in OOP en probeer het script zo kort mogelijk te maken dus wil ik de onderstaande resultset meerdere keren gebruiken.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$sql = "SELECT * FROM rights ";
if(!$Sright = $mysqli->query($sql))
{
trigger_error('Fout in query: '.$mysqli->error);
}
?>
$sql = "SELECT * FROM rights ";
if(!$Sright = $mysqli->query($sql))
{
trigger_error('Fout in query: '.$mysqli->error);
}
?>
Het onderstaande script geeft mijn tabel weer. Ik heb in het script commentaar geplaatst in de hoop dat jullie kunnen vinden wat er fout gaat. Ik heb ook aangegeven waar volgens mij de fout zich bevind.
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
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
<?php
$ModuleId = $_GET['Mid'];
echo "<center><h2>rechten beheren: ".$ModuleName." </h2></center><br>";
echo "<p>";
//Alle groepen uit de k_acces tabel halen waarvan een recht is opgeslagen
$sql = "SELECT
m.*,
g.*,
r.*
FROM
modules AS m
INNER JOIN
k_acces AS a
ON
m.module_id = a.module_id
INNER JOIN
rights AS r
ON
m.module_id = a.module_id
INNER JOIN
groups AS g
ON
m.module_id = a.module_id
WHERE
g.group_id = a.group_id
AND
r.right_id = a.right_id
AND
a.module_id = $ModuleId
";
if(!$Srights = $mysqli->query($sql))
{
trigger_error('Fout in query: '.$mysqli->error);
}
//alle rechten uit database halen voor invoervelden
$sql = "SELECT * FROM rights ";
if(!$Sright = $mysqli->query($sql))
{
trigger_error('Fout in query: '.$mysqli->error);
}
///////////////////////////////////////////////////////////
// Lijst met rechten per groep voor geselecteerde module //
///////////////////////////////////////////////////////////
echo " <table style='border-style: solid; border-width: 1; border-color: #000000;'>";
echo " <tr>";
echo " <td><strong>Groep</strong></td>";
while($row = $Sright->fetch_assoc())
{
echo " <td align='center'><strong>".$row['right_name']."</strong></td>";
}
while($row = $Srights->fetch_assoc())
{
//De k_acces.right_id opslaan in een variable voor later gebruik.
$k_accesRightId = $row['right_id'];
echo " <form action='index.php?module=modulebeheer&admin=Y&page=rights&Mid=".$ModuleId."' method='post'>";
echo " <tr bgcolor='".($colortoggle ? 'gray' : 'white')."'>"; $colortoggle = !$colortoggle;
echo " <td width='100'>".$row['group_name']."</td>";
//Voor elk recht een Radiobutton weergeven
//Op dit punt gaat het volgens mij mis.
//Alles in het bovenstaande gedeelte werkt, maar de radiobuttons die in de tabel weergegeven zouden moeten worden
//Worden niet weergegeven. Ook: echo "test"; in de onderstaande loop word niet weergegeven
while($row = $Sright->fetch_assoc())
{
//Radiobutton aanvinken die bij het recht van de groep hoort
if($k_accesRightId == $row['right_id'])
{
echo " <td width='80' align='center'>";
echo " <input type='radio' name='right_id' value='".$row['right_id']."' checked>";
echo " </td>";
}
//Lege radiobuttons weergeven voor rechten die voor de groep niet van toepassing zijn
else
{
echo " <td width='80' align='center'>";
echo " <input type='radio' name='right_id' value='".$row['right_id']."'>";
echo " </td>";
}
}
echo " </tr>";
echo "</form>";
}
echo " </table>";
?>
$ModuleId = $_GET['Mid'];
echo "<center><h2>rechten beheren: ".$ModuleName." </h2></center><br>";
echo "<p>";
//Alle groepen uit de k_acces tabel halen waarvan een recht is opgeslagen
$sql = "SELECT
m.*,
g.*,
r.*
FROM
modules AS m
INNER JOIN
k_acces AS a
ON
m.module_id = a.module_id
INNER JOIN
rights AS r
ON
m.module_id = a.module_id
INNER JOIN
groups AS g
ON
m.module_id = a.module_id
WHERE
g.group_id = a.group_id
AND
r.right_id = a.right_id
AND
a.module_id = $ModuleId
";
if(!$Srights = $mysqli->query($sql))
{
trigger_error('Fout in query: '.$mysqli->error);
}
//alle rechten uit database halen voor invoervelden
$sql = "SELECT * FROM rights ";
if(!$Sright = $mysqli->query($sql))
{
trigger_error('Fout in query: '.$mysqli->error);
}
///////////////////////////////////////////////////////////
// Lijst met rechten per groep voor geselecteerde module //
///////////////////////////////////////////////////////////
echo " <table style='border-style: solid; border-width: 1; border-color: #000000;'>";
echo " <tr>";
echo " <td><strong>Groep</strong></td>";
while($row = $Sright->fetch_assoc())
{
echo " <td align='center'><strong>".$row['right_name']."</strong></td>";
}
while($row = $Srights->fetch_assoc())
{
//De k_acces.right_id opslaan in een variable voor later gebruik.
$k_accesRightId = $row['right_id'];
echo " <form action='index.php?module=modulebeheer&admin=Y&page=rights&Mid=".$ModuleId."' method='post'>";
echo " <tr bgcolor='".($colortoggle ? 'gray' : 'white')."'>"; $colortoggle = !$colortoggle;
echo " <td width='100'>".$row['group_name']."</td>";
//Voor elk recht een Radiobutton weergeven
//Op dit punt gaat het volgens mij mis.
//Alles in het bovenstaande gedeelte werkt, maar de radiobuttons die in de tabel weergegeven zouden moeten worden
//Worden niet weergegeven. Ook: echo "test"; in de onderstaande loop word niet weergegeven
while($row = $Sright->fetch_assoc())
{
//Radiobutton aanvinken die bij het recht van de groep hoort
if($k_accesRightId == $row['right_id'])
{
echo " <td width='80' align='center'>";
echo " <input type='radio' name='right_id' value='".$row['right_id']."' checked>";
echo " </td>";
}
//Lege radiobuttons weergeven voor rechten die voor de groep niet van toepassing zijn
else
{
echo " <td width='80' align='center'>";
echo " <input type='radio' name='right_id' value='".$row['right_id']."'>";
echo " </td>";
}
}
echo " </tr>";
echo "</form>";
}
echo " </table>";
?>
Please begin niet over mysqli_escape_string etc. Daar ben ik nog niet aan toegekomen.
BVD
Als jij dezelfde resultaatset op een later moment nog eens wilt doorlopen, zul je ervoor moeten zorgen dat je de gegevens in de eerste loop in een array opslaat. De tweede keer kun je dan van deze array gebruik maken om de gegevens nogmaals te tonen...
Ok tx. Dit moest ik ff weten want misschien was het wel mogelijk om een query meerdere keren te fetchen zonder iets extra's te doen
Een query kun je maar één keer fetchen, daarna is hij weg uit het geheugen (niet meer nodig dus). Zoals Blanche al zegt, moet je tijdens je loop de resultaten in een nieuwe array moeten opslaan, om deze vervolgens meerdere maken te gebruiken.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$data = array();
while($row = $Sright->fetch_assoc()) {
array_push($data, $row);
}
print_r($data);
?>
$data = array();
while($row = $Sright->fetch_assoc()) {
array_push($data, $row);
}
print_r($data);
?>
EDIT: Typo.
Gewijzigd op 01/01/1970 01:00:00 door GaMer B