SELECT functie meerdere keren gebruiken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Chris visser

chris visser

11/05/2008 00:48:00
Quote Anchor link
Het wil maar niet echt lukken met mijn script.
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$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)
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
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>";
?>


Please begin niet over mysqli_escape_string etc. Daar ben ik nog niet aan toegekomen.

BVD
 
PHP hulp

PHP hulp

29/04/2024 07:13:21
 
Joren de Wit

Joren de Wit

11/05/2008 09:57:00
Quote Anchor link
Je kunt een resultaatset van een query natuurlijk maar 1x fetchen en jij probeert dat nu 2x te doen.

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...
 
Chris visser

chris visser

13/05/2008 21:54:00
Quote Anchor link
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
 
Jurgen assaasas

Jurgen assaasas

13/05/2008 22:11:00
Quote Anchor link
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.
 
Chris visser

chris visser

13/05/2008 22:58:00
Quote Anchor link
Ok, misschien een beetje een domme vraag, maar hoe zet ik nou al deze info in een loop? Zelf had ik het volgende in gedachte maar dan krijg ik niet alles:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
while($row = $Sright->fetch_assoc())
{
    
    $rightArray = array($right_id => $row['right_id'], $right_name => $row['right_name'], $right_value => $row['right_value']);
}


foreach ($rightArray as $RightData)
{

    echo $RightData;
}

?>
Gewijzigd op 01/01/1970 01:00:00 door chris visser
 
GaMer B

GaMer B

14/05/2008 08:57:00
Quote Anchor link
Probeer dit eens chris:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$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
 



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.