Hallo,


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

<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>

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
In $time staat toch de tijd?
Gooi die in een INSERT-query?
Hi 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.
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 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:
<?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>


Een uitdraai van $_POST wordt dan bijvoorbeeld:
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] => 
                )

        )

)


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.
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.



Ik heb het ook geprobeerd en bij mij werkt het wel:)
Bryan,

Voor jouw array hoef je maar één foreach te gebruiken.

<?php
$output = $_GET['hours'];
foreach($output as $items => $days){
	echo '<div>'.$items.'</div>';
	echo $days['start'];
	echo $days['end'];
}
?>

Dit is ook wat Jan R bedoeld. Waarschijnlijk werkte het bij jou niet omdat je een foreach in een foreach gebruikt.
Ik denk dat het voornamelijk zijn doel is om alle informatie die bij elkaar hoort in een enkel record in een enkele stap van een foreach-loop te INSERTen in de database.

Vraag blijft misschien wel: waarom via AJAX en waarom via GET?

Reageren