15. august 2005 - 13:10Der 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());
$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."') ";
Håber den forklare sig selv, kunne nemlig ikke forklare den med ord!
Synes godt om
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
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 )
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">
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.
Synes godt om
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.
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...
Synes godt om
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
Synes godt om
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.
Takker for point! Du må også gemme noget dato eller noget i din DB? Du kan vel ikke nøjes med time og minut?
Synes godt om
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 ?
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
Synes godt om
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
Synes godt om
Ny brugerNybegynder
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.