Antworten auf deine Fragen:
Neues Thema erstellen

TinyMCE und header()

emtrion

Nicht mehr ganz neu hier

Hallo zusammen,

ich nutze den TinyMCE für ein Eingabeformular. Beim Abschicken des Formulars rufe ich wieder die gleiche Seite auf um dann eine Fehlerprüfung der Eingaben zu machen und wenn kein Fehler auftritt werden die Daten in eine Datenbank geschrieben. Bei erfolgreichem Eintragen die Datenbank wird durch header('Location: XXX'); auf die Übersichtsseite gesprungen.

Dies hat alles prima funktioniert solange ich den TinyMCE nicht eingebunden hatte. Mit TinyMCE bekomme ich folgende Fehlermeldung:

Warning: Cannot modify header information - headers already sent by (output started at /.../includes/tinyMCEsimple.php:11)

Kennt das Problem jemand? Wie könnte ich es geschickt umgehen?

Grüße,
Stephan
 

Robbyn-

PHP / Flex Programmierer

AW: TinyMCE und header()

Du kannst header nicht nach Ausgaben senden! Sobald du in PHP per "echo" oder einfach nur mit HTML was ausgibst, kannst du header("...") nicht mehr verwenden.

Mögliche Lösung: Output-Buffering:
ob_start(); am anfang einfügen
Und ganz am Ende des Scripts: ob_end_flush(); Dann sollte es gehen.
 

emtrion

Nicht mehr ganz neu hier

AW: TinyMCE und header()

Du kannst header nicht nach Ausgaben senden! Sobald du in PHP per "echo" oder einfach nur mit HTML was ausgibst, kannst du header("...") nicht mehr verwenden.

Ah, gut zu wissen. Das könnte meine Probleme vor ein paar Wochen erklären! :)
Aber was genau funktioniert dann nicht mehr. Ich hab grad gesehen, dass ich vor dem header() ein paar debugausgaben hatte. Der header() Befehl hat aber dennoch funktioniert.

Ich hab jetzt aber meine TinyMCE Initialisierung einfach weiter nach unten verschoben, damit dieser erst kurz vor dem Formular initialisiert wird. Jetzt funktioniert es. (Hätte ich eigentlcih auch selbst mal drauf kommen können :kopfpatsch:)

Grüße,
Stephan
 
Zuletzt bearbeitet:

Robbyn-

PHP / Flex Programmierer

AW: TinyMCE und header()

Naja, der header("Location: ...") legt fest das der Browser umgeleitet wird auf eine andere Seite, das Problem dabei ist, das der Code der danach folgt auch noch ausgeführt wird. Ich habe mir angewähnt nach einem header("Location: ...") ein exit; zu machen, damit solche Probleme nicht auftauchen.

Wenn du den PHP-Fehler “Cannot modify header information” gerne vermeiden möchtest, sollten keine Leerzeichen, Texte oder anderen HTML-Code vor dem Header setzen. Umgehen kann man den Fehler wie schon erwähnt mit dem Ausgabepuffer ob_start() und ob_end_flush().

Kleiner Tipp noch am Rande, eine PHP-Fehlermeldung ist auch eine Ausgabe und kann auch zu solch einen Fehler führen.

Wieso dies so ist? Weil du den header Modifizierst und ein header steht, wie das Wort schon sagt, im Kopf Bereich eines jeden Codes. Vorher durf also keine Ausgabe statfinden, da die Modifikation nicht mehr alle betrifft.
 

emtrion

Nicht mehr ganz neu hier

AW: TinyMCE und header()

Ja, das mit dem exit; hab ich damals auch rausgefunden und hab mir das inzwischen auch angewöhnt. :)

Wenn ich jetzt wirklich keinerlei Ausgaben vor header() machen darf, dann ist mein ganzer Seitenaufbau so nicht machbar.
Ich habe eine index.php in der auch der HTML-Header steht. In der includiere ich dann meinen ganzen Content. Wenn ich jetzt z.B. neuer_eintrag.php includiere, dann hab ich darin etwas html-code z.B. ein Formular, darüber hab ich aber immer mein PHP-Code für die POST-Abfrage in dem dann auch umleitungen mit header() sein können.

Ich müsste dann also meine Inlcudes in zwei Dateien aufteilen (HTML und PHP) und diese an unterschiedlichen Stellen in der index.php einbinden.
Das dies so gemacht wird hab ich persönlich aber noch nie so gesehen...

Bis auf die TinyMCE Geschichte hab ich mit dieser Struktur auch noch keine Porbleme habt. Ich wüsste im Moment auch gar nicht ob ich alle Funktionen auf so eine neue Art der Struktur umsetzen könnte (mal ganz abgesehen vom Zeitaufwand).
 

Robbyn-

PHP / Flex Programmierer

AW: TinyMCE und header()

Wieso nicht? Ist doch eigentlich sehr simpel. PHP wird dort ausgeführt wo du es platzierst und wenn du PHP über alle HTML Tags platzierst, wird es auch über alle HTML Tags ausgeführt womit du keine Probleme mehr mit solchen Fehlern haben solltest.

Das du das so noch nie gesehen hast wundert mich. Aber wie du schon richtig erkannt hast, sollte man PHP und HTML voneinander trennen. Sowas kann man mit fertigen Frameworks wie z.b. SMARTY machen.

Ich habe eine index.php in der auch der HTML-Header steht. In der includiere ich dann meinen ganzen Content. Wenn ich jetzt z.B. neuer_eintrag.php includiere, dann hab ich darin etwas html-code z.B. ein Formular, darüber hab ich aber immer mein PHP-Code für die POST-Abfrage in dem dann auch umleitungen mit header() sein können.

Wenn du wirklich auf Nummer sicher gehen willst, immer den PHP Code am Kopf jeder Datei (nicht includierten Datei) platzieren. Ich weiß ist vielleicht etwas schwierig wenn man bedenkt ein ganzes Projekt so zu strukturieren aber ist der sauberste Weg.

Als Beispiel:

PHP:
<?php
//new_formular.php PHP Code
....

//new_editor.php PHP Code
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Unbenanntes Dokument</title>
</head>

<body>
<?php
require_once("new_formular.php");
require_once("new_editor.php");
?>
</body>
</html>
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: TinyMCE und header()

Wenn ich jetzt wirklich keinerlei Ausgaben vor header() machen darf, dann ist mein ganzer Seitenaufbau so nicht machbar.

ob_start() und , wie schon mehrmals erwähnt.

Vergleiche folgendes:
PHP:
<html>
<?php
echo "bla";
?>

<?php
if(true) {
    header("Location: http://www.google.de");
}
?>
</html>
PHP:
<?php
ob_start();
?>
<html>
<?php
echo "bla";
?>

<?php
if(true) {
    header("Location: http://www.google.de");
}
?>
</html>
<?php
ob_end_flush();
?>


Duddle
 

emtrion

Nicht mehr ganz neu hier

AW: TinyMCE und header()

Hmm, mal sehen ob ich es richtig verstanden hab:

Duddles erstes Beispiel gibt das echo aus und leitet dann weiter, Problem ist ich hab ne Ausgabe vor dem header(). Das zweite Beispiel korrigiert die Reihenfolge, gibt aber dann auch erst echo und leitet dann weiter weil der header() Befehl erst ausgeführt wird wenn die komplette Seite geladen ist?

Um Ladezeiten zu sparen müsste ich nach dem header() gleich noch ein exit; einbauen.

Ich entspreche mit dem ersten Beispiel nicht der Spezifikation. Funktionieren tut es bei mir aber dennoch ohne Probleme. Was können denn wenn ich es so "falsch" belasse für Probleme auftreten? Muss ich zwingend jetzt alles umbauen?

Würde es ausreichen einfach in der index.php gleich zu Beginn das ob_start() und am ende das flush einzubauen?
 

Robbyn-

PHP / Flex Programmierer

AW: TinyMCE und header()

Lies dir bitte dies



durch und halte dich auch daran. Das due diese PHP Befehle am Anfang und Ende platzierst ist keine Lösung, stelle einfach deine Programmierschreibweise um und du wirst diese Probleme nicht mehr haben.
 

emtrion

Nicht mehr ganz neu hier

AW: TinyMCE und header()

Danke, hab ich inzwischen alles kapiert und bin auch voll auf eurer Seite, dass man das so machen sollte! Der Fehler "headers already sent" konnte ich inzwischen ja auch lösen!

ABER: Die Seite ist nun kurz vor der Veröffentlichung und besteht aus über 200 Dateien (ohne diverse Plugins). Dies jetzt noch umzubauen wäre ein echtes Problem. Deshalb wollte ich nun nur noch wissen was für Probleme ich mir damit einfangen könnte. Ich bekomme aktuell ja keine Fehlermeldungen und die Seite funktioniert einwandfrei.

"Nur weil man es eben so macht" ist mir im Moment zu wenig um alles umzubauen. Beim nächsten Projekt wird das natürlich anders umgesetzt.
 

Robbyn-

PHP / Flex Programmierer

AW: TinyMCE und header()

Wir haben dir ja auch keinen Befehl gegeben dies in deinem jetzigen Projekt alles so umzubauen, es wäre eben nur sauberer. Wenn alles so funktioniert, dann belass es so wie es ist. Eben nur beim nächten Projekt beachten das du deine Technik änderst.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben