Werk Rooster script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3

- Ariën  -
Beheerder

- Ariën -

26/11/2014 20:25:25
Quote Anchor link
Dan zou ik meer van de structuur moeten weten, maar goed... gezien het om dagen gaat zal er tot in de verre toekomst geen WorkTime8 bij komen.

Zoals Frank zegt, laten we de lat maar even wat lager leggen, gezien het om een schoolopdracht gaat.
 
PHP hulp

PHP hulp

27/11/2024 19:16:41
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/11/2014 21:04:22
Quote Anchor link
Om je vraag te beantwoorden:

je zou gewoon een tabel diensten kunnen maken waarin je per record 1 dienst voor 1 medewerker opslaat
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
diensten
========================================================
id | user_id | beginnen            | eindigen
========================================================
1  | 1       | 2014-12-01 06:00:00 | 2014-12-01 14:00:00
2  | 1       | 2014-12-02 06:00:00 | 2014-12-02 14:00:00
3  | 2       | 2014-12-01 14:00:00 | 2014-12-01 20:00:00
4  | 2       | 2014-12-02 14:00:00 | 2014-12-02 20:00:00

Maar voor nu zou ik dat nog maar even vergeten.
(Wanneer moet je opdracht ingeleverd worden)
 
Sander Haug

Sander Haug

26/11/2014 21:14:00
Quote Anchor link
16 december zou ik het in moeten leveren.
Ik ben verantwoordelijk voor het PHP gedeelte en de rest is verantwoordelijk voor het HTML gedeelte.
We doen het met zn 3'en.

Maar wat ik nu wel apart vindt, is dat als ik op Submit druk, dan komen er in de tabellen géén tijden te staan. Ik moet serieus dan in het textfield zetten:

26/11/11-06:00:00

Dus je suggestie Frank vindt ik wel een erg goede. Dan moet ik alleen de tabel even ombouwen.
Alleen hoe moet ik dat dan aanpakken query gewijs?
Gewijzigd op 26/11/2014 21:21:10 door Sander Haug
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/11/2014 21:35:56
Quote Anchor link
Een INSERT query gaat altijd met één tabel en één record tegelijk. daar veranderd dus weinig aan.

Stel dat je voor de tabel diensten nu alle records wilt hebben van een werknemer met user_id 2, maar je wilt ook de naam van deze werknemer laten zien dan kun je dat oplossen met twee SELECT queries:

1:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT name FROM users WHERE user_id=2

2:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT beginnen, eindigen FROM diensten WHERE user_id=2


Dit is echter ook beter en sneller op te lossen met één query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT
    users.name, diensten.beginnen, diensten.eindigen
FROM
    diensten
JOIN
    users
ON
    diensten.user_id = users.user_id
WHERE
    diensten.user_id=2
Gewijzigd op 26/11/2014 21:37:27 door Frank Nietbelangrijk
 
Sander Haug

Sander Haug

26/11/2014 21:54:20
Quote Anchor link
Duidelijk. Dat snap ik nu.
Maar hoe voer ik dan de data in met tijden van beginnen/eindigen met het door u geschreven script?..
 
Frank Nietbelangrijk

Frank Nietbelangrijk

27/11/2014 00:51:19
Quote Anchor link
Tabel 'diensten' maken met de kolommen:
-id (integer, auto increment, primary index)
-user_id (integer, index)
-beginnen (datetime)
-eindigen (datetime)

dan is dit het script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?php

session_start();

mysql_connect('localhost', 'frank', 'pass');
mysql_select_db('test');

if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    // laat ons even zien wat er de $_POST array zit!
    echo '<pre>';
    print_r($_POST);
    echo '</pre>';

    /*
     * Loop door alle elementen van de array $_POST['werktijd'] waarbij de array-key het userId is
     * en de array-waarde ook weer een array is van 7 weekdagen (index 0 t/m 6).
     */

    foreach ($_POST['werktijd'] as $userId => $dagen)
    {

        /*
         * Loop door de 7 weekdagen. Iedere weekdag is wederom een array met drie elementen:
         * - datum
         * - beginnen
         * - eindigen
         */

        foreach ($dagen as $dag)
        {

            /*
             * Voordat we een dienst in de database willen opslaan moeten $dag['beginnen']
             * en $dag['eindigen'] wel een waarde hebben. Met andere woorden als één van
             * de twee leeg is dan slaan we de dienst niet op in de database.
             */

            if(strlen($dag['beginnen']) && strlen($dag['eindigen']))
            {

                // maak van de tijden een volledige mysql-datetime formaat (YY-mm-dd HH:ii:ss)
                $beginnen = $dag['datum'] . ' ' . $dag['beginnen'] . ':00';
                $eindigen = $dag['datum'] . ' ' . $dag['eindigen'] . ':00';
                
                // INSERT query opbouwen
                $sql = "INSERT INTO diensten (user_id, beginnen, eindigen)
                VALUES ('"
.$userId."','".$beginnen."','".$eindigen."')";
                echo $sql . '<br>';

                if(mysql_query($sql) === FALSE)
                    echo 'Kon data niet opslaan in de database<br>';
            }
        }
    }
}

    

$tableHeaders = array('<th>naam</th>');
$tableHeaders2 = array('<th></th>');
for($i = 0 ; $i < 7 ; $i++)
{

    $tableHeaders[] = '<th colspan="2">'.date("d/m/Y", time()+($i*86400)).'</th>';
    $tableHeaders2[] = '<th>beginnen</th><th>eindigen</th>';
}


$resultaat = mysql_query("SELECT id,Username FROM users");
?>

<!DOCTYPE html>
<html>
    <head>
        <title>Roster</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <h1>Filiaalmanagers pagina</h1>
        <p>Welkom <b><?php echo $_SESSION['Username'];?></b>.</p>

        <form action = "" method="post" >
            <table>
                <tr>
                    <?php foreach($tableHeaders as $header) echo $header; ?>
                </tr>
                <tr>
                    <?php foreach($tableHeaders2 as $header) echo $header; ?>
                </tr>
                <?php while ($row = mysql_fetch_assoc($resultaat)) { ?>
                    <tr>
                        <td><?php echo $row['Username']; ?></td>
                         <?php for($i = 0 ; $i < 7 ; $i++) { ?>
                              <input type="hidden" name="<?php echo 'werktijd['.$row['id'].']['.$i.'][datum]'; ?>" value="<?php echo date("Y-m-d", time()+($i*86400)); ?>">
                            <td><input type="time" name="<?php echo 'werktijd['.$row['id'].']['.$i.'][beginnen]'; ?>"></td>
                            <td><input type="time" name="<?php echo 'werktijd['.$row['id'].']['.$i.'][eindigen]'; ?>"></td>
                        <?php } ?>
                    </tr>
                <?php } ?>
            </table>

            <input type="submit" value="Verstuur naar database">

        </form>

        <li><a href = "index.php">Index</a></li>
        <li><a href = "logout.php">Log uit</a></li>
    </body>
</html>


Afbeelding
Gewijzigd op 27/11/2014 01:54:02 door Frank Nietbelangrijk
 
Sander Haug

Sander Haug

27/11/2014 10:02:00
Quote Anchor link
Jaaa het draaaaaait! Super bedankt Frank.
Ik was hier nooit zelf op gekomen. Super bedankt voor de duw in de goede richting!

Ik neem aan dat ik de data uit de tabel diensten trek met de query uit je vorige post?
Dan moet het helemaal goed komen!

In een woord SUPER!

Toevoeging op 27/11/2014 13:12:07:

Ik ondervind nu wat problemen met het uitlezen van de data en deze te outputten in een tabel.
Want als we bijvoorbeeld alle werktijden willen hebben voor werknemer ID 2, hoe doen we dat dan in een tabel met de kolommen:

Naam datum beginnen eindigen ?

De naam kan ik uitlezen. Alleen dan de andere 3 kolommen?..
 
Frank Nietbelangrijk

Frank Nietbelangrijk

27/11/2014 16:25:04
Quote Anchor link
Hoi Sander,

Ik doe dat zelf altijd met de DateTime class van PHP:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
// we hebben twee datetime kolommen in de tabel diensten:
$beginnen = new DateTime( $row['beginnen'] );
$eindigen = new DateTime( $row['eindigen'] );

// begin datum:
echo $beginnen->format('d-m-Y');

// begin tijd:
echo $beginnen->format('H:i');

// eind datum:
echo $eindigen->format('d-m-Y');

// eind tijd:
echo $eindigen->format('H:i');
?>


P.S. We kunnen de tabel diensten nog aanpassen en in plaats van twee datetime kolommen twee time kolommen en één date kolom maken als je dat prettiger vindt. Dat is een minimale aanpassing.
Gewijzigd op 27/11/2014 16:29:01 door Frank Nietbelangrijk
 

Pagina: « vorige 1 2 3



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.