Avatar billede blach Nybegynder
08. juni 2002 - 12:28 Der er 13 kommentarer og
1 løsning

Bookingsystem

Først og fremmest: Jeg arbejder med PHP og MySQL.
Jeg vil gerne lave et bookingsystem, og som jeg lige kan se det, er det nemmeste, at lave en tabel med dage. F.eks. indeholdende alle dagene i 2002. Dagene skal så indeholde informationer om hvilken uge det er i...

Men kan man på en eller anden måde autogenerere sådan en tabel med dage i? Så den eks. automatisk laver for 1 år frem? Og også skriver for hver dag hvilken uge det er?

Hvis det kan laves, kan man jo klikke på en uge (nr.) og dernæst en ugedag og se hvilket der er ledigt...
Avatar billede limemedia Nybegynder
08. juni 2002 - 12:39 #1
Hvis du kigger her
http://www.php.net/manual/en/function.date.php

under parameteren t kan du se
t - number of days in the given month; i.e. "28" to "31"

Så har du antal dage i en given måned.

med parameteren D får du
D - day of the week, textual, 3 letters; e.g. "Fri"

den kan du evt slå op for helholdsvist 1. jan, 1. feb, 1. mar osv.

Så er det blot at lave en
for ($i=1;$i<$monthdays[1]);$i++) {

så er den hjemme


drop at lave 365gange mktime, det knækker performancen på din side

/ LJ
Avatar billede blach Nybegynder
08. juni 2002 - 13:38 #2
Hmm.. Du vil ikke prøve at give et kode eksempel?
Jeg kan godt se, at det er muligt at finde dage i given måneder osv, men hvordan omsætter jeg dette og putter hver eneste dag i en database? Som tilmed husker uge-nummeret?
Avatar billede limemedia Nybegynder
08. juni 2002 - 13:40 #3
hvorfor dog hver eneste dag i en database, kun dem med bookings er vel interessante der.

Jeg slår et eksempel sammen på at generere en kalender ting
Avatar billede blach Nybegynder
08. juni 2002 - 14:04 #4
okay, bare et lille eksempel som jeg selv kan bygge videre på - det ville være rigtig godt!

Hvis dagen ikke automatisk er i tabellen skal det jo være sådan at den kommer det efter en har booket noget...
Avatar billede limemedia Nybegynder
08. juni 2002 - 14:32 #5
Det her viser et kalenderår med måneder, datoer, ugenumre og dagnavn. Det multidimensionelle array $ASSIGNMENT fylder du fra din database med aftaler (jeg har kun lavet tre aftaler i hånden).

Formular til at gemme i databasen er triviel, en dato og gem. Selecten er triviel, nu har du outputformatet.

Okay, måske skal du gøre noget ud af layoutet :))

Håber du kan bruge det til noget.

----------

<?php
    # Pre-value
    $year = 2002;
    $DAYNAME = array("Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag");
    $MONTHNAME = array("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December");

   
    # Assignment is multiarray, easy to fetch from db, build year, month, day as threedimensional
    $ASSIGNMENT[2002][6][10][] = "Lars, du skal ud og rejse";
    $ASSIGNMENT[2002][6][10][] = "Husk at pakke *g*";
    $ASSIGNMENT[2002][11][5][] = "Wow, endnu et år ældre";

       
    # Functions
    function date_info($info, $month, $year) {
        return date($info, mktime(0,0,0,$month,1,$year));
    }
   
   
    # Init months array with days and first day of month
    $MONTHS = array();
    for ($i=1;$i<=12;$i++) {
        # Initialize days in month
        $MONTHS[$i]["days"] = date_info("t", $i, $year);
        $MONTHS[$i]["firstday"] = date_info("w", $i, $year);
        $MONTHS[$i]["weekno"] = date_info("W", $i, $year);
        if ($MONTHS[$i]["firstday"] == 0) $MONTHS[$i]["firstday"] == 7;
        $MONTHS[$i]["firstday"]--;
    }

# DEBUG   
#    echo "<pre>";
#    print_r($MONTHS);   
#    echo "</pre>";



    # Show calendar
    for ($i=1;$i<=12;$i++) {  # One loop for every month, every month in seperate table
        # Set weeknumber
        $week = $MONTHS[$i]["weekno"];
?>
<table width="350" border="1" cellspacing="2" cellpadding="2" align="center">
<tr>
<td colspan="2"><b><?php echo $MONTHNAME[$i-1]; ?></b></td>
</tr>

<?php
        # Loop through each day in month
        for ($j=1;$j<=$MONTHS[$i]["days"];$j++) {
            # Fix week number
            if (($MONTHS[$i]["firstday"]+$j)%7 == 0) $week++;
       
            # check for assignment to show
            $assignment = "&nbsp;";
            if (isset($ASSIGNMENT[$year][$i][$j])) $assignment = implode("\n", $ASSIGNMENT[$year][$i][$j]);
?>
<tr>
<td width="100"><?php echo $j; ?>. <small>[ <?php echo $DAYNAME[(($MONTHS[$i]["firstday"]+$j)%7)]; ?> ]</small><br><small>[ uge : <?php echo $week; ?>]</small></td>
<td><?php echo nl2br($assignment); ?></td>
</tr>
<?php
        }
?>
</table>

<?php
    }
?>
Avatar billede blach Nybegynder
12. juni 2002 - 19:42 #6
oKay, ser meget godt ud!
Men jeg forstår ikke den måde den udskriver nummer på uger på... Den skriver:
8. [ Onsdag ][ uge : X]


Og som du selv skriver laver man vel bare en database og putter informationerne ind i nedenstående med select, ik?
$ASSIGNMENT[_data_][_data_][_data_][] = "_data_";
Avatar billede limemedia Nybegynder
16. juni 2002 - 15:27 #7
først, sorry, jeg har ikke set din kommentar - jeg er på ferie :))

Vedr. ugenumre, prøv at fjerne # fra min DEBUG information. For hver uge beregner jeg ugenummeret for en dato. I PHP's date kommando findes parametren W der udfra en given dato returnerer ugenummeret.

Selve "bookingerne" angives som mit eksempel
$ASSIGNMENT[2002][11][5][] = "Wow, endnu et år ældre";

[2002] = år
[11] = måned
[5] = dato
[] = ny post ([] vil skabe en ny post i et array - der kan være flere aftaler på én dato)

altså
$ASSIGNMENT[år][måned][dag][] = "aftale";
Avatar billede blach Nybegynder
16. juni 2002 - 22:29 #8
Skulle også lige til at skrive en mail...

Fjerne # fra dette?
# DEBUG
#    echo "<pre>";
#    print_r($MONTHS);
#    echo "</pre>";



cool nok med det andet, så laver jeg bare nogle tabeller i Mysql der passer til det du skrev:
[2002] = år
[11] = måned
[5] = dato
[] = ny post ([] vil skabe en ny post i et array - der kan være flere aftaler på én dato)
Avatar billede blach Nybegynder
16. juni 2002 - 22:33 #9
Altså hvis jeg fjerner det kommer der bare sådan en masse:
Array
(
    [1] => Array
        (
            [days] => 31
            [firstday] => 1
            [weekno] => W
        )


Kan jeg ikke få den til at printe uge-nummeret ved datoerne?
Avatar billede limemedia Nybegynder
17. juni 2002 - 15:36 #10
Skriver den
[weekno] => W
???

Hvilken PHP version bruger du ? Jeg har kun testet med PHP4.2.1 men mener ikke det er så nyt at det ikke skulle virke i de senere versioner

/ LJ
Avatar billede blach Nybegynder
17. juni 2002 - 15:51 #11
Prøv at se koden her:
http://212.10.51.70/projekt/kalender.php

Her har jeg fjernet # så der står
# DEBUG
    echo "<pre>";
    print_r($MONTHS);
    echo "</pre>";
Avatar billede blach Nybegynder
17. juni 2002 - 15:52 #12
PHP Version 4.0.4pl1 er min version vist!
Avatar billede blach Nybegynder
22. august 2002 - 17:06 #13
Jaaa, LJWeb har bixet et system sammen til mig og jeg siger mange tak for hjælpen!
Avatar billede blach Nybegynder
25. september 2002 - 21:14 #14
Hey, ljweb.. jeg har et problem med scriptet du lavede! Har prøvet at sende dig en mail, men har ikke hørt fra dig... Har du fået ny mail-adresse?
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