[php,js] openingstijden berekenen.
Alleen nu wil ik ervoor zorgen dat hij automatisch berekend hoeveel uren de winkel open is (afhankelijk van de ingevulde waardes).
Het script zoals ik het nu heb:
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php
if(DB::Filter($row_online->user_id) == '0'){
include("pages/home.php");
}elseif(DB::NumRows($sql_supermarket) == 0){
include("pages/supermarket/start/index.php");
}else{
?>
<div class="c_box">
<div class="heading green">Openingstijden</div>
<div class="inner">
<?php
if(isset($_POST['confirm'])){
$total = 0;
for ($i = 1; $i < 8; $i++) {
$total += ($_POST['closed'.$i] - $_POST['open'.$i]);
}
if($total > 80){
echo'<div class="error">Het is maar mogelijk om maximaal 80 uur per week open te zijn.</div>';
}else{
for ($i = 1; $i < 8; $i++) {
$sql = DB::Query("SELECT * FROM hoursofoperation WHERE supermarket_id = '".DB::Escape($row_supermarket->id)."' AND day = '".$i."' ORDER BY id DESC LIMIT 1 ");
if(DB::Numrows($sql) == 0){
DB::Query("INSERT INTO hoursofoperation (supermarket_id,day,open,closed) VALUES('".DB::Filter($row_supermarket->id,ENT_QUOTES)."','".$i."','".DB::Filter($_POST['open'.$i])."','".DB::Filter($_POST['closed'.$i])."')")or die(mysql_error());
}else{
DB::Query("UPDATE hoursofoperation SET open = '".DB::Filter($_POST['open'.$i])."', closed = '".DB::Filter($_POST['closed'.$i])."' WHERE supermarket_id = '".DB::Escape($row_supermarket->id)."' AND day = '".$i."' ORDER BY id DESC LIMIT 1")or die(mysql_error());
}
}
echo'<div class="correct">De openingstijden zijn met succes aangepast.</div>';
}
}
?>
<form method="POST" action="index.php?p=supermarket&a=hoursofoperation">
<table width="100%">
<tr>
<td><strong>Dag</strong></td>
<td><strong>Geopend vanaf</strong></td>
<td><strong>Gesloten om</strong></td>
</tr>
<?php
for ($i = 1; $i <= 7; $i++) {
$sql_open = DB::Query("SELECT * FROM hoursofoperation WHERE supermarket_id = '".DB::Escape($row_supermarket->id)."' AND day = '".$i."' ORDER BY id DESC LIMIT 1");
$row_open = DB::FetchObject($sql_open);
?>
<tr>
<td width="40%">
<?php
switch ($i) {
case 1:
echo "Maandag";
break;
case 2:
echo "Dinsdag";
break;
case 3:
echo "Woensdag";
break;
case 4:
echo "Donderdag";
break;
case 5:
echo "Vrijdag";
break;
case 6:
echo "Zaterdag";
break;
case 7:
echo "Zondag";
break;
default :
echo "geen dag gekozen";
}
?>
</td>
<td width="30%">
<select name = "open<?php echo $i; ?>">
<?php
for ($open = 8; $open <= 22; $open++) {
?>
<option value="<?php echo $open; ?>" onclick="calc()"
<?php
if(DB::Numrows($sql_open) != 0){
if(DB::Filter($row_open->open) == $open){
?>
selected="selected";
<?php
}
}
?>
/>
<?php echo $open; ?>:00</option>
<?php
}
?>
</select> uur
</td>
<td width="30%">
<select name = "closed<?php echo $i; ?>">
<?php
for ($closed = 14; $closed <= 22; $closed++) {
?>
<option value="<?php echo $closed; ?>" onclick="calc()"
<?php
if(DB::Numrows($sql_open) != 0){
if(htmlentities($row_open->closed) == $closed){
?>
selected="selected";
<?php
}
}
?>
/>
<?php echo $closed; ?>:00</option>
<?php
}
?>
</select> uur
</td>
</tr>
<?php
}
?>
<tr>
<td><input type="submit" value="Bevestig openingstijden" name="confirm"></td>
</tr>
</table>
</form>
</div>
</div>
<?php
}
?>
if(DB::Filter($row_online->user_id) == '0'){
include("pages/home.php");
}elseif(DB::NumRows($sql_supermarket) == 0){
include("pages/supermarket/start/index.php");
}else{
?>
<div class="c_box">
<div class="heading green">Openingstijden</div>
<div class="inner">
<?php
if(isset($_POST['confirm'])){
$total = 0;
for ($i = 1; $i < 8; $i++) {
$total += ($_POST['closed'.$i] - $_POST['open'.$i]);
}
if($total > 80){
echo'<div class="error">Het is maar mogelijk om maximaal 80 uur per week open te zijn.</div>';
}else{
for ($i = 1; $i < 8; $i++) {
$sql = DB::Query("SELECT * FROM hoursofoperation WHERE supermarket_id = '".DB::Escape($row_supermarket->id)."' AND day = '".$i."' ORDER BY id DESC LIMIT 1 ");
if(DB::Numrows($sql) == 0){
DB::Query("INSERT INTO hoursofoperation (supermarket_id,day,open,closed) VALUES('".DB::Filter($row_supermarket->id,ENT_QUOTES)."','".$i."','".DB::Filter($_POST['open'.$i])."','".DB::Filter($_POST['closed'.$i])."')")or die(mysql_error());
}else{
DB::Query("UPDATE hoursofoperation SET open = '".DB::Filter($_POST['open'.$i])."', closed = '".DB::Filter($_POST['closed'.$i])."' WHERE supermarket_id = '".DB::Escape($row_supermarket->id)."' AND day = '".$i."' ORDER BY id DESC LIMIT 1")or die(mysql_error());
}
}
echo'<div class="correct">De openingstijden zijn met succes aangepast.</div>';
}
}
?>
<form method="POST" action="index.php?p=supermarket&a=hoursofoperation">
<table width="100%">
<tr>
<td><strong>Dag</strong></td>
<td><strong>Geopend vanaf</strong></td>
<td><strong>Gesloten om</strong></td>
</tr>
<?php
for ($i = 1; $i <= 7; $i++) {
$sql_open = DB::Query("SELECT * FROM hoursofoperation WHERE supermarket_id = '".DB::Escape($row_supermarket->id)."' AND day = '".$i."' ORDER BY id DESC LIMIT 1");
$row_open = DB::FetchObject($sql_open);
?>
<tr>
<td width="40%">
<?php
switch ($i) {
case 1:
echo "Maandag";
break;
case 2:
echo "Dinsdag";
break;
case 3:
echo "Woensdag";
break;
case 4:
echo "Donderdag";
break;
case 5:
echo "Vrijdag";
break;
case 6:
echo "Zaterdag";
break;
case 7:
echo "Zondag";
break;
default :
echo "geen dag gekozen";
}
?>
</td>
<td width="30%">
<select name = "open<?php echo $i; ?>">
<?php
for ($open = 8; $open <= 22; $open++) {
?>
<option value="<?php echo $open; ?>" onclick="calc()"
<?php
if(DB::Numrows($sql_open) != 0){
if(DB::Filter($row_open->open) == $open){
?>
selected="selected";
<?php
}
}
?>
/>
<?php echo $open; ?>:00</option>
<?php
}
?>
</select> uur
</td>
<td width="30%">
<select name = "closed<?php echo $i; ?>">
<?php
for ($closed = 14; $closed <= 22; $closed++) {
?>
<option value="<?php echo $closed; ?>" onclick="calc()"
<?php
if(DB::Numrows($sql_open) != 0){
if(htmlentities($row_open->closed) == $closed){
?>
selected="selected";
<?php
}
}
?>
/>
<?php echo $closed; ?>:00</option>
<?php
}
?>
</select> uur
</td>
</tr>
<?php
}
?>
<tr>
<td><input type="submit" value="Bevestig openingstijden" name="confirm"></td>
</tr>
</table>
</form>
</div>
</div>
<?php
}
?>
Het script dat ik gevonden heb op internet
Link
Ik hoop dat ik hiermee voldoende informatie heb gegeven, indien dat niet het geval is hoor ik het wel.
Alvast bedankt
Iemand een idee? Alvast bedankt
Hoe ziet je hoursofoperation tabel er uit?
supermarket_id
day
open
closed
Als open en closed van het type TIME zijn kun je dus de openingsduur per record berekenen
Wat ik wil is dat er een input veld komt die meteen berekend nadat er een nieuwe waarde is ingevuld.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
SELECT
SUM(t1.minuten) AS totaal
FROM ( SELECT
supermarkt_id, day, ROUND((TIME_TO_SEC(closed) - TIME_TO_SEC(open)) / 60, 0) AS minuten
FROM
openeningstijden
WHERE
supermarkt_id=1
) AS t1
GROUP BY
supermarkt_id
SUM(t1.minuten) AS totaal
FROM ( SELECT
supermarkt_id, day, ROUND((TIME_TO_SEC(closed) - TIME_TO_SEC(open)) / 60, 0) AS minuten
FROM
openeningstijden
WHERE
supermarkt_id=1
) AS t1
GROUP BY
supermarkt_id
Dit berekend voor supermarkt met id 1 de totale openingsduur in minuten.
Ik zou dat dan met AJAX doen.
Maar volgens mij wil Rick het totaal op de pagina laten zien wanneer er iets gewijzigd wordt, dus voordat er iets verstuurd wordt.
Code (js)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
function calc() {
total = 0;
for (i=1;i<8;i++) {
open = parseInt(document.getElementById('open' + i).value);
if(open != 0) {
closed = parseInt(document.getElementById('closed' + i).value);
total += closed - open;
}
}
alert(total.toString());
}
total = 0;
for (i=1;i<8;i++) {
open = parseInt(document.getElementById('open' + i).value);
if(open != 0) {
closed = parseInt(document.getElementById('closed' + i).value);
total += closed - open;
}
}
alert(total.toString());
}
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
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
<?php
$sql = "SELECT
d.day_id,
CASE d.day_id
WHEN 1 THEN 'Maandag'
WHEN 2 THEN 'Dinsdag'
WHEN 3 THEN 'Woensdag'
WHEN 4 THEN 'Donderdag'
WHEN 5 THEN 'Vrijdag'
WHEN 6 THEN 'Zaterdag'
ELSE 'Zondag'
END day_name,
IFNULL(h.open, 0) open,
IFNULL(h.closed, 0) closed
FROM
(SELECT 1 day_id UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
UNION SELECT 5 UNION SELECT 6 UNION SELECT 7) d
LEFT JOIN
hours_of_operation h
ON d.day_id = h.day AND h.supermarket_id = 1
ORDER BY d.day_id";
$sql_open = DB::Query($sql);
while ($row_open = DB::FetchObject($sql_open)) {
?>
<tr>
<td width="40%">
<?php echo $row_open->day_name ; ?>
</td>
<td width="30%">
<select id="open<?php echo $row_open->day_id; ?>" name = "open<?php echo $row_open->day_id; ?>" onchange="calc()">
<option value="0">Gesloten</option>
<?php
for ($open = 8; $open <= 22; $open++) {
?>
<option value="<?php echo $open; ?>"
<?php
if($row_open->open != 0){
if(DB::Filter($row_open->open) == $open){
?>
selected="selected"
<?php
}
}
?>
>
<?php echo $open; ?>:00</option>
<?php
}
?>
</select> uur
</td>
<td width="30%">
<select id="closed<?php echo $row_open->day_id; ?>" name="closed<?php echo $row_open->day_id; ?>" onchange="calc()">
<option value="0">Gesloten</option
<?php
for ($closed = 14; $closed <= 22; $closed++) {
?>
<option value="<?php echo $closed; ?>"
<?php
if($row_open->open != 0){
if(htmlentities($row_open->closed) == $closed){
?>
selected="selected"
<?php
}
}
?>
>
<?php echo $closed; ?>:00</option>
<?php
}
?>
</select> uur
</td>
</tr>
<?php
}
?>
$sql = "SELECT
d.day_id,
CASE d.day_id
WHEN 1 THEN 'Maandag'
WHEN 2 THEN 'Dinsdag'
WHEN 3 THEN 'Woensdag'
WHEN 4 THEN 'Donderdag'
WHEN 5 THEN 'Vrijdag'
WHEN 6 THEN 'Zaterdag'
ELSE 'Zondag'
END day_name,
IFNULL(h.open, 0) open,
IFNULL(h.closed, 0) closed
FROM
(SELECT 1 day_id UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
UNION SELECT 5 UNION SELECT 6 UNION SELECT 7) d
LEFT JOIN
hours_of_operation h
ON d.day_id = h.day AND h.supermarket_id = 1
ORDER BY d.day_id";
$sql_open = DB::Query($sql);
while ($row_open = DB::FetchObject($sql_open)) {
?>
<tr>
<td width="40%">
<?php echo $row_open->day_name ; ?>
</td>
<td width="30%">
<select id="open<?php echo $row_open->day_id; ?>" name = "open<?php echo $row_open->day_id; ?>" onchange="calc()">
<option value="0">Gesloten</option>
<?php
for ($open = 8; $open <= 22; $open++) {
?>
<option value="<?php echo $open; ?>"
<?php
if($row_open->open != 0){
if(DB::Filter($row_open->open) == $open){
?>
selected="selected"
<?php
}
}
?>
>
<?php echo $open; ?>:00</option>
<?php
}
?>
</select> uur
</td>
<td width="30%">
<select id="closed<?php echo $row_open->day_id; ?>" name="closed<?php echo $row_open->day_id; ?>" onchange="calc()">
<option value="0">Gesloten</option
<?php
for ($closed = 14; $closed <= 22; $closed++) {
?>
<option value="<?php echo $closed; ?>"
<?php
if($row_open->open != 0){
if(htmlentities($row_open->closed) == $closed){
?>
selected="selected"
<?php
}
}
?>
>
<?php echo $closed; ?>:00</option>
<?php
}
?>
</select> uur
</td>
</tr>
<?php
}
?>
Gewijzigd op 06/01/2015 12:41:09 door Ger van Steenderen
Bedankt hiervoor.
Edit: Nu wil ik ervoor zorgen dat het geen alert is, maar een input veld waar het in wordt weergegeven
<input type = "text" id = "total" name = "total" />
Gewijzigd op 06/01/2015 19:30:09 door rick kem
Code (php)
1
2
3
4
5
6
2
3
4
5
6
In je html:
<span id="total"></span>
In plaats van de alert:
document.getElementById('total').innerHTML = total.toString();
<span id="total"></span>
In plaats van de alert:
document.getElementById('total').innerHTML = total.toString();
Wil je toch een input verander .innerHTML in .value
Als ik tel: 8 - 14 zijn 6 uur x 7 = 42
en als ik de openingstijden dan telt hij bij/af (als ik de openingstijd verander. bij sluitingstijd doet hij dat niet)
Hij telt alleen de openingstijden bij elkaar op
Gewijzigd op 06/01/2015 19:48:38 door rick kem
Ook moet je controleren of de openingstijd niet groter is dan de sluitingstijd.
Maar met het gegeven voorbeeld kan jij dat makkelijk zelf inbouwen.
Als je die veranderd zou het moeten werken.
De rest kan ik zelf !
Toevoeging op 06/01/2015 21:08:39:
p.s. is het mogelijk om ervoor te zorgen dat zodra het totaal meer dan 80 uur is, dat het niet mogelijk is om op de submit button te klikken?
Ik was weer te moeilijk aan het denken zeker? Het is niet meer dan een aggregate query natuurlijk..
Ja in javascript is een oplossing al zou ik voor AJAX gegaan zijn en dan nieuw record => versturen met AJAX en direct response met openingsuren maar smaken verschillen natuurlijk.
Met je laatste opmerking ben ik het niet eens, je gaat geen gegevens opslaan zonder dat een gebruiker daarvoor kiest. Daarbij staat de J (als ik goed geinformeerd ben) voor Javascript, alleen je ga dan telkens een request uitvoeren wat helemaal niet nodig is.