crisse6Medlem sedan dec. 20002 526 inlägg Tjena!
Funderar på hur jag ska lösa följande:
En person väljer ett val i en dropdown. Det finns två val å välja bland.
Beroende på vilket val man väljer uppdateras en annan lista med olika tider (via javascript).
Te x:
Selectlist 1: Val 1
Selectlist 2 (tiderna):
09.00-10.00
10.00-11.00 etc
Selectlist 1: Val 2
Selectlist 2 (tiderna):
09.30-10.00
10.00-10.30
Att kolla sedan om det finns något på Val 1 valt i databasen mot tiderna när det är hela timmar är inga problem. Men om det finns tid på Val 1 säg, 10.00-11.00 och man väljer Val 2 10.00-10.30 så ska inte det gå heller.
Hur bör man lösa detta?
uppfattar frågan så här:
- du ska kolla i db:n innan du visar alternativen
- man kan "boka" både hela timmar (9-10) och halva timmar (9-9.30 resp 9.30-10)
- en "bokning" på 9-10 omöjliggör bokningar på de andra alternativen
Isåfall finns det fyra scenarier som måste unvikas:
* slutar efter att en annan bokning börjar men innan den slutar
* startar efter en annan bokning börjar, men innan de slutar
* börjar innan annan bokning slutar, men slutar efter
* börjar före och slutar efter annan bokning börjar/slutar
löses kodmässigt såhär (t.ex.)
SELECT * FROM db_bokning WHERE
$stoptid > db_starttid AND $stoptid <= db_stoptid OR
$starttid >= db_starttid AND $startid <= db_stoptid OR
$starttid <= db_starttid AND $stoptid >= db_stoptid
om du får en träff på denna sökning så är positionen upptagen.
Detta är bara ett sätt att lösa det. Ett annat är att plocka ut alla bokningar i en lista och göra ett likande test:
foreach ($array AS $v) {
$startt = strtotime($v['booking_starttime']);
$stopt = strtotime($v['booking_stoptime']);
if ( ( ($comp_startt >= $startt) AND ($comp_startt <= $stopt) ) OR
( ($comp_stopt >= $startt) AND ($comp_stopt <= $stopt) ) ) {
return "booked";
}
}
crisse6Medlem sedan dec. 20002 526 inlägg Okej. Det där funka ju fint med sql-satsen... Tack för det!
Okej. Ytterligare ett problem som dök upp när man satt å funderade lite...
Korrekta tider att boka på:
08.00-09.30, 10:30-12.00, 13.30-16.00
Sen har det dykt upp ett alternativ till. Men har möjligheten att välja +15 min extra på sin bokning.
Okej. Nu till problemet, vad händer om Kalle bokar 08.00-08.45 (om han har valt å lägga till de där 15 min), då kan ju inte nästa boka förän 09.00-09.30. Det innebär att det blir ledigt 15 min där mellan 08.45-09.00 som inte går att använda. Hur lösa så att det inte blir några glapp? :)
crisse6Medlem sedan dec. 20002 526 inlägg Tjo!
Efter x antal timmars meckande så fick man ju fram en lösning.. Hehe...
<?php
$boknings_langd = 31; //Antal minuter man vill boka
$arr_perioder[1]['start'] = mktime(8,0,0,$month,$day,$_GET['year']);
$arr_perioder[1]['stop'] = mktime(9,30,0,$_GET['month'],$_GET['day'],$_GET['year']);
$arr_perioder[2]['start'] = mktime(10,0,0,$_GET['month'],$_GET['day'],$_GET['year']);
$arr_perioder[2]['stop'] = mktime(11,30,0,$_GET['month'],$_GET['day'],$_GET['year']);
$arr_perioder[3]['start'] = mktime(13,0,0,$_GET['month'],$_GET['day'],$_GET['year']);
$arr_perioder[3]['stop'] = mktime(16,0,0,$_GET['month'],$_GET['day'],$_GET['year']);
$key=0;
for($j = 1; $j <= sizeof($arr_perioder); $j++) {
$period_total = round(($arr_perioder[$j]['stop'] - $arr_perioder[$j]['start'])/60);
$minuter = 0;
$radio = 0;
$test_time = $arr_perioder[$j]['start'];
for($i = 0; $i<=$period_total+2; $i++) {
$minuter++;
if($minuter == $boknings_langd ) {
echo "<input type=\"radio\" name=\"time\" value=\"" . ($test_time-(($boknings_langd-1)*60)) . "-" . ($test_time) . "\">";
$radio++;
echo "Tillgänglig " . date("H:i", $test_time-(($boknings_langd-1)*60)) . "-" . date("H:i", $test_time). "<br/>";
$minuter = 1;
}
if($arr_bokat[$key]['start'] == $test_time) {
$minuter = 0;
$test_time = $arr_bokat[$key]['stop']-60;
$bokad_total = ($arr_bokat[$key]['stop'] - $arr_bokat[$key]['start'])/60;
$i += $bokad_total;
$key++;
}
$test_time += 60;
}
}
?>