jesse123
Gebruiker
- Lid geworden
- 29 aug 2012
- Berichten
- 301
Ik ben bezig met het ontwikkelen van een leerling-volg-systeem waar instructeurs de resultaten op verschillende eisen bij de juiste diploma's kunnen posten. Daarna kunnen de ouders de resultaten bekijken.
Op de bijgevoegde code kunnen de ouders de resultaten zien. $kindid wordt automatisch ingevuld door een GET.
De code werkt perfect, behalve een ding. Iedere keer dat een loop herhaald wordt, worden de resultaten van de voorgaande loops opnieuw weergegeven, en daarna pas de juiste resultaten. (Zie foto)
(Engelse benamingen omdat ik dit ook op stackoverflow gepost heb: https://stackoverflow.com/questions/49004834/sql-query-in-a-loop-cummulates-every-loop)
De eerste twee loops staan in deze afbeelding. Bij de "Opmerking" kun je zien dat de eerste twee resultaten in de tweede loop herhaald zijn van de eerste loop. Bij de derde loop worden zowel de resultaten van de eerste als de tweede loop weergegeven, alvorens de resultaten van het eigen diploma weer te geven.
Hoe kan ik dit maken?
Ik heb geprobeerd om de pointer te resetten (https://stackoverflow.com/questions/10270831/how-do-i-reset-a-php-pointer-for-a-mysql-resource) en ik heb ook geprobeerd om de variable $row te resetten en door unset($row) te gebruiken.
Code:
Op de bijgevoegde code kunnen de ouders de resultaten zien. $kindid wordt automatisch ingevuld door een GET.
De code werkt perfect, behalve een ding. Iedere keer dat een loop herhaald wordt, worden de resultaten van de voorgaande loops opnieuw weergegeven, en daarna pas de juiste resultaten. (Zie foto)
(Engelse benamingen omdat ik dit ook op stackoverflow gepost heb: https://stackoverflow.com/questions/49004834/sql-query-in-a-loop-cummulates-every-loop)
De eerste twee loops staan in deze afbeelding. Bij de "Opmerking" kun je zien dat de eerste twee resultaten in de tweede loop herhaald zijn van de eerste loop. Bij de derde loop worden zowel de resultaten van de eerste als de tweede loop weergegeven, alvorens de resultaten van het eigen diploma weer te geven.
Hoe kan ik dit maken?
Ik heb geprobeerd om de pointer te resetten (https://stackoverflow.com/questions/10270831/how-do-i-reset-a-php-pointer-for-a-mysql-resource) en ik heb ook geprobeerd om de variable $row te resetten en door unset($row) te gebruiken.
Code:
PHP:
<?
$diplomanumber = 0; //Start bij diploma nummer 0
$i = 0;
$times_to_run = 7; //Aantal diplomas
$array = array();
while ($i++ < $times_to_run)
{
$query = "SELECT * FROM Leerlingvolgsysteem WHERE kindid='$kind_id' AND diploma='$diplomanumber' ORDER BY datum DESC;";
$result = mysqli_query($connection,$query);
if(mysqli_num_rows($result) == 0){
$diplomanumber++; //Geen resultaten, skip naar de volgende loop
}
else {
echo'<h2 id="'.$diplomanumber.'">'; //Echo diploma naam
if($diplomanumber == 0){echo'Spetter Ready';}
elseif($diplomanumber == 1){echo'Spetter 1';}
elseif($diplomanumber == 2){echo'Spetter 2';}
elseif($diplomanumber == 3){echo'Spetter 3';}
elseif($diplomanumber == 4){echo'Diploma A';}
elseif($diplomanumber == 5){echo'Diploma B';}
elseif($diplomanumber == 6){echo'Diploma C';}
echo'</h2>';
while ($row = mysqli_fetch_assoc($result))
{
$phpdate = strtotime($row['datum']);
$date = date( 'd-m-Y', $phpdate ); //Zet datum om in europees formaat
$datum .= '<td><b>'.$date.'</b></td>'; //Defineer alle <td></td> die geloopt worden.
$eis1 .= '<td class="'.$row['eis1'].'">'.$row['eis1'].'</td>';
$eis2 .= '<td class="'.$row['eis2'].'">'.$row['eis2'].'</td>';
$eis3 .= '<td class="'.$row['eis3'].'">'.$row['eis3'].'</td>';
$eis4 .= '<td class="'.$row['eis4'].'">'.$row['eis4'].'</td>';
$eis5 .= '<td class="'.$row['eis5'].'">'.$row['eis5'].'</td>';
$eis6 .= '<td class="'.$row['eis6'].'">'.$row['eis6'].'</td>';
$eis7 .= '<td class="'.$row['eis7'].'">'.$row['eis7'].'</td>';
$eis8 .= '<td class="'.$row['eis8'].'">'.$row['eis8'].'</td>';
$eis9 .= '<td class="'.$row['eis9'].'">'.$row['eis9'].'</td>';
$eis10 .= '<td class="'.$row['eis10'].'">'.$row['eis10'].'</td>';
$eis11 .= '<td class="'.$row['eis11'].'">'.$row['eis11'].'</td>';
$eis12 .= '<td class="'.$row['eis12'].'">'.$row['eis12'].'</td>';
if(!empty($row['opm'])) {
$opm .= '<td style="white-space: normal;"><b>'.$row['opm'].'</b></td>';
}
else{
$opm .= '<td style="white-space: normal;"> </td>'; // No $opm.
}
if(!empty($row['instructeur'])) {
$inst .= '<td style="white-space: normal;"><b>'.$row['instructeur'].'</b></td>';
}
else{
$inst .= '<td style="white-space: normal;"> </td>'; // No $inst
}
}
echo '
<div class="volgsysteem"><table class="table table-condensed table-bordered neutralize volgsysteem">
<tbody>'; //Start table met div en tbody
$query2 = "SELECT * FROM Leerlingvolgsysteem_eisen WHERE diploma='$diplomanumber' ORDER BY nr;"; //Query om alle eisen te selecteren
$result2 = mysqli_query($connection,$query2);
if(mysqli_num_rows($result2) == 0){
$diplomanumber++; echo 'Er is een fout opgetreden, waardoor de eisen voor dit diploma niet aan uw kind gekoppeld kunnen worden.</br>';}
else {
echo'
<tr><th class="headcol"><b>Datum:</b></th>'.$datum.'</tr>';
echo '<th class="headcol"><b>Instructeur</b></th>'.$inst.'</tr>';
$counter = 0;
while ($row2 = mysqli_fetch_assoc($result2))
{
$counter++; // counter + 1
echo '
<tr><th class="headcol">';
echo substr($row2['eis'],0,15); // Eis afkorten
echo '...';
$verandernaameisnr = 'eis' . $counter; // Eisnr hernoemen
$eis = $$verandernaameisnr;
echo '</th>'.$eis.''; // echo demand
echo' </tr>';
}
echo "<th class='headcol'><b>Opmerking</b></th>";
echo ''.$opm.'';
echo' </tr>';
$diplomanumber++; // Diplomanummer +1
}
echo'</tbody>'; //End table
echo '</table></div> ';
}
}
?>
Laatst bewerkt: