Avatar billede elskermad.dk Nybegynder
29. december 2003 - 01:49 Der er 20 kommentarer og
1 løsning

finde ud af om et tidspunkt er imellem et tidspunkt (sikker nem)

Hej Eksperter :)

Jeg har et rimeligt stort problem jeg slet ikk kan gennemskue... ret sikkert fordi kl er 1:46 om natten og jeg burde gå i seng, men kan alligevel ikke få ordenlig nattesøvn inden jeg er færdig...

Jeg har en plan hvor der er nogen aktiviteter på. De er skrevet med fra og til med php's time() function.

et eksempel kunne være opvask: fra: 12432534523 til: 432432523532

nu skal jeg så kunne sætte noget mere på, men det skal jo selvfølgelig ikke kunne lade sig gøre at lave noget imens jeg er ved det andet så hvordan skal jeg sætte en if sætning op?

variablerne til brug er:
$fra
$til
den nye ting jeg gerne vil oprette

$gammel_fra
$gammel_til
den ting jeg har i forvejen


det jeg har nu (som ikk virker) ser således ud:
if ($fra > $gammel_fra && $fra < $gammel_til && $til < $gammel_til && $til > $gammel_fra) {

håber der er nogen der kan hjælpe - på forhånd tak!
Avatar billede bearhugx Nybegynder
29. december 2003 - 02:00 #1
den må du lige forklare igen...

handler det om at du vil undersøge om tidspunkt X ligger mellem tidspunkt A og tidspunkt B ??

for så kan du sige
if( ($x>$a) && ($x<$b) ) {
}
Avatar billede elskermad.dk Nybegynder
29. december 2003 - 02:04 #2
ja, det handler om om tidspunktet x (fra $fra til $til) ligger mellem $gammel_fra og $gammel_til

det er lidt svært at forklare

det er en kalender. Der skal det jo ikke være muligt at booke en tid 2 gange, og det skal jo heller ikk være muligt at hvis man fx har en tid fra kl 14:45 til 15:40 så skal man jo ikk bagefter kunne bestille 12:40 til 19:20 eller tiden: 14:55 til 15:10 hvis det bedre er til at forstå nu?
Avatar billede bearhugx Nybegynder
29. december 2003 - 02:09 #3
ahh .. det vil sige ikke et tidspunkt - men en periode ligger indenfor en anden given periode...

lige to sek, så burde jeg have en kode klar
Avatar billede elskermad.dk Nybegynder
29. december 2003 - 02:09 #4
ja en periode... self, mig der er lige forstår at udtrykke mig godt !! godt du selv kan finde ud af det.. hehe
Avatar billede bearhugx Nybegynder
29. december 2003 - 02:12 #5
if(($gammel_fra<$fra) && ($til<$gammel_til) && ($fra<$til)) {
}

burde virke... men er ikke aftestet ... har ikke php her :-/
Avatar billede bearhugx Nybegynder
29. december 2003 - 02:17 #6
den givne kode skulle være i stand til at bedømme om perioden x_fra --> x_til ligger indenfor perioden gl_fra --> gl_til

om det så er nok til at løse den problemstilling, du nævner 02:04:25 ved jeg så ikke helt...
Avatar billede elskermad.dk Nybegynder
29. december 2003 - 02:20 #7
ehmn nej den fungere stadig ikke... :(

vil du se noget kode?

du kan se at det ikke virker her: http://myserver.lir.dk/site/bruger/login.php&mode=demo

du kan tilføje ved at klikke på tidspunktet osv...
Avatar billede elskermad.dk Nybegynder
29. december 2003 - 02:21 #8
Avatar billede bearhugx Nybegynder
29. december 2003 - 02:27 #9
yeps... har kigget det igennem --- men hold da op, hvor går det langsomt - efter login tog den næsten et minut inden skærmbilledet var opbygget!
Avatar billede elskermad.dk Nybegynder
29. december 2003 - 02:30 #10
det er fordi den kører lokalt på min comp og har kun 128/64, det må du undskylde, men håber du kan se man kan oprette forkerte perioder?
Avatar billede bearhugx Nybegynder
29. december 2003 - 02:30 #11
problemet er at du ikke, kun bevæbnet med gl_fra, gl_til, fra og til, kan bedømme om en given aftale/reservation er mulig.... Du bliver nød til at arbejde med en array af alle aftaler for en given dag...

Jeg har noget Javakode (eller er det SQL...??!) fra mit Datamatiker hovedprojekt) - lad mig lige se om jeg kan finde det
Avatar billede bearhugx Nybegynder
29. december 2003 - 02:30 #12
ja - det fik jeg så fundet ud af til sidst...
Avatar billede elskermad.dk Nybegynder
29. december 2003 - 02:37 #13
jeg har en php kode der skal finde ud af det som ser sådan her ud:

function fribooking($fra,$til,$dato,$maned,$ar,$bruger) { //bruger kommer fra en session
    $status = "fri";
   
    $foresp = mysql_query("SELECT * FROM webcal_note WHERE bruger = '$bruger' AND dato = '$dato' && maned = '$maned' && ar = '$ar'") or die(mysql_error());
    while($row = mysql_fetch_array($foresp)) {
    $gammel_fra = $row["tidspunkt_fra"];
    $gammel_til = $row["tidspunkt_til"];
   
        if ($status == "fri") {
            if (($gammel_fra<$fra) && ($til<$gammel_til)) {
                $status = "booked";
            }
            else {
                $status = "fri";
            }
        }
    }
   
    if ($status == "booked") {
        return false;
    }
    elseif ($status == "fri") {
        return true;
    }
}

som jeg kalder i den iframe som opretter aktiviteten hvis den er godkendt:

<html>
<head>
<script language='javascript' type='text/javascript'>
function status() {
   
<?
//opret aktivitet
if ($_POST[opret_opgave] != "") {   
    $fra = tiltime($_POST[opret_fra_dato],$_POST[opret_fra_maned],$_POST[opret_fra_ar],$_POST[opret_fra_time],$_POST[opret_fra_min]);
    $til = tiltime($_POST[opret_fra_dato],$_POST[opret_fra_maned],$_POST[opret_fra_ar],$_POST[opret_til_time],$_POST[opret_til_min]);
   
    if (fribooking($fra,$til,$_POST[opret_fra_dato],$_POST[opret_fra_maned],$_POST[opret_fra_ar],$_POST[opret_bruger])==true) {
        mysql_query("insert into webcal_note (bruger,dato,maned,ar,hour,min,status,besked,tilfojer,tidspunkt_til,tidspunkt_fra,oprettet) values ('$_POST[opret_bruger]','$_POST[opret_fra_dato]','$_POST[opret_fra_maned]','$_POST[opret_fra_ar]','$_POST[opret_fra_time]','$_POST[opret_fra_min]','afventer','$_POST[opret_opgave]','$_SESSION[loginnick]','$til','$fra','$phptime')") or die(mysql_error());
        echo"
            alert('Aktiviteten blev oprettet med succes!');
            return false;
        ";
    }
    else {
        echo"
            alert('Tidspunktet er allerede booket!');
            return false;
        ";
    }
}

?>

}
</script>
</head>
<body onLoad='status()'>
</body>
</html>

functionen tiltime:
function tiltime($dag,$maned,$ar,$time,$min) {
    $time = mktime($time,$min,0,$maned,$dato,$ar);
   
    return $time;
}

og jeg mener det burde kunne lade sig gøre på den måde!

kan du gennemskue hvorfor den ikke vil? jeg kan godt sætte nogle flere points ind!
Avatar billede bearhugx Nybegynder
29. december 2003 - 02:37 #14
hvad jeg har er en SQL forspørgsel, som kan bedømme om der er andre aftaler i et givent tidsrum - hvis der ikke returneres et tom søgesæt betyder dette, at der forefindes aftaler i det givne tidsrum, og at den ønskede aftale derfor ikke kan oprettes....


er du interesseret i den kode ? (jeg skal hente den ud fra et worddokument, så jeg skal vide, inden jeg går igang, om du er intersseret - dette betinger så at dine aftaler ligger i en database og at det bliver et SQL kald som afgør, om det er muligt eller ej...)
Avatar billede bearhugx Nybegynder
29. december 2003 - 02:40 #15
prøv at lave det således at $fri som ugangspunkt bliver sat lig true og at den derefter _KUN_ kan sættes false - ellers kan man komme i en situation, hvor $fri _er sat_ til false, men derefter bliver overskrevet med en true - og det går jo ikke....
Avatar billede elskermad.dk Nybegynder
29. december 2003 - 02:44 #16
jeg vil gerne prøve at se dit, men efter hvad jeg forstår skulle det virke lidt som mit?

også derfor jeg har lavet den if på om $status er sat til booked da den så ikk skal kunne sættes til fri igen...

men ser min kode ikke ok ud efter ideen? der må så bar være noget functions fejl i den :(
Avatar billede bearhugx Nybegynder
29. december 2003 - 02:51 #17
der er to fundementale fejl i den kode, som du har vist @02:37:37

1) $status kan godt sættes til "fri", selvom den, ved en tidligere aftale, er sat til "booked" - det må det ikke... hvis den først er sat til "booked" så burde der returneres en false, med det samme

2) din kode forudsætter kun at en ønsket ny aftale ligger inden i en periode, som allerede er markeret som en aftale - den tager f.eks. ikke hensyn til, hvis den nye ønsket aftale delvis eller helt overlapper en anden aftale - eller overlapper flere aftaler...

har du en mail / MSN messenger, som jeg kan sende et word-dok til - der er en figur med i det word-dokument, som nok vil give noget lys på sagen - som desværre ikke er til at gengive i dette tekstbaserede forum...
Avatar billede elskermad.dk Nybegynder
29. december 2003 - 02:53 #18
msn:jeg@elskermad.dk

dvs at der skal størrere functioner til for at få det til at virker?
Avatar billede bearhugx Nybegynder
29. december 2003 - 03:31 #19
efter noget samtale over messenger gives her løsningen

function bookingMulig( $fra, $til, $dato, $maned, $ar, $bruger ) {
    $sql = ""+
        "SELECT * "+
        "FROM webcal_note "+
        "WHERE "+
        "( "+
        "    ( bruger='$bruger' ) AND "+
        "    ( dato='$dato' ) AND "+
        "    ( maned='$maned' ) AND "+
        "    ( ar='$ar' ) AND "+
        "    ( "+
        "        (( tidspunkt_fra < '$fra' ) AND ( tidspunkt_til > '$fra' )) OR "+
        "        (( tidspunkt_fra < '$til' ) AND ( tidspunkt_til > '$til' )) OR "+
        "        (( tidspunkt_fra < '$fra' ) AND ( tidspunkt_til > '$til' )) OR "+
        "        (( tidspunkt_fra > '$fra' ) AND ( tidspunkt_til < '$til' )) OR "+
        "        (( tidspunkt_fra = '$fra' ) AND ( tidspunkt_til = '$til' )) "+
        "    )"+
        ")";

    $result = mysql_query($sql)
        or die(mysql_error());

    // test om der er nogle aftaler, som konflikter med den ønskede aftale....
    if(mysql_num_rows($result) > 0)
        return false; /* der er fundet aftaler */

    return true;
}
Avatar billede bearhugx Nybegynder
29. december 2003 - 03:33 #20
hov...

+ kan i PHP ikke bruges som streng-konkatenator - derfor skal "+" tegnene i sql-strengen byttes ud med "."

dvs
  $sql = "".
        "SELECT * ".
        "FROM webcal_note ".

osv.......
Avatar billede elskermad.dk Nybegynder
29. december 2003 - 03:35 #21
jeg siger rigtig mange tak :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester