[Bug 4.9.3] Konfiguration: history.back() sendet Formular

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
derernst
Beiträge: 50
Registriert: Do 14. Aug 2008, 16:47
Kontaktdaten:

[Bug 4.9.3] Konfiguration: history.back() sendet Formular

Beitrag von derernst » Di 11. Mär 2014, 20:59

Hallo Forum

Erst mal die gewünschten Infos zur Installation:

Installierte Versionen
CONTENIDO Version 4.9.3
Webserver-Version Apache
Installierte PHP-Version 5.3.27
Datenbankserver-Version 5.5.33-cll-lve
PHP-Datenbankerweiterung mysqli

PHP-Einstellungen
date.timezone Europe/Zurich
include_path .:/usr/share/pear:/usr/share/php
memory_limit 256M
upload_max_filesize 256M
post_max_size 256M
max_execution_time 120
max_file_uploads 20
max_input_time 120
sql.safe_mode Deaktiviert
disable_classes nichts deaktiviert
disable_functions shell_exec, virtual, passthru, proc_close, proc_get_status, proc_open, proc_terminate

Und jetzt zum Thema:

Ich habe ein Modul geschrieben, mit dem ich Inhalte aus einer eigenen Datenbank-Tabelle verwalte. Dazu gibt es eine Liste, aus der man ein Eingabeformular aufruft. Im Formular dann gibt es Felder sowie einen Button um das Formular abzuschicken und einen zum Abbrechen. Soweit alles basic.

Nun habe ich festgestellt, dass auch beim Abbrechen die Formularfelder übermittelt werden, und zwar egal ob ich dazu history.back() oder location.replace() verwende. Um auszuschliessen, dass der Effekt sonstwo in meinem Code begründet ist, habe ich ein aufs Wesentliche reduziertes Testmodul geschrieben (nur den Input-Teil), mit dem das Problem reproduzierbar ist:

Code: Alles auswählen

?>
<?php

// Adresse zum Aufrufen zusammensetzen
$parts = array();
foreach ($_REQUEST as $k => $v) {
	if ($k != "test_id") {
		$parts[] = $k . "=" . $v;
	}
}
$href = $_SERVER['PHP_SELF'] . "?" . implode("&", $parts);

// Eingabeformular
if (isset($_GET["test_id"])) {
    echo "<p><input type='text' name='test_text'></p>";
    echo "<p><button onClick='this.form.submit()' style='font-weight:bold'>Eingaben speichern</button></p>";
    echo "<p><button onClick='history.back()'>Abbrechen mit history.back()</button></p>";
    echo "<p><button onClick='location.replace(\'" . $href . "\')'>Abbrechen mit location.replace()</button></p>";
}

// Übersicht, mit Ausgabe der übergebenen Parameter
else {
	echo "<h2>Übergebene Variablen:</h2>";
	echo "<pre>";
	print_r($_REQUEST);
	echo "</pre>";
	echo "<p><a href='" . $href . "&test_id=1'>Formular aufrufen</a></p>";
}
?>
<?php
Wenn man das Formular aufruft, und im Textfeld etwas eingibt (oder auch nicht), wird das Textfeld mit übergeben, egal ob man das Formular abschickt oder mit einer der beiden Varianten abbricht. Danach wird auch in jedem fall die Meldung der gelungenen Eingabe ausgegeben.

Dies war in früheren Contenido-Versionen nicht der Fall. Ich habe eine Website mit 4.9.1 in Gebrauch, da kann ich abbrechen, ohne dass das Formular übermittelt wird.

Ich denke, es wäre sinnvoll, das zu reparieren...

Antworten