[php] rooster genereren

Pagina: 1
Acties:
  • 639 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • rewind.
  • Registratie: Oktober 2001
  • Laatst online: 16-06 20:26
Hallo ik probeer een rooster te genereren het probleem is dat er kalenders genoeg te vinden zijn alleen geen roosters. De volgende gegevens haalt hij uit de database:

lesuur (Uur 1 t/m 9)
lesdag (Dag 1 t/m 5)

het rooster moet er zo uitzien:

 madiwodovr
1 les   
2les  les 
3lesles   
4     
5     
6lesles les 
7 leslesles 
8les    
9     

het kan dus zijn dat er lee uren zijn.

wat ik zelf tot nu toe heb:
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
 
<table border="1"> 
        <tr> 
            <td>&nbsp;</td> 
            <td>ma</td> 
            <td>di</td> 
            <td>wo</td> 
            <td>do</td> 
            <td>vr</td> 
        </tr> 
        <tr> 
        <td>1</td> 

<? 
        include ("connect.php"); 
        $uur = 1; 
        $rooster = mysql_query("SELECT * FROM roosterplus WHERE Doc = 'NIJSS' AND Per = 1 ORDER BY Dag"); 
        for($i=0;$i<mysql_num_rows($rooster);$i++) 
        { 
           $datapool[$i] = mysql_fetch_array($rooster);             
        } 
        for ($t = 1; $t <= 5; $t++) { 
            foreach($datapool as $k => $v) { 
                if ($v["Uur"] == 4) 
                { 
                    //echo "<td>dag:".$v["Dag"]."  uur:".$v["Uur"]."</td>"; 
                    if ($v["Dag"] == $t) { 
                        $p = "<td>dag:".$v["Dag"]."  uur:".$v["Uur"]."</td>"; 
                    } else { 
                        $p = "<td>nix</td>"; 
                    }     
                }  
                     
            }     
            echo $p; 
        } 
        ?> 
        </tr> 
        </table> 


het probleem is dus dat ik per rij wil genereren, dit doe ie alleen iedere keer begint de tellereen rondje te maken ipv. 1x een rondje te maken en alles te lezen.

[ Voor 62% gewijzigd door rewind. op 06-02-2006 14:28 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Je bent nu niet per rij maar per kolom bezig als ik je code zo bekijk. :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • webfreakz.nl
  • Registratie: November 2003
  • Laatst online: 01-04 15:43

webfreakz.nl

el-nul-zet-é-er

Stoney187 schreef op maandag 06 februari 2006 @ 14:24:
...
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
 
...
<? 
        include ("connect.php"); 
        $uur = 1; 
        $rooster = mysql_query("SELECT * FROM roosterplus WHERE Doc = 'NIJSS' AND Per = 1 ORDER BY Dag"); 

[b]
        for($i=0;$i<mysql_num_rows($rooster);$i++) 
        { 
           $datapool[$i] = mysql_fetch_array($rooster);             
        } 
[/b]
Niet erg handig omdat dit wel een gigantische loop kan veroorzaken? Stel rooster is 100miljard rijen... wat dan?

En het lijkt mij verder dat je ook nog ergens <tr> neer moet zetten aangezien je 9 regels nodig hebt voor je uren. Ik heb op het moment even geen toegang tot PHP/MySQL resources dus ik kan niks uittesten voor je maar ik zou maar even je hele file herzien...

edit:

Wat NMe zegt dus ;)

[ Voor 76% gewijzigd door webfreakz.nl op 06-02-2006 14:35 ]

"You smell that, son? What sir? Napalm, I love the smell of napalm in the mornin!" || Children of Bodom fan!


Acties:
  • 0 Henk 'm!

Anoniem: 159515

Ik snap er ook niet veel van? :?

Vind de code zoiezo een beetje vreemd, waarom gebruik je bijvoorbeeld niet de functie mysql_fetch_row()? Zou ik eens naar kijken nadat je huidige probleem hebt opgelost.

edit:
webfreakz.nl schreef op maandag 06 februari 2006 @ 14:33:
[...]

En het lijkt mij verder dat je ook nog ergens <tr> neer moet zetten aangezien je 9 regels nodig hebt voor je uren. Ik heb op het moment even geen toegang tot PHP/MySQL resources dus ik kan niks uittesten voor je maar ik zou maar even je hele file herzien...

edit:

Wat NMe zegt dus ;)
Het lijkt erop dat hij alleen de rij voor het 4e uur probeert weer te geven.
if ($v["Uur"] == 4)

[ Voor 57% gewijzigd door Anoniem: 159515 op 06-02-2006 14:37 ]


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 20:59
weken/uren totaal staan toch vast? Ik zou dan zo lui zijn om de boel eerst netjes in een array te zetten, en dan gewoon de rest vast te zetten. Voordat ze de dagen gaan veranderen zijn we al lichtjaren verder.

Dus gewoon de tabel uit te poepen, en in elke td dit bijvoorbeeld te doen:

PHP:
1
echo $rooster['maandag'][0] // 0 is hier het eerste uur


Soms moet je makkelijk denken om moeilijk te doen :P

|>


Acties:
  • 0 Henk 'm!

  • rewind.
  • Registratie: Oktober 2001
  • Laatst online: 16-06 20:26
-NMe- schreef op maandag 06 februari 2006 @ 14:31:
Je bent nu niet per rij maar per kolom bezig als ik je code zo bekijk. :?
dat is inderdaad het probleem de teller plaatst de les op de juiste dag alleen dan begint de teller op of andere manier opnieuw waardoor ik alleen de laatste les terug krijg.

hij zoekt nu dus bijvoorbeeld op lesuur 4 dan moet hij van lesuur 4 elke dag weergeven. normaal vind hij alleen ingevulde velden en zou hij dus bv. de les van vrijdag op dinsdag kunnen zetten, daarvoor is de teller en de if statement, alleen gaat dit op dit moment niet goed.

Acties:
  • 0 Henk 'm!

Anoniem: 88197

Je mist echt ergens een <tr> hoor... Op deze manier slaat het namelijk nergens op wat er staat. Na elke foreach moet je een nieuwe rij plaatsen, aangezien je dan naar de volgende dag gaat.
alleen dan begint de teller op of andere manier opnieuw waardoor ik alleen de laatste les terug krijg.
Wat bedoel je hier mee :? Kloppen je gegevens wel? Wat voor uitvoer krijg je?

Verder vind ik de code maar vrij wazig en kan het volgens mij veel makkelijker :)

[ Voor 28% gewijzigd door Anoniem: 88197 op 06-02-2006 14:55 ]


Acties:
  • 0 Henk 'm!

Anoniem: 26421

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// init data
$dag = array();
$dag[1] = 2; // maandag 2e uur
$dag[4] = 5; // woensdag 7e uur, etc.

$colwidth = 40;
$days = array('ma','di','wo','do','vr');

// create table
echo '<table style="width:'.($colwidth*6).'px;">';
for($row=0;$row<10;$row++) {
    echo '<tr>';
    for($col=0;$col<6;$col++) {
        echo '<td>';
        if($col==0 && $row > 0) echo $row; // hour indic.
        if($row==0 && $col>0) echo $days[($col-1)]; // day indic.
        if(isset($dag[$col]) && $dag[$col]==$row) echo $dag[$col]; // lessons indic.
        echo '</td>';
    }
    echo '</tr>';
}
echo '</table>';


Je mag er zelf meerdere uren per dag inbouwen, met behulp van bijvoorbeeld een array met meer dimensies :Y)

[ Voor 27% gewijzigd door Anoniem: 26421 op 06-02-2006 14:57 ]


Acties:
  • 0 Henk 'm!

  • rewind.
  • Registratie: Oktober 2001
  • Laatst online: 16-06 20:26
dankje ivy! daarmee is het gelukt ik zal morgen even de code posten!

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 18:10
Als je wat uitgebreider gaat werken is het vaak handiger om per datum te werken. In dit geval gaat dit ook wel hoor, maar als je meer uitgebreide roosters gaat maken is het wel erg handig.
Pagina: 1