Sla meerdere forms in een keer op
Ik ben opzoek naar wat hulp voor het volgende. In mijn backoffice heb ik een pagina gemaakt om de openingstijden te beheren.
Hiervoor heb ik het volgende gemaakt
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<form>
<div class="groupdays">
<label>maandag</label>
<input name="mondaystart"/>
<input name="mondayend"/>
</div>
<div class="groupdays">
<label>dinsdag</label>
<input name="tuesdaystart"/>
<input name="tuesdayend"/>
</div>
<div class="groupdays">
<label>maandag</label>
<input name="mondaystart"/>
<input name="mondayend"/>
</div>
<div class="groupdays">
<label>dinsdag</label>
<input name="tuesdaystart"/>
<input name="tuesdayend"/>
</div>
enz. enz.
Hier vul je de starttijd en de eindtijd in.
Deze dagen wil ik in een batch opslaan in de database via ajax.
Wat zijn hier de mogelijkheden voor? Ik heb al een beetje gegoogled maar heb nog niets bruikbaars gevonden.
Toevoeging:
Voor elke dag wil ik een record in de database
ID-DAY-START-END
1-Maandag-09:00-18:00
2-Dinsdag-09:00-18:00
Gewijzigd op 08/03/2020 13:32:33 door Bryan De Baar
Waarop heb je dan gezocht? Want de basis van AJAX, welke overal wel uitgelegd wordt, kan je hier prima op toepassen.
Het opslaan via AJAX als 1 record snap ik. Moet ik dan een each gebruiken en de AJAX herhalen of doe ik alles in een keer weg en laat PHP een splitsing tussen de dagen maken?
openingstijden['monday']['begin']
openingstijden['monday']['end']
Dan kan je makkelijker foreachen in je PHP.
Vergeet geen .serialize() toe te passen in je AJAX-request (jQuery in dit geval).
Gewijzigd op 08/03/2020 13:51:47 door - Ariën -
Ik heb het inderdaad zo gedaan zoals je zij en heb tot nu toe dit:
Deze array krijg ik als ik in PHP print_r gebruik
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
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
Array
(
['monday'] => Array
(
['start'] => 09:00
['end'] => 18:00
)
['tuesday'] => Array
(
['start'] =>
['end'] =>
)
['wednesday'] => Array
(
['start'] =>
['end'] =>
)
['thursday'] => Array
(
['start'] =>
['end'] =>
)
['friday'] => Array
(
['start'] =>
['end'] =>
)
['saturday'] => Array
(
['start'] =>
['end'] =>
)
['sunday'] => Array
(
['start'] =>
['end'] =>
)
)
(
['monday'] => Array
(
['start'] => 09:00
['end'] => 18:00
)
['tuesday'] => Array
(
['start'] =>
['end'] =>
)
['wednesday'] => Array
(
['start'] =>
['end'] =>
)
['thursday'] => Array
(
['start'] =>
['end'] =>
)
['friday'] => Array
(
['start'] =>
['end'] =>
)
['saturday'] => Array
(
['start'] =>
['end'] =>
)
['sunday'] => Array
(
['start'] =>
['end'] =>
)
)
Om de data te doorlopen heb ik een foreach gemaakt
Code (php)
Dit krijg ik als resultaat
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
'monday'09:00'monday'18:00'
tuesday''tuesday''
wednesday''wednesday''
thursday''thursday''
friday''friday''
saturday''saturday''
sunday''sunday'
tuesday''tuesday''
wednesday''wednesday''
thursday''thursday''
friday''friday''
saturday''saturday''
sunday''sunday'
Nu wil de start en end los koppelen zodat ik beide kan gebruiken waar ik wil en dacht dat te kunnen doen met
Code (php)
Maar krijg niet het gewenste resultaat en krijg dan 0 en 1 terug
Gewijzigd op 08/03/2020 15:20:26 door Bryan De Baar
Heb ik ook geprobeerd, maar ook die werkt niet.
Ik wil de dag en de tijden apart zodat ik die in een query kan gebruiken om in de database op te slaan.
Je kan op die plek van die echo toch die waardes INSERT'en?
Daarom wil ik eerst de loops testen
Gooi eens $times en $time in een print_r() ?
$time
Gooi die in een INSERT-query?
Gewijzigd op 08/03/2020 22:23:01 door - Ariën -
Dat klopt maar dat is zowel de start als de eindtijd.
Ik wil ze apart hebben zodat ik deze in aparte kolommen kan zetten.
date() functie kunnen gebruiken voor de dag van de week (0 = zondag, 6 = zaterdag). Vervolgens zou je op index 0 de openingstijd kunnen zetten, en op index 1 de sluitingstijd. Dan moet je er ook zorg voor dragen dat als je een openingstijd invult, dat je een ook een sluitingstijd invult, maar dat soort logica kun je ook in de validatie stoppen ofzo, of je maakt hiervoor een aparte "closed" checkbox oid.
Vervolgens kun je de afhandeling vereenvoudigen door door de eerdergenoemde "days" heen te loopen.
Bijvoorbeeld als volgt:
Een uitdraai van $_POST wordt dan bijvoorbeeld:
De rest lijkt mij redelijk voor de hand liggend en de omzetting naar een AJAX-variant is een technische abstractie, de aanpak blijft hetzelfde.
Dit is trouwens de tegenhanger van een eerder topic wat je hierover geopend had, inmiddels al weer uit 2018?
Op het moment dat je wat structuur in deze data aanbrengt wordt alles meestal stukken eenvoudiger.
Ik ben hier niet altijd een voorstander van, maar je zou je formulier wat compacter kunnen opzetten door wat naamgeving in te korten. Zo zou je alles in een "days" array kunnen stoppen. Vervolgens zou je de codering van de Vervolgens kun je de afhandeling vereenvoudigen door door de eerdergenoemde "days" heen te loopen.
Bijvoorbeeld als volgt:
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
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
<?php
// https://www.phphulp.nl/php/forum/topic/sla-meerdere-forms-in-een-keer-op/103370
function escape($in) {
return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}
function dump($in) {
if (is_array($in)) {
$in = print_r($in, true);
}
echo '<pre>'.escape($in).'</pre>';
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="" method="POST">
<?php
$dayNames = array(0 => 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat');
$firstDay = 1; // start on monday
for ($i=0; $i<7; $i++) { // edit: aanpassing
$weekDay = ($i + $firstDay) % 7; // edit: aanpassing
echo escape($dayNames[$weekDay]); ?>: <input type="text" name="days[<?php echo escape($weekDay); ?>][]"> - <input type="text" name="days[<?php echo escape($weekDay); ?>][]"><br><?php
}
?>
<button type="submit">go</button>
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
dump($_POST);
}
?>
</body>
</html>
// https://www.phphulp.nl/php/forum/topic/sla-meerdere-forms-in-een-keer-op/103370
function escape($in) {
return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}
function dump($in) {
if (is_array($in)) {
$in = print_r($in, true);
}
echo '<pre>'.escape($in).'</pre>';
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="" method="POST">
<?php
$dayNames = array(0 => 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat');
$firstDay = 1; // start on monday
for ($i=0; $i<7; $i++) { // edit: aanpassing
$weekDay = ($i + $firstDay) % 7; // edit: aanpassing
echo escape($dayNames[$weekDay]); ?>: <input type="text" name="days[<?php echo escape($weekDay); ?>][]"> - <input type="text" name="days[<?php echo escape($weekDay); ?>][]"><br><?php
}
?>
<button type="submit">go</button>
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
dump($_POST);
}
?>
</body>
</html>
Een uitdraai van $_POST wordt dan bijvoorbeeld:
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
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
Array
(
[days] => Array
(
[1] => Array
(
[0] => 09:00
[1] => 17:00
)
[2] => Array
(
[0] => 09:00
[1] => 17:00
)
[3] => Array
(
[0] => 09:00
[1] => 17:00
)
[4] => Array
(
[0] => 09:00
[1] => 17:00
)
[5] => Array
(
[0] => 09:00
[1] => 17:00
)
[6] => Array
(
[0] => 09:00
[1] => 16:00
)
[0] => Array
(
[0] =>
[1] =>
)
)
)
(
[days] => Array
(
[1] => Array
(
[0] => 09:00
[1] => 17:00
)
[2] => Array
(
[0] => 09:00
[1] => 17:00
)
[3] => Array
(
[0] => 09:00
[1] => 17:00
)
[4] => Array
(
[0] => 09:00
[1] => 17:00
)
[5] => Array
(
[0] => 09:00
[1] => 17:00
)
[6] => Array
(
[0] => 09:00
[1] => 16:00
)
[0] => Array
(
[0] =>
[1] =>
)
)
)
De rest lijkt mij redelijk voor de hand liggend en de omzetting naar een AJAX-variant is een technische abstractie, de aanpak blijft hetzelfde.
Dit is trouwens de tegenhanger van een eerder topic wat je hierover geopend had, inmiddels al weer uit 2018?
Op het moment dat je wat structuur in deze data aanbrengt wordt alles meestal stukken eenvoudiger.
Gewijzigd op 09/03/2020 15:49:35 door Thomas van den Heuvel
Bryan De Baar op 08/03/2020 20:46:36:
@jan r,
Heb ik ook geprobeerd, maar ook die werkt niet.
Ik wil de dag en de tijden apart zodat ik die in een query kan gebruiken om in de database op te slaan.
Heb ik ook geprobeerd, maar ook die werkt niet.
Ik wil de dag en de tijden apart zodat ik die in een query kan gebruiken om in de database op te slaan.
Ik heb het ook geprobeerd en bij mij werkt het wel:)
Voor jouw array hoef je maar één foreach te gebruiken.
Code (php)
Dit is ook wat Jan R bedoeld. Waarschijnlijk werkte het bij jou niet omdat je een foreach in een foreach gebruikt.
Gewijzigd op 09/03/2020 13:31:17 door Jop B
Vraag blijft misschien wel: waarom via AJAX en waarom via GET?
Gewijzigd op 09/03/2020 16:09:31 door Thomas van den Heuvel