WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

You are not logged in.

Announcement

#1 22.04.2026 18:23:17

dedra
Member

mpform - save.php? Fehler

Hallo,
habe auf WBCE 1.6.5 upgedatet, die Module auch. Nun passiert bei einer Änderung in mpform folgendes, beim klick auf speichern wird der screen weiß und es tut sich einfach nichts mehr. Natürlich wenn ich abbreche sind die geänderten Daten fort.

Vermutlich liegt es an dieser Datei /modules/mpform/save_settings.php - leider kann ich nicht finden was falsch ist.

VG dedra

Last edited by dedra (22.04.2026 18:24:12)

Offline

#2 22.04.2026 19:13:36

florian
Administrator

Re: mpform - save.php? Fehler

Was steht denn im Errorlog?


Sorgen sind wie Nudeln: man macht sich meist zu viele.

Offline

#3 22.04.2026 20:32:10

dedra
Member

Re: mpform - save.php? Fehler

uh je.. wo finde ich das denn wieder?

ChatGPT hat auch mal analysiert... und Fehler gefunden:

Thema: mpForm speichert Einstellungen nicht (White Screen bei save_settings.php)

Umgebung:

CMS: WBCE / WebsiteBaker
Modul: mpForm v1.3.44
PHP-Version: vermutlich ≥ 7.4 / 8.x

Problem:
Beim Speichern der Einstellungen im Backend (save_settings.php) passiert nichts:

keine Fehlermeldung
weißer Bildschirm
Daten werden nicht gespeichert

Reproduzierbarer Ablauf:

mpForm Backend öffnen
Einstellungen ändern
„Speichern“ klicken
→ White Screen

Bisherige Analyse:

Fehler tritt in /modules/mpform/save_settings.php auf
Ursache vermutlich:
$section_id wird zu spät gesetzt
DB-Query liefert kein Ergebnis
fetchRow() gibt false zurück
Zugriff auf $res['page_id'] → PHP Fatal Error

Vermuteter Fix:

$section_id und $page_id vor DB-Query setzen
Zugriff auf $res absichern

Code-Ausschnitt (relevant):

$query_content = $database->query(
    "SELECT * FROM ".TABLE_PREFIX."sections WHERE section_id = '$section_id'"
);

$res = $query_content->fetchRow();

if ($res['page_id'] != $page_id)

Ziel im neuen Chat:

vollständiger PHP-8-kompatibler Patch für mpForm
stabile Speicherung ohne White Screen

Offline

#4 22.04.2026 20:44:54

florian
Administrator

Re: mpform - save.php? Fehler

Admintools > Errorlog Viewer


Sorgen sind wie Nudeln: man macht sich meist zu viele.

Offline

Liked by:

dedra

#5 22.04.2026 21:48:05

mrbaseman
Core-Team

Re: mpform - save.php? Fehler

den Kommentar

// convert page/section id to numbers
// (already checked by /modules/admin.php but kept for consistency)

hat ChatGPT geflissentlich ignoriert. Das ist glaub ich noch ein Relikt aus WB 2.6 Zeiten oder so...

Zugegeben, wenn man das Setzen der $section_id und $page_id (eigentlich unnötigerweise) drin lässt, dann müsste man es auch vor die erste Verwendung dieser Variablen setzen, das ist schon richtig. Aber der Grund für den Fehler wird das wohl eher nicht sein, da das gleiche schon außerhalb der save_settings.php in der admin-Klasse passiert und die Variablen bereits vorbelegt sein müssten.

Offline

#6 22.04.2026 23:55:27

dedra
Member

Re: mpform - save.php? Fehler

das steht im Errorlog viewer:
2026-04-22T21:53:18+00:00 [Visitor Request] https://testwebseite.de/modules/mpform/ … ttings.php
2026-04-22T21:53:18+00:00 [Exception] There was an unknown exception: idn_to_ascii(): Argument #1 ($domain) must not be empty in line (627) of /framework/class.wb.php

in der genannten Zeile steht:   $email = @idn_to_ascii($email);

Last edited by dedra (23.04.2026 00:02:02)

Offline

#7 23.04.2026 00:29:48

dedra
Member

Re: mpform - save.php? Fehler

Toll, auch dafür gab KI Lösungsvorschläge:

Du hast zwei Möglichkeiten: Den Datensatz korrigieren oder den Code "unkaputtbar" machen.

Lösung A: Fehlende Daten ergänzen (Der schnelle Weg)
Prüfe in deiner Datenbank (z. B. via phpMyAdmin) die Tabelle config oder die spezifische Einstellungs-Tabelle von mpform.

Suche nach Feldern, die E-Mail-Adressen enthalten sollten (z. B. SERVER_EMAIL, REPLY_TO, EMAIL_FROM).

Wenn eines dieser Felder leer ist, trage testweise eine gültige E-Mail-Adresse ein.

Versuche danach erneut, im Admin-Bereich zu speichern.

Lösung B: Code-Anpassung (Der dauerhafte Weg)
Du kannst die entsprechende Stelle im Framework absichern, damit leere Werte nicht zum Absturz führen.

Öffne die Datei: /framework/class.wb.php.

Suche die Zeile 627.

Dort steht vermutlich etwas wie:

PHP

$domain = idn_to_ascii($domain);
Ersetze diese Zeile (oder umschließe sie) mit einer Prüfung:

PHP

if (!empty($domain)) {
    $domain = idn_to_ascii($domain);
}
Warum passiert das jetzt?
Da wir uns im Jahr 2026 befinden, läuft dein Server höchstwahrscheinlich auf einer modernen PHP-Version (vielleicht PHP 8.2 oder 8.3). Frühere PHP-Versionen waren bei leeren Argumenten oft gnädig und gaben einfach false zurück, während moderne Versionen eine Fatal Exception werfen.

Habe Lösung A umgesetzt, per phpMyAdmin die leeren E-Mail-Felder ausgefüllt.

Ergebnis: kein weißer screen mehr beim speichern, im Errorlog viewer steht dafür nun das hier:
2026-04-22T22:08:19+00:00 [Visitor Request] https://testwebseite.de/modules/adminer … n_id%5D=94
2026-04-22T22:08:19+00:00 [Deprecated] /modules/adminer/adminer/wrapper.php:[15] from /modules/adminer/adminer/wrapper.php:[15] exit "exit(): Passing null to parameter #1 ($status) of type string|int is deprecated"

Erstmal zufrieden, das es nun gefixt ist & wieder etwas dazu gelernt (auch Dank KI)

Offline

#8 23.04.2026 07:46:43

florian
Administrator

Re: mpform - save.php? Fehler

Fehler bestätigt.
Wie lässt sich das sinnvoll reparieren? Wenn ich in der class.wb.php

public function validate_email($email)
    {
        if (function_exists('idn_to_ascii')) {
            // use pear if available
            $email = @idn_to_ascii($email);
        } else {
            require_once WB_PATH . '/include/idna_convert/idna_convert.class.php';
            $IDN = new idna_convert();
            $email = $IDN->encode($email);
            unset($IDN);
        }
        // regex from NorHei 2011-01-11
        $retval = preg_match("/^((([!#$%&'*+\\-\/\=?^_`{|}~\w])|([!#$%&'*+\\-\/\=?^_`{|}~\w][!#$%&'*+\\-\/\=?^_`{|}~\.\w]{0,}[!#$%&'*+\\-\/\=?^_`{|}~\w]))[@]\w+(([-.]|\-\-)\w+)*\.\w+(([-.]|\-\-)\w+)*)$/", $email);
        return ($retval != false);
    }

ändere zu

 public function validate_email($email)
    {
		if (!empty($email)) {
			if (function_exists('idn_to_ascii')) {
				// use pear if available
				$email = @idn_to_ascii($email);
			} else {
				require_once WB_PATH . '/include/idna_convert/idna_convert.class.php';
				$IDN = new idna_convert();
				$email = $IDN->encode($email);
				unset($IDN);
			}
		}
        // regex from NorHei 2011-01-11
        $retval = preg_match("/^((([!#$%&'*+\\-\/\=?^_`{|}~\w])|([!#$%&'*+\\-\/\=?^_`{|}~\w][!#$%&'*+\\-\/\=?^_`{|}~\.\w]{0,}[!#$%&'*+\\-\/\=?^_`{|}~\w]))[@]\w+(([-.]|\-\-)\w+)*\.\w+(([-.]|\-\-)\w+)*)$/", $email);
        return ($retval != false);
    }

scheint mir die Funktion gar nicht mehr ausgeführt zu werden.

Last edited by florian (23.04.2026 07:47:11)


Sorgen sind wie Nudeln: man macht sich meist zu viele.

Offline

#9 23.04.2026 14:09:09

dedra
Member

Re: mpform - save.php? Fehler

Da ich ja kein Programmierer bin, war mir das mit phpMyAdmin "sicherer" und siehe da, es funktioniert nun ja auch.
Die KI kann einiges, macht aber auch viele Fehler, da muss man schon genau hinschauen.

Danke.

Offline

#10 23.04.2026 14:24:18

kant
Member

Re: mpform - save.php? Fehler

Hm ...
Einfacher geht es wenn man zum //alten// Verhalten zurück kehrt und
bei einem einfachen leeren String stumpf »false« zurück gibt:

[== PHP ==]
/**
 * @brief   Validate the supplied email address.
 *
 * @param   string  The email to test.
 * @return  bool    False if not valid or emtpy. 
 */
public function validate_email(string $email): bool
{
    if (empty($email)) {
        return false;
    }
    
    if (function_exists('idn_to_ascii')) {
        // Use internal if available.
        // See: https://www.php.net/manual/en/function.idn-to-ascii.php
        $email = idn_to_ascii($email);
    } else {
        require_once WB_PATH . '/include/idna_convert/idna_convert.class.php';
        $IDN = new idna_convert();
        $email = $IDN->encode($email);
        unset($IDN);
    }
    // regex from NorHei 2011-01-11
    $retval = preg_match("/^((([!#$%&'*+\\-\/\=?^_`{|}~\w])|([!#$%&'*+\\-\/\=?^_`{|}~\w][!#$%&'*+\\-\/\=?^_`{|}~\.\w]{0,}[!#$%&'*+\\-\/\=?^_`{|}~\w]))[@]\w+(([-.]|\-\-)\w+)*\.\w+(([-.]|\-\-)\w+)*)$/", $email);
    return ($retval != false);
}

Hope it helps
Kant

Last edited by kant (24.04.2026 01:30:59)


Sapere aude!

Offline

Liked by:

florian, stefanek

#11 24.04.2026 23:17:06

stefanek
Core-Team

Re: mpform - save.php? Fehler

Ja danke Kant, das mit dem "early return on empty" is der richtige Hinweis.
Danke auch Florian, dass Du mich auf diesen Thread aufmerksam gemacht hast.

Was mir auch auffällt, die Verwendung von idn_to_ascii ist hier etwas falsch (denn die funktion konvertiert hauptsächlich den Internationalisierten Domain Namen.
Auch der Fallback auf die idna_convert.class.php ist nicht wirklich zeitgemäß.
(Zumal idn_to_ascii heute fast überall vorinstalliert ist.)

Das Regex ist mittlerweile auch obsolet geworden und kann durch filter_var mit FILTER_VALIDATE_EMAIL ersetzt werden.

Mein Vorschlag:

[== PHP ==]

/**
 * Validates the supplied email address.
 *
 * Handles internationalized domain names (IDN) by converting the domain
 * part to its ASCII-compatible encoding (ACE/Punycode) before validation.
 * Requires the intl extension for IDN support (idn_to_ascii).
 * Falls back to raw domain validation if the extension is unavailable.
 *
 * @param  string $email The email address to validate.
 * @return bool          Returns true if the email address is valid,
 *                       false if empty or invalid.
 *
 * @see    https://www.php.net/manual/en/function.idn-to-ascii.php
 * @see    https://www.php.net/manual/en/function.filter-var.php
 */
public function validate_email(string $email): bool
{
    if (empty($email)) {
        return false;
    }

    if (str_contains($email, '@')) {
        [$local, $domain] = explode('@', $email, 2);

        if (function_exists('idn_to_ascii')) {
            $ascii = idn_to_ascii($domain, IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46);
            // idn_to_ascii returns false on failure
            if ($ascii !== false) {
                $domain = $ascii;
            }
        }
        // If intl is unavailable, fall through with the raw domain.
        // filter_var will still catch obviously malformed addresses.

        $email = $local . '@' . $domain;
    }

    return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}

Christian

P.S. so könnten wir auch den include Ordner etwas erleichtern, denn diese Klasse wird nur einmal in dieser obigen Methode verwendet.


“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale

Online

#12 26.04.2026 15:33:37

dedra
Member

Re: mpform - save.php? Fehler

Danke für Eure Hinweise, wenn es auch weiteren Nutzern hilft, um so besser.

Offline

Liked by:

stefanek

#13 27.04.2026 15:45:51

kant
Member

Re: mpform - save.php? Fehler

Hm ... so weit so gut ... getestet und bei GiT als PullRequest
https://github.com/WBCE/WBCE_CMS/pulls eingereicht - sehe nichts was dagegen sprechen sollte.

Gruß
Kant


Sapere aude!

Offline

Liked by:

stefanek

#14 27.04.2026 16:32:42

stefanek
Core-Team

Re: mpform - save.php? Fehler

Vielen Dank für's Gegenchecken und für den PullRequest.

Christian


“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale

Online

#15 27.04.2026 17:56:15

florian
Administrator

Re: mpform - save.php? Fehler

gemerged


Sorgen sind wie Nudeln: man macht sich meist zu viele.

Offline

Liked by:

kant

#16 27.04.2026 21:45:59

mrbaseman
Core-Team

Re: mpform - save.php? Fehler

Gibt's ein Take-away für mpform? Ich nehme an, dass irgendwo eine Option zum Senden von Emails gesetzt war, aber keine Email-Adresse angegeben war. Das hat bisher funktioniert, fällt aber mit neueren php-Versionen auf die Nase.
Wenn wir den Fix aus dem Pull-Request im Core haben, dürfte der Code (unter diesem Aspekt) weiterhin so funktionieren, wie unter früheren php-Versionen, richtig?

Offline

#17 27.04.2026 22:31:38

stefanek
Core-Team

Re: mpform - save.php? Fehler

Ja, so wie ich es sehe ist es genau das, was in Post#6 stand.
Und der early return verhindert, dass ein "empty" by der besagten funktion überhaupt ankommt.
Daher ja, es wird dann weiterhin auch unter neueren PHP Versionen nicht meckern, nachdem die Funktion jetzt dahingehend angepasst wurde.

Christian


“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale

Online

Liked by:

florian

Board footer

up