Can't send form | Your session timed out. Please submit the form again

Hello :slight_smile:

I’m trying to make a form get to work, but i just get the error:
“Your session timed out. Please submit the form again.”

What i’m doing wrong?

Controller:

<?php
  return function($kirby, $pages, $page) {

    $alert = null;

    if($kirby->request()->is('POST') && get('submit')) {


        // check the honeypot
        if(empty(get('website')) === false) {
            go($page->url());
            exit;
        }

        $data = [
            'name'  => get('name'),
            'email' => get('email'),
            'phone' => get('phone'),
            'text'  => get('text'),
            'gdpr'  => get('gdpr') == 'on' ? 'Ja' : 'Nein',
        ];

        $rules = [
            'name'  => ['required', 'min' => 3, 'max' => 50],
            'email' => ['required', 'email'],
            'phone' => ['required'],
            'text'  => ['required', 'min' => 5, 'max' => 3000],
            'gdpr'  => ['required'],
        ];

        $messages = [
            'name'  => 'Namen überprüfen (min. 3 Zeichen)',
            'email' => 'E-Mail Adresse überprüfen',
            'text'  => 'Nachricht überprüfen (min. 5 - max. 3000 Zeichen)',
            'phone' => 'Telefonnummer überprüfen',
            'gdpr'  => 'Bitte Datenschutzhinweis akzeptieren',
        ];

        // some of the data is invalid
        if($invalid = invalid($data, $rules, $messages)) {
            $alert = $invalid;
            // the data is fine, let's send the email
        } else {
            try {
                $kirby->email([
                    'template' => 'simple',
                    'from'     => 'XXXX',
                    'replyTo'  => esc($data['email']),
                    'to'       => 'XXXX',
                    'subject'  => ' Nachricht von "' . esc($data['name']) . '" per Kontaktformular',
                    'data'     => [
                        'text' => esc($data['text'] ?? '—'),
                        'phone'  => esc($data['phone']  ?? '—'),
                        'name' => esc($data['name']  ?? '—'),
                        'email' => esc($data['email'] ?? '—'),
                        'gdpr' => esc($data['gdpr']) ?? '—'
                    ]
                ]);

            } catch (Exception $error) {
                $alert['error'] = $error;
            }
            // no exception occured, let's send a success message
            if (empty($alert) === true) {
                $success = 'Ihre Nachricht wurde gesendet!';
                $data = [];
            }
        }
    }
    return [
        'alert'   => $alert ?? false,
        'data'    => $data ?? false,
        'success' => $success ?? false
    ];
};

HTML:

<form id="contactForm" method="post" action="XXXX/kontakt/">
    <div class="a-input--special">
        <label for="website">Website <abbr title="required">*</abbr></label>
        <input type="website" id="website" name="website">
    </div>

    <div class="o-row">
        <div class="o-col-6 o-col-s-24">
            <div class="a-input is-valid">
                <div class="a-input__wrapper">
                    <div class="a-input__inner">
                        <input class="a-input__input has-focused has-content" id="name" type="text" name="name"
                            minlength="3" maxlength="50" required="" data-required="true" placeholder="">
                        <label class="a-input__label" for="name">Ihr Name / Firma</label>
                        <span class="a-input__info">Bitte geben Sie Ihren Namen / Firma ein</span>
                    </div>
                </div>
            </div>

        </div>
    </div>
    <div class="o-row">
        <div class="o-col-6 o-col-m-12">
            <div class="a-input is-valid">
                <div class="a-input__wrapper">
                    <div class="a-input__inner">
                        <input class="a-input__input has-focused has-content" id="email" type="email" name="email"
                            required="" data-required="true" placeholder="">
                        <label class="a-input__label" for="email">Ihre E-Mail Addresse </label>
                        <span class="a-input__info">Bitte überprüfen Sie ihre E-Mail Adresse.</span>
                    </div>
                </div>
            </div>
        </div>
        <div class="o-col-6 o-col-m-12">
            <div class="a-input is-valid">
                <div class="a-input__wrapper">
                    <div class="a-input__inner">
                        <input class="a-input__input has-focused has-content" id="phone" type="text" name="phone"
                            minlength="5" maxlength="30" required="" data-required="true" placeholder="">
                        <label class="a-input__label" for="phone">Ihre Telefonnummer</label>
                        <span class="a-input__info">Bitte geben Sie Ihre Telefonnummer ein.</span>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="o-row">
        <div class="o-col-6">
            <div class="a-textarea is-root is-valid">
                <div class="a-textarea__wrapper">
                    <div class="a-textarea__inner">
                        <textarea rows="5" class="a-textarea__textarea has-focused has-content" id="text" name="text"
                            maxlength="3000" required="" data-required="true" placeholder=""></textarea>
                        <label class="a-textarea__label" for="text">Ihre Nachricht</label>
                        <span class="a-textarea__info">Bitte geben Sie eine Nachricht ein.</span>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="o-row">
        <div class="o-col-6">
            <div class="a-checkbox
                <div class="a-checkbox__inner">
                    <input class="a-checkbox__checkbox" type="checkbox" id="gdpr" name="gdpr">
                    <label class="a-checkbox__label" for="gdpr">Ja, ich habe die <a
                            href="XXX/datenschutz" target="_blank"
                            rel="noopener">Datenschutzerklärung</a> zur Kenntnis genommen und bin damit einverstanden,
                        dass die von mir angegebenen Daten elektronisch erhoben und gespeichert werden.
                        Meine Daten werden dabei nur streng zweckgebunden zur Bearbeitung und Beantwortung meiner
                        Anfrage benutzt.</label>
                </div>
            </div>
        </div>
    </div>
    <div class="o-row">
        <div class="o-col-6">
            <div class="a-button
                            a-button--center
                            a-button--primary
                                          ">
                <button type="submit" class="a-button__button">
                    Formular absenden
                </button>
            </div>
        </div>
    </div>
</form>

How are you submitting the form?

If get('submit') will never be true, it seems. Your button needs a name=“submit” for the if statement to work.

Also, but unrelated, your HTML is corrupted:

<div class="a-checkbox 
1 Like

Hey texnixe, thx for your support.

I think i found my mistake. I had an old route ‘kontakt’ from a test with the uniform plugin.
I removed it and now it’s working.

Thank you very much. Good night!