Avatar billede Slettet bruger
15. august 2005 - 13:10 Der er 13 kommentarer og
1 løsning

Checke gyldigt tidspunkt

På et reservationssystem har jeg brug for at checke om et tidspunkt allerede er optaget.
Jeg skal checke om title, date er det samme og samtidig checke om from_, from2_, till, still er gyldige.
from_ er starttime.
from2_er startminut
till er sluttime
still er slutminut
En reservation må ikke kunne foretages hvis tidspunktet allerede er optaget. D.v.s.at hvis der er reserveret "title" nr.1 fra 08.00 - 12.00, må der ikke kunne reserveres  "title" nr.1 fra 09.00 - 11.00 samme dag, men selvfølgelig gerne "title" nr.2

Lidt af min kode:

@mysql_query("INSERT INTO events (title,date,from_,from2_,till,still,who,description,add_desc,active,user_id)
VALUES ('$_GET[title]','$date','$_GET[from_]','$_GET[from2_]','$_GET[till]','$_GET[still]','$_GET[who]','$_GET[description]','$_GET[add_desc]','$active','".$userdata['user_id']."')") or die("Der er sket en fejl. Fejl: ".mysql_error());
Avatar billede Slettet bruger
15. august 2005 - 13:13 #1
Jeg glemte også lige, at hvis tidspunktet er optaget skal der skrives en meddelelse "Du kan ikke....o.s.v" og hvis der reserveres "Du har ...o.s.v."
Avatar billede jakobdo Ekspert
15. august 2005 - 19:11 #2
Er der en grund til du ikke gemmer start og slut som datetime?
Avatar billede jakobdo Ekspert
15. august 2005 - 19:44 #3
$sql = "
    SELECT
        *
    FROM
        events
    WHERE
        (start > '".$start."' AND slut < '".$slut."')
    OR
        (start > '".$start."' AND                                                 start < '".$slut."' AND slut > '".$slut."')
    OR
        (start < '".$start."' AND slut > '".$start."' AND start < '".$slut."' AND slut > '".$slut."')
    OR
        (start < '".$start."' AND slut > '".$start."' AND slut < '".$slut."')
    ";
Avatar billede jakobdo Ekspert
15. august 2005 - 19:44 #4
Håber den forklare sig selv, kunne nemlig ikke forklare den med ord!
Avatar billede Slettet bruger
15. august 2005 - 21:43 #5
ja, der er en grund til at jeg ikke gemmer start og slut som datetime - nemlig manglende evner i denne diciplin :)
Det lyder til at være en god ide, men hvordan gøres det? Jeg har allerede en form hvor der vælges dato og start/sluttid (jeg ved godt at det er noget møjkode jeg har opbygget).
Hvor sætter jeg forøvrigt din kode ind i forhold til min egen mysql_query

Jeg vedlægger lige hele scriptet hvis det gør det nemmere

<?php
require_once "maincore.php";
require_once "subheader.php";
require_once "side_left.php";
include_once("modules/events2/main.php");

?>
<script language='javascript'>

function velgDato( ) {
  var hojde = 385;          // indsæt højde og bredde her
  var bredde= 490;
  if (navigator.appName!="Netscape") {
    var pos = ",left="+250+",top="+200
  } else {
    var pos = ",screenX="+50+",screenY="+50
  };
  window.open("exp68692pop.html","b"
            ,"location=0,menubar=0,toolbar=0"+pos
            +",resizable=1,scrollbars=0,height="+hojde+",width="+bredde);

}; //end velgDato( )

function brugDato ( dd ) {
  var dag = "_0"+dd.getDate()+"-";
  var mnd = "_0"+(1+dd.getMonth())+"-";
  var dato = dag.substring(dag.length-3)
          + mnd.substring(mnd.length-3)
          + dd.getFullYear();
  document.din_form.date.value = dato;
}; //end brugDato ( Date objekt )

</script>
<?php
$userid="userid";
$year = date("Y");
$month = date("m");
$dato=date(d)."-".$month."-".$year;
$active = "Y";
$dag = substr($_GET[date],0,2);
$måned = substr($_GET[date],3,2);
$år = substr($_GET[date],6,10);
$date = $år."-".$måned."-".$dag;

if(isset($_GET[title]))
    @mysql_query("INSERT INTO fusion_events (title,date,from_,from2_,till,still,who,description,add_desc,active,user_id)
VALUES ('$_GET[title]','$date','$_GET[from_]','$_GET[from2_]','$_GET[till]','$_GET[still]','$_GET[who]','$_GET[description]','$_GET[add_desc]','$active','".$userdata['user_id']."')") or die("Der er sket en fejl. Fejl: ".mysql_error());
     
{
opentable("Busreservation");
echo "<b><font color=red>Du har reserveret en bus. <a href='".BASEDIR."events.php'>Se din reservation i oversigten.</a></b></font>";
closetable();
}
opentable("Reserver en bus");
?>
<form name="din_form" method="get" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<table cellpadding=2 cellspacing=10 align=center border=0>
  <TR><TD><b>Bus:</b></TD><TD>
      <select size="1" name="title">
   
    <option value="Valg1">Valg1</option>
    <option value="Valg2">Valg2</option>
  </select></TD>
<TD><b>Dato:</b></TD><TD>
  <input name="date" style= width:"120" type='text'  value= "<?=$dato?>">
<input type='button' value='Vælg dato' onclick="velgDato()">
</TR></TD>
<TR><TD><b>Fra:<br></b></TD><TD>
    <select size="1" name="from_">
    <option value="01">01</option>
    <option value="02">02</option>
    <option value="03">03</option>
    <option value="04">04</option>
    <option value="05">05</option>
    <option value="06">06</option>
    <option value="07">07</option>
    <option value="08">08</option>
    <option value="09" selected>09</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="15">15</option>
    <option value="16">16</option>
    <option value="17">17</option>
    <option value="18">18</option>
    <option value="19">19</option>
    <option value="20">20</option>
    <option value="21">21</option>
    <option value="22">22</option>
    <option value="23">23</option>
    <option value="24">24</option>
    </select>
    <select size="1" name="from2_">
    <option value="00" selected>00</option>
    <option value="15">15</option>
    <option value="30">30</option>
    <option value="45">45</option>
    </select>
    <TD><b>Navn:</b></TD><TD>
    <input type="text" name="who" style= width:"120"><br>
    </TR></TD>

    <TR><TD><b>Til:</b></TD><TD>
    <select size="1" name="till">
    <option value="01">01</option>
    <option value="02">02</option>
    <option value="03">03</option>
    <option value="04">04</option>
    <option value="05">05</option>
    <option value="06">06</option>
    <option value="07">07</option>
    <option value="08">08</option>
    <option value="09">09</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12" selected>12</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="15">15</option>
    <option value="16">16</option>
    <option value="17">17</option>
    <option value="18">18</option>
    <option value="19">19</option>
    <option value="20">20</option>
    <option value="21">21</option>
    <option value="22">22</option>
    <option value="23">23</option>
    <option value="24">24</option>
    </select>

    <select size="1" name="still">
    <option value="00" selected>00</option>
    <option value="15">15</option>
    <option value="30">30</option>
    <option value="45">45</option>
    </select>
    </TR></TD>

    <TD><b>Afdeling:</b></TD><TD>
    <select size="1" name="description">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    </select><br>
    </TR></TD>
    <TR><TD valign="top"><b>Formål:</b></TD><TD>
    <textarea  name="add_desc" rows="4" style= width:"120"></textarea><br>
    <br></TD>
    <TD></TD>
    <TD align="right"><input type="submit" name="send" value="Reservere"></TR> </TD>
    </form></table>

<?php
closetable();
opentable("Denne måneds reservationer");
events_draw_list();
closetable();
require_once "side_right.php";
require_once "footer.php";
?>
Avatar billede jakobdo Ekspert
15. august 2005 - 21:52 #6
Nu skal jeg forsøge at forklare hvad min kode gør!
Vi siger vi har en event i tabellen, med:
starttid = 2005-08-15 09:00:00
sluttid = 2005-08-15 12:00:00
Så skal vi jo tjekke følgende:
Er der en event som "æder" hele den event vi har i DB, f.eks.
starttid1 = 2005-08-15 08:00:00
sluttid1 = 2005-08-15 13:00:00
Er der en event som overskrider starten, men ikke slutningen:
starttid2 = 2005-08-15 08:00:00
sluttid2 = 2005-08-15 11:00:00
Er der en event som overskrider slutningen, men ikke starten:
starttid3 = 2005-08-15 10:00:00
sluttid3 = 2005-08-15 13:00:00
Eller er der en event som ligger inde i vores DB-event
starttid3 = 2005-08-15 10:00:00
sluttid3 = 2005-08-15 11:00:00

Og hvor du skal sætte selve sql-en ind, vil jeg mene er inden du foretager dig INSERT INTO.
Dog har jeg i min sql brugt datetime, du skal rette det så det passer til din opsætning.
Avatar billede Slettet bruger
15. august 2005 - 22:15 #7
Lægger du et svar, så må jeg prøve at rode med det. Kan ikke umiddelbart se mig ud af at kode den ind, men må prøve.
Avatar billede jakobdo Ekspert
15. august 2005 - 22:31 #8
Svar...
Og vil gerne hjælpe!
(synes dog du skal overveje datetime som type at gemme start og slut-tidspunkt i din DB.)
Men kig lidt på det først...
Avatar billede Slettet bruger
15. august 2005 - 22:48 #9
Mit problem lige nu er at jeg har feltet
from_ = starttime
from2 = startminut
till  = sluttime
still = slutminut
Og så har jeg en hel masse data der allerede er indtastet i db.
Jeg vil nødig sidde og manuelt og lave al data om( kræver flere hundrede operationer).
jeg havde tænkt på om ikke det var muligt at lægge from_ og from2 sammen og ligeledes till og still så jeg får $start og $slut
Avatar billede Slettet bruger
15. august 2005 - 22:50 #10
Jeg kigger på det og vender tilbage imorgen - giver gerne flere point for en løsning der holder.
Avatar billede jakobdo Ekspert
16. august 2005 - 08:46 #11
Takker for point!
Du må også gemme noget dato eller noget i din DB?
Du kan vel ikke nøjes med time og minut?
Avatar billede Slettet bruger
16. august 2005 - 09:27 #12
Nej, det er rigtigt. Jeg bruger en javascript-popupboks (som vist i koden), hvor jeg kan vælge en dato der gemmes i feltet "date" med datatype date i formatet 2005-08-16.
Så er din tanke vel, at mine selectbokse med timer og minutter skal gemmes i db sammen med date som datetime ? Men hvordan gøres det ?
Avatar billede jakobdo Ekspert
16. august 2005 - 10:03 #13
Du kunne jo sætte date sammen, så det hele bliver til:
date: 2005-08-16
tid:  10:00
og så lave vi en datetime:
date + tid + :00 = 2005-08-16 10:00:00
Avatar billede Slettet bruger
16. august 2005 - 11:41 #14
Jeg må indrømme at jeg er noget på bar bund i det her. Forstår ikke hvordan jeg lige får kodet det. Jeg kan godt se principperne i det, men hvordan det kodes og gemmes i db ved jeg ikke
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