[php]Probleem Weekplanner : Controleren afspraken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Patrickvs
  • Registratie: Juli 2000
  • Laatst online: 08-02-2022
Ik ben sinds kort bezig met een projectje voor school waarbij ik een systeempje moet maken waarbij de studenten via het internet afspraken kunnen maken met de docenten.

Nu zit ik vast bij een denk probleempje..het is vast wel simpel maar ik kom er maar steeds niet uit. Het is de bedoeling dat de afspraken die in worden gevoerd bij een bepaalde docent de andere afspraken niet overlappen. Ik moet hier dus een soort controle omheen bouwen. Waarbij ik steeds vergelijk met de begin en eindtijd van de nieuwe afspraak met die van de afspraken die al in de database staan.


Ik heb hiervoor het volgende bedacht waarbij ik misschien de controle makkelijk zou kunnen uitvoeren, de tijden omrekenen naar het aantal minuten. Dus 8 uur naar 480 min enz....

Nu wou ik het oplossen met een ifje die steeds de nieuwe begintijd vergelijkt met de oude begintijd en oude eindtijd en hetzelfde voor de nieuwe eindtijd..

Nu heb ik zulke waarden :
(begintijd - eindtijd )
Oud : 480 - 600
Nieuw : 735 - 780
Oud : 600 - 720
Nieuw : 735 - 780
Oud : 840 - 855
Nieuw : 735 - 780
Oud : 840 - 855
Nieuw : 735 - 780
Oud : 900 - 915
Nieuw : 735 - 780

Waarbij Nieuw dus de nieuw in te voeren afspraak is en Oud steeds een afspraak is die al in de database staat.

ik had al zoiets , maar dat wou niet echt werken :

PHP:
1
2
3
4
5
6
        if ($aantalNieuwBeginMinuut < $aantalOudBeginMinuut 
            && $aantalNieuwBeginMinuut > $aantalOudEindMinuut
            && $aantalNieuwEindMinuut < $aantalOudBeginMinuut
            && $aantalNieuwEindMinuut > $aantalOudEindMinuut ) {
        return 1;
    }


Het wil mij dus niet lukken om een goede controle in te bouwen die goed controleert of de tijden elkaar niet overlappen , omdat tevens de tijden niet in de goede volgorde staan in de database denk ik...

Iemand misschien die een idee heeft hoe ik dit kan oplossen?

Alvast bedankt.

Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Als je es met timestamps gaat werken (aantal seconden sinds 1 Jan 1970 0:00) dat lijkt me makkelijker :) Kijk naar www.php.net/time (huidige tijd in timestamp) en www.php.net/getdate (timestamp - >normale minuten/uren omzetten) :)

Acties:
  • 0 Henk 'm!

  • Patrickvs
  • Registratie: Juli 2000
  • Laatst online: 08-02-2022
ik denk niet dat ik daar iets meer mee kan bereiken...want ik controleer toch per dag..ik weet dus de datum al

Ik denk dat het meer in het feit zit dat de resultaten die ik opvraag via de database en daarna via de while lus de controle uitvoer niet in de juiste volgorde staan ofzo..

ik doe zoiets :

deze query :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    $queryControle = "SELECT    aanvrager_id, 
                ontvanger_id, 
                beginDag, 
                beginMaand, 
                beginJaar, 
                beginUur, 
                beginMinuut, 
                eindDag, 
                eindMaand, 
                eindJaar, 
                eindUur, 
                eindMinuut, 
                onderwerp, 
                locatie, 
                soort, 
                omschrijving, 
                akkoord 
          FROM afspraken WHERE beginDag = '$beginDag' AND beginMaand = '$beginMaand' 
AND beginJaar = '$beginJaar'";


Waar bij deze php 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
function controleerGeldig($beginOudUur,$beginOudMinuut,$eindOudUur,$eindOudMinuut,
$beginUur,$eindUur,$beginMinuut,$eindMinuut) {
    
    $aantalOudBeginMinuut = $beginOudUur * 60 + $beginOudMinuut;
        $aantalOudEindMinuut = $eindOudUur * 60 + $eindOudMinuut;
        echo "Oud : $aantalOudBeginMinuut $aantalOudEindMinuut";

    $aantalNieuwBeginMinuut = $beginUur * 60 + $beginMinuut;
    $aantalNieuwEindMinuut = $eindUur * 60 + $eindMinuut;
    echo " Nieuw : $aantalNieuwBeginMinuut $aantalNieuwEindMinuut";        
        if ( $aantalNieuwBeginMinuut < $aantalOudEindMinuut
        || $aantalNieuwEindMinuut > $aantalOudBeginMinuut )
    {
        return 1;
    }

   }

    while ($row = mysql_fetch_object($resultaat)) {
    // Voer query uit 

    if (controleerGeldig($row->beginUur,$row->beginMinuut,$row->eindUur,$row->eindMinuut,
$beginUur,$eindUur,$beginMinuut,$eindMinuut) == 1) {

     mysql_query($query) or die ("query mislukt"); 

    // Zorgen voor redirect naar de hoofdpagina

    $output = "<META HTTP-EQUIV=\"refresh\" content=\"1;URL=../main.php\">"; 
    echo $output;

    }
    

    }


Volgens mij ben ik wel al op de goede weg...maar mis net ff dat laatste stukje

Acties:
  • 0 Henk 'm!

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
-P@tRiCk- schreef op 16 December 2002 @ 19:35:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    $queryControle = "SELECT    aanvrager_id, 
                ontvanger_id, 
                beginDag, 
                beginMaand, 
                beginJaar, 
                beginUur, 
                beginMinuut, 
                eindDag, 
                eindMaand, 
                eindJaar, 
                eindUur, 
                eindMinuut, 
                onderwerp, 
                locatie, 
                soort, 
                omschrijving, 
                akkoord 
          FROM afspraken WHERE beginDag = '$beginDag' AND beginMaand = '$beginMaand' 
AND beginJaar = '$beginJaar'";
Deze query duidt mijns inziens toch echt op een akelig databasemodel.
De SQL-standaard voorziet in speciale datatypes voor datum-tijdparen.
Dit schijnt misschien nutteloos, maar is op de lange termijn flexibeler en beter onderhoudbaar dan een zelf bedachte variant.
Zie verder hier en hier.

Pas de replâtrage, la structure est pourrie.