Tijd tussen begin en eindttijd reserveren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jurgen assaasas

Jurgen assaasas

02/11/2006 09:43:00
Quote Anchor link
Hallo,

Ik wil maken een registratie systeem voor gereserveerde laptops. Nu zet ik in mijn DB de begin en einddtijd. en wil ik de tijd daartussen berekenen (in tijd dus niet het aantal uren ertussen) dus als iemand anders wil reserveren in de tijd dat een bepaalde laptop weg is dat dat niet gaat dus echo "fout ofzoiets"; is dit enigzins mogelijk en zoja hoe zou ik dit kunnen oplossen.
 
PHP hulp

PHP hulp

18/11/2024 20:25:15
 
Joren de Wit

Joren de Wit

02/11/2006 10:22:00
Quote Anchor link
Hoe ziet je datamodel eruit? Ik neem aan dat je minimaal 2 tabellen gebruikt? Een tabel voor de laptops en een tabel voor de reserveringen? Dus bijvoorbeeld:

laptops
--------
id (int)
naam (varchar)
omschrijving (varchar)

reserveringen
----------------
id (int)
laptop_id (int)
begin (datetime)
eind (datetime)

Je zou dan een lijst van alle beschikbare laptops op een ingevoerde tijd weer kunnen geven. Oftwel een lijst genereren met laptops waarvan het gegeven tijdstip niet tussen de begin en eindtijd van een andere reservering ligt.

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
<?php
$begintijd
// begintijd van reservering

$sql = "
    SELECT
        l.id,
        l.naam
    FROM
        laptops AS l,
        reserveringen AS r
    WHERE
        l.id = r.laptop_id
    AND
        r.laptop_id NOT IN (
            SELECT laptop_id
            FROM reserveringen
            WHERE '"
.$begintijd."' BETWEEN begin AND eind)
    "
;
?>
 
Jurgen assaasas

Jurgen assaasas

02/11/2006 10:32:00
Quote Anchor link
Dit ziet er erg handig uit... maar dit scriptje moet ik dus hebben als iemand iets invoert dus zou ik het eerst in PHP moeten checken toch.

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
<?php

if(date(d-m-Y H:i:s) =  $begindatum<hier de functie van between ofzoiets> $einddatum){

echo"invoeren niet mogelijk fout blallaala";

}


else{

$query ="INSERT....";

}


?>


Misschien is het ook handig een functie te maken waarbij ik een range creeer vanuit mijn select query en op het moment dat men iets wil inserten in de DB de range controleren
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Joren de Wit

Joren de Wit

02/11/2006 10:48:00
Quote Anchor link
Data met elkaar vergelijken gaat veel makkelijker in MySQL dan in PHP, ik zou je aanraden om het werken met data en tijden ook over te laten aan MySQL.

De date() functie in php geeft immers een gewone string terug. Als je toch php wilt gebruiken, zul je er op moeten letten dat het formaat van de datum/tijd gelijk is aan yyyy-mm-dd hh:mm:ss. Als je namelijk 2-11-2006 vergelijkt met 3-10-2006 zal php zeggen dat 2-11 kleiner is (dus eerder komt) dan 3-10.

Wil je het in php doen, dan kun je gewoon de begin en eindtijd van een bepaalde laptop uit je tabel reserveringen halen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
    begin,
    eind
FROM
    reserveringen
WHERE
    laptop_id = het_bewuste_id
 
Jurgen assaasas

Jurgen assaasas

02/11/2006 10:58:00
Quote Anchor link
Dus zou ik voordat ik een insert in mijn db via een extra query checken of de range in gebruik is.
 
Joren de Wit

Joren de Wit

02/11/2006 11:01:00
Quote Anchor link
Als je de controle met php uit wilt voeren wel ja. Maar nogmaals, persoonlijk zou ik ervoor kiezen om de gebruiker een bepaalde periode op te laten geven waarin hij een laptop wil reserveren en aan de hand daar van de beschikbare laptops te tonen.
 
Frank -

Frank -

02/11/2006 11:43:00
Quote Anchor link
Jurgen schreef op 02.11.2006 10:58:
Dus zou ik voordat ik een insert in mijn db via een extra query checken of de range in gebruik is.
Zorg je er voor dat jouw database dit checked, dat is waterdicht. Zet dus een goede constraint in de database die voorkomt dat je uberhaubt dubbele boekingen kunt maken. Een controle vanuit php met een extra query, is achterhaald op het moment dat je hem hebt uitgevoerd. De resultaten zijn dus niet 100% betrouwbaar.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Jurgen assaasas

Jurgen assaasas

02/11/2006 12:31:00
Quote Anchor link
Ik snap er eigenlijk vrij weinig van, ok ik moet met mijn DB checken of de desbetreffende datum/tijd bezet is. vervolgens beschikbare tijden weergeven? ik wil dit evt in kwartieren doen. maar stel ik doe dit op de exacte sec/minuut dan krijg je een lijst van hier tot tokio? Wat ik wil:

Mensen komen op de pagina. Hier zien zij laptops zij kiezen 1 van de betreffende laptops.

vervolgens komen zij op een andere pagina waar alle tijden van die laptops staan.

zij willen een laptop reserveren... zij kiezen een bereik(begin, eindtijd) dat beschikbaar is: query insert into.

zij kiezen een bereik dat bezet(controleren of de begindatum niet tussen een tijdstip valt in een andere begin/eind bereik) is: error de laptop is op dat moment niet aanwezig

het weergeven van tijden is geen probleem ik snap alleen niet hoe ik die bereiken uitreken.'

en misschien de andere optie, het weergeven van beschikbare tijden. hoe geef ik dat dan weer weer, ik niet snap :(
 



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.