Werk Rooster script
Zoals Frank zegt, laten we de lat maar even wat lager leggen, gezien het om een schoolopdracht gaat.
je zou gewoon een tabel diensten kunnen maken waarin je per record 1 dienst voor 1 medewerker opslaat
Code (php)
1
2
3
4
5
6
7
8
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
========================================================
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)
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
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:
2:
Dit is echter ook beter en sneller op te lossen met één query:
Code (php)
1
2
3
4
5
6
7
8
9
10
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
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
Maar hoe voer ik dan de data in met tijden van beginnen/eindigen met het door u geschreven script?..
-id (integer, auto increment, primary index)
-user_id (integer, index)
-beginnen (datetime)
-eindigen (datetime)
dan is dit het script:
Code (php)
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
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>
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>
Gewijzigd op 27/11/2014 01:54:02 door Frank Nietbelangrijk
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?..
Ik doe dat zelf altijd met de DateTime class van PHP:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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');
?>
// 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