Warning: Cannot modify header information...

Diskussion zum Modul Guestbook für ConPresso 4
Antworten
Insane
ConPresso-Newbie
Beiträge: 11
Registriert: 06.08.2007 15:21
Danksagung erhalten: 2 Mal

Warning: Cannot modify header information...

Beitrag von Insane »

Hallo liebe Communtiy,

ich habe ein Upgrade des Gästebuchmoduls von 4.0.5a auf 4.1.0 durchgeführt. Leider bekomme ich beim Klick auf den Senden-Button folgende Fehlermeldung:
Warning: Cannot modify header information - headers already sent by (output started at [Pfad]/_cfg/global_header.php:8) in [Pfad]/mod_guestbook_vorschlaege/_include/guestbook.inc.php on line 565
Die ersten 14 Zeilen der global_header.php:
<!-- start of _cfg/global_header.php -->
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html>
<head>
<!--link rel="icon" href="_images/logo_dgiq_klein.ico" type="image/vnd.microsoft.icon" /-->
<link rel="stylesheet" type="text/css" href="<?php echo BASE_REL.'dgiq.css'; ?>"/>
<!--[if IE]>
<style type="text/css">@import url(<?php echo BASE_REL.'dgiq_ie.css'; ?>);</style>
<![endif] -->
<title>
<?php echo htmlspecialchars($cpoRubricSettings['title']); ?>
</title>
Das Gästebuch soll nicht mehr Funktionalität erfüllen als die Sammlung von Verbesserungsvorschlägen, als Artikel in einer Conpresso Rubrik (mod_contact stellt keine Alternative dar :o)). Ich habe bereits im Forum gesucht und eine vergleichbare Problematik gefunden:

http://community.conpresso.de/viewtopic.php?t=2852

Allerdings löst diese das Problem nicht. Mein Conpresso System ist Version 4.0.7. und die dort beschriebenen Änderungen sind schon längst enthalten.

Wäre schön wenn jemand eine Idee hat, wie man diesen Fehler nach dem Absenden eines Beitrags beheben kann.

Gruß,
Insane

PS: Alles funktioniert wie gewollt, nur die Fehlermeldung hält sich hartnäckig.
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Beitrag von Matthias V »

Hallo,

wenn du die Zeile 481 in der Datei mod_guestbook/_include/guestbook.inc.php:

Code: Alles auswählen

if (!isset($header_is_printed) && $nextview!='index2article' && $nextview!='jump2index' && (!empty($data['nr']) || $nextview!='confirm')) {
mal testweise änderst in:

Code: Alles auswählen

if (false) {
, dann dürfte die Meldung nicht mehr auftreten, ABER es werden keine header-Dateien mehr ausgegeben.

Dies kannst du mal rein zu Testzwecken durchführen.

Aber ich kann mir ehrlich gesagt noch nicht erklären, warum dieses Problem wieder auftritt, welches mal bei früheren Versionen auftrat.

Es kann an Übertragungsproblemen zu deinem Webspace liegen. Demnach kannst du mal testen (wenn du die obige Code-Änderung wieder rückgängig gemacht hast), die _include/function.php aus dem Conpresso-Archiv noch einmal zu Übertragen, falls es bei der Übertragung dieser Datei Probleme gab.

Gruß Matthias
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Insane
ConPresso-Newbie
Beiträge: 11
Registriert: 06.08.2007 15:21
Danksagung erhalten: 2 Mal

Beitrag von Insane »

Erstmal vielen Dank für die schnelle Hilfestellung, Matthias.

Ich habe deine Vorschläge getestet.

Bei der Umstellung der Bedingung auf false, lief das Modul fehlerfrei, allerdings wie beschrieben ohne Headerausgabe. Genauer gesagt war nur das Gästebuchmodul sichtbar, sonst nichts.

Ich habe auch die Datei function.php nochmals transferiert und die Webseite in meiner Testumgebung (XAMPP) auch nochmal local(host) getestet. Bei beiden blieb der oben genannte Fehler bestehen.

Kann es sein, dass die CSS Datei oder Angaben darin diesen Fehler verursachen?
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Beitrag von Matthias V »

Insane hat geschrieben:Kann es sein, dass die CSS Datei oder Angaben darin diesen Fehler verursachen?
Nein, daran liegt es nicht. In der Zeile 565 in der Datei mod_guestbook/_include/guestbook.inc.php steht eine Zeile, welche die header-Informationen der auszugebenden Webseite modifiziert. Das heißt, es wird eine andere URL angegeben. Und dies darf nur passieren, wenn vorher noch nicht die header-Dateien von Conpresso eingebunden wurden, welche eine Ausgabe produzieren.
Und diese Ausgabe der Conpresso-Header-Dateien hast du ja mal testweise mit der Modifizierung der if-Schleife deaktiviert.

So, damit ich weiß, warum die Conpresso-Header ausgegeben werden, brauche ich noch die Werte einiger Variablen. Daher bitte ich dich die Zeile 565 (wieder in der Datei mod_guestbook/_include/guestbook.inc.php) durch die folgenden Zeilen zu ersetzen:

Code: Alles auswählen

        echo "header_is_printed: ".$header_is_printed."#\n";
        echo "nextview: ".$nextview."#\n";
        echo "data[nr]: ".$data['nr']."#\n";
        //header('Location: '.BASE_ABS.$gb_settings['directory'].'/index.php?rubric='.urlencode($cpoRubric['name']), true);
Wenn du das gemacht hast, dann schreibe mir doch bitte, was nach dem Eintragen ins Gästebuch angezeigt wird.

Gruß Matthias
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Insane
ConPresso-Newbie
Beiträge: 11
Registriert: 06.08.2007 15:21
Danksagung erhalten: 2 Mal

Beitrag von Insane »

Hier die benötigten Ausgabewerte:
header_is_printed: 1#
nextview: jump2index#
data[nr]: #
Gruß,
Insane
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Beitrag von Matthias V »

Danke für die Angaben.

Ich finde das komisch und kann es mir im Moment noch nicht erklären, woran es liegt. :gruebel:

Hast du die Gästebucheinstellungen nach dem Update des Gästebuchs noch einmal aufgerufen, sinnvolle Werte gewählt, und dann auf speichern geklickt? Das ist nämlich wichtig!

Kannst du nochmal vor die Zeile 487:

Code: Alles auswählen

switch ($nextview) {
folgendes schreiben:

Code: Alles auswählen

    echo "-header_is_printed: ".(isset($header_is_printed) ? 'true' : 'false')."#\n";
    echo "-nextview: ".$nextview."#\n";
und dabei die vorherige Code-Änderung beibehalten?

Und schreibe doch noch mal bitte, was alles ausgegeben wird.

Gruß Matthias
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Insane
ConPresso-Newbie
Beiträge: 11
Registriert: 06.08.2007 15:21
Danksagung erhalten: 2 Mal

Beitrag von Insane »

Auf der ersten Seite mit dem Formular kommt nun folgendes:
-header_is_printed: true# -nextview: form#
[FORMULAR]
-header_is_printed: true# -nextview: index#
Nach dem Absenden kommt jetzt das hier:
-header_is_printed: true# -nextview: confirm# -header_is_printed: true# -nextview: jump2index# header_is_printed: 1# nextview: jump2index# data[nr]: #
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Beitrag von Matthias V »

So etwas ähnliches habe ich mir gedacht, es wird also die Bestätigungsseite (confim) und danach der Sprung zum Index (jump2index) ausgeführt, was nicht sein darf. wahrscheinlich warst du nach dem Update des Gästebuchs noch nicht in den Gästebucheinstellungen.

Bitte wähle doch mal bei "Ansicht nach dem Eintragen eines Artikels:" und bei "Ansicht auf 'index.php':" eine Option aus und speichere es. Bei der ersten Option kannst du z.B. "Index-Seite des Gästebuchs mit allen Artikeln" wählen, dann können wir überprüfen, ob das weiterleiten zum Index richtig funktioniert.

Wenn dann noch diese Code-Änderungen rückgängig gemacht sind, dann sollte es funktionieren.

Oder noch besser: du gibst mir per PN Zugangsdaten, mindestens mit der Benutzerstufe Superuser.

Gruß Matthias
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Insane
ConPresso-Newbie
Beiträge: 11
Registriert: 06.08.2007 15:21
Danksagung erhalten: 2 Mal

Beitrag von Insane »

Keine Angst, ich lese Beschreibungen sehr genau, inklusive des Forenbeitrages hier in Sachen Update des Guestbooks - bevor ich an bestehenden Systemen arbeite. :)

Der Kern des Problems liegt woanders. Ich entwickle an einem bestehenden System weiter (genauer gesagt an einem System das vor mir bestand und nicht dokumentiert wurde). Mir ist gestern aufgefallen, dass in der Standard-Installation des Moduls keine _local_header.php vorhanden ist.

Im vorhandenen Modul wurde jedoch bereits so eine Datei angelegt und daran verschluckt sich das Modul jetzt, nach dem drüberinstallieren (davor wohl auch).

Ich habe die _local_header.php mal probeweise entfernt und siehe da, der Fehler war weg. Sprich nur mit global header funktioniert es, mit local header oder diesem local header hier nicht.

Leider wird die local header aber für ein Seitenmenü, Newsflash und Kalenderfunktion benötigt.

Any ideas?

Gruß,
Insane
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Beitrag von Matthias V »

Das finde ich komisch, dass es an der _local_header.php im Modulverzeichnis liegen soll. Aber wenn es ohne funktioniert, dann ist das ja gut. Allerdings ist es nicht gut, wenn du diese Datei für Flash benötigst.

Aber allgemein liegen bei Conpresso in den Rubrikverzeichnissen und auch in vielen Modulverzeichnissen nur _local_header.php.dist als kopiervorlagen. Das heißt, wenn jemand sich die Local_header-Datei modifiziert, sollte er das .dist entfernen, damit bei einem Update nicht die modifizierte Datei überschrieben wird.

Kopiere dir doch testweise die local-header Datei mit dem .dist so, dass du das .dist weglässt.

Du kannst auch in der Datei mod_guestbook/loadheaders.php die Variable $directory durch den Namen des Modulverzeichnisses ersetzen.

Wichtig ist in diesem Zusammenhang natürlich, dass es mindestens eine Rubrik gibt, welche das Gästebuchverzeichnis als Modulverzeichnis nutzt.

Ich weiß jetzt nicht, wie das Flash eingebunden wird (ich habe auch noch nie flash in Webseiten eingebaut), aber könnte es sein, dass bei der Einbindung irgendwelche PHP-Variablen verschluckt, oder zurückgesetzt werden, so dass im Vorfeld das Modul schon "ausgetrickst" wird?

Gruß Matthias
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Insane
ConPresso-Newbie
Beiträge: 11
Registriert: 06.08.2007 15:21
Danksagung erhalten: 2 Mal

Beitrag von Insane »

Hiho Matthias,

Das mit dem Flash war eher so gemeint, das dort die News Schlagzeilen aufgelistet sind. Also kein 'Flash' im Webdesigner Sinne.

Ich brauche die local header aus folgenden Gründen:
- dort wird das seitliche Menü definiert (über printnav etc)
- der Kalender und sein Standort werden dort eingebunden
- der Newsticker und seine Anzeige festgelegt

Also alles Sachen die auf jeder Seite zu sehen sein sollen. In die global header können diese Angaben nicht da es ein paar abweichende Rubriklayouts gibt.

Ziel ist es das Gästebuch so zu benutzen, dass der User nur ein Formular sieht und nach dem Absenden eine Bestätigung angezeigt bekommt. Ich als Admin sehe dann nur neue nicht freigegebene Einträge bei mir in der Artikelverwaltung.

Um das zu bewerkstelligen habe ich folgende Einstellungen vorgenommen:
- Entfernen von PHP/Java und Rubrikseite aus dem Artikeltemplate (also die Templatevorlagen für diese Bereiche)
- festgelegt das das Formular vor den Artikeln angezeigt wird
- nach dem Absenden soll nur die Sendebestätigung angezeigt werden (das link2edit möchte ich nicht)
- die Artikel werden noch nicht freigegeben dh. man bekommt nach dem Absenden zwei Zeilen Text zu sehen
- eine Rubrik für das Gästebuchmodul wurde ebenfalls angelegt und in die Navigation eingepflegt

Außerdem habe ich folgenden PHP Teil aus einem div Abschnitt auskommentiert (in local header php, nicht dist!):

Code: Alles auswählen

	<?php
			if ($pagetype=='index') {
			    echo '<a href="detail.php?rubric='.$cpoRubric['name'].'&action=enter">Neuen Eintrag hinzufügen</a><br /><br />';
			}
			?>
Damit ich keinen Link zum Eintragen über dem Eingabebereich zu sehen bekomme.

Ich weiss jetzt nicht inwiefern dieser Link falsch ist, oder der neue Link aus der local header dist reinmüsste.

Das ist in etwa mein Vorhaben. Vielleicht wird jetzt ein gravierender Fehler ersichtlich den ich beim Einpflegen gemacht habe?

Achso ich habe deinen Vorschlag ausprobiert, also eingestellt das die Indexseite mit allen Artikeln angezeigt wird nach dem Eintragen. Dann kommt der Fehler nicht, oder wird nicht gezeigt.

Das Problem besteht eigentlich nur wenn ich möchte das nach dem Eintragen einfach eine Bestätigung angezeigt wird, sonst nichts, kein Zurück-Link, nichts.

Gruß,
Insane
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Beitrag von Matthias V »

Eigentlich kann ich an dem Vorgehen nichts falsches erkennen.

Du kannst den Link auch komplett raus nehmen, er steht ja nochmal in der .dist und im Handbuch/Online-Hilfe zum Gästebuch.

Ich weiß allerdings nicht inwieweit das ein Problem ist, dass die beiden Template-Teile leer sind.

UND was ich komisch finde, dass die Fehlermeldung gerade dann kommt, wenn du die Bestätigungsseite angezeigt haben möchtest. In diesem Fall werden gar keine Header-Informationen geändert! Die Fehlermeldung darf nicht kommen!! Ich kann es aber nochmal genau bei mir nachspielen und ausprobieren.

Du kannst für dieses Vorhaben aber auch das mod_form benutzen, was Markus hier mal vorgestellt hat, allerdings befindet es sich nur im Beta-Stadium und es gibt noch keine Lizensschlüssel zur dauerhaften Nutzung. (Jedenfalls hat Markus soweit ich weiß immer nur Testschlüssel verteilt)

Aber eigentlich müsste es auch mit dem Gästebuch funktionieren. ... komisch
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Beitrag von Matthias V »

Also bei mir funktioniert es alles so, wie du es beschrieben hast.

Du kannst ja nochmal die Dateien aus dem mod_guestbook.zip-Archiv nochmal übertragen, vielleicht gab es bei der Übertragung Probleme, oder?

Nimm mal das Template für die Rubrikseite / Indexseite, da wird dir nur etwas auf der Bestätigungsseite angezeigt, aber nicht alle vorhandenen Artikel:

Code: Alles auswählen

<!-- ifSet: link2gb; --><!--Gästebuch Einträge anzeigen-->

<table border="1">
<tr><td colspan="2">
<a name="<!-- Value: articlenr -->"></a>
</td></tr>
<tr><td>Datum:</td><td><!-- Value: pub_date; --></td></tr>
<tr><td>Name:</td><td><!-- Value: Author; name; --></td></tr> <!-- /ifSet -->
<!-- ifSet: link2gb; --><!-- ifSet: authoremail; --><tr><td>E-Mail:</td><td>
<a href="<!-- Value: author_mod_contact; email; --><!-- ifNotSet: author_mod_contact; -->mailto:<!-- Value: Author; email_encode; --><!-- /ifNotSet -->"><!-- Value: Author; email_antispam; --></a>
</td></tr><!-- /ifSet --> <!-- /ifSet -->
<!-- ifSet: link2gb; --><!-- ifSet: Homepage; --> <tr><td>Homepage:</td><td><!-- url: Homepage; --></td></tr><!-- /ifSet --> <!-- /ifSet -->
<!-- ifSet: link2gb; --> <tr><td>Titel:</td><td><!-- Value: Title; --></td></tr>
<tr><td>Besuch:</td><td><!-- Text: Besuch; --></td></tr>
<tr><td>Nachricht:</td><td><div class="abbc"><!-- Text: Nachricht; nl2br; strip_tags; abbc;--></div></td></tr>
</table> <!-- /ifSet -->
Gruß Matthias

P.S. ausschlaggebend bei diesem Template sind die <!-- ifSet: link2gb; -->, denn diese sind nur auf der Bestätigungsseite wahr.
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Insane
ConPresso-Newbie
Beiträge: 11
Registriert: 06.08.2007 15:21
Danksagung erhalten: 2 Mal

Beitrag von Insane »

Hallo Matthias,

es lag tatsächlich an der local header. Ich habe dort folgende Zeile auskommentiert:

include_once("../_include/startfuncs.inc.php");

Ich bin mir nicht ganz sicher wozu die dort Nütze ist. Genausowenig wie bei den darauffolgenden:

include_once("../_include/function.inc.php");
include_once("../_include/connect.php");

Auf jeden Fall hat das die Problematik behoben (oder verborgen). Die Problematik mit dem Captcha hab ich in dem anderen Thread gepostet.

Gruß
Insane
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Diese 3 Dateien haben mit ConPresso nichts zu tun.

Offensichtlich ein Fremdsystem, das aber möglicherweise gleiche Variablen oder Klassen benutzt und somit Fehler provoziert.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Antworten