Problem mit POSt
Marc Metz
- php
Hi,
ich bin zur Zeit dabei ein Kommentarformular zu erstellen. Es funktioniert auch bestens.
http://www.cs-erweiterungen.de/scripts/viewcomments.php
Ich habe jedoch ein Problem:
Wenn man ein Kommentar schreibt werden die Dateien mit POST übertragen. Wenn man auf aktualisieren klickt nachdem ein Kommentar eingeschickt wurde, kommt immer eine Meldung: "Die Seite die sie ansehen wollen enthält Post Daten..."
Nun habe ich probiert, eine Weiterleitung zu machen (Ausschnitt von meinem Script:
if (!empty($_POST["Name"]) && !empty($_POST["Kommentar"])) {
$sql = "INSERT INTO kommentare " .
"VALUES ('', '$_POST[Name]', '$_POST[Home]', " .
"'$datum', '$_POST[Kommentar]')";
mysql_query($sql);
Header("Location: ".$_POST['Redirect']);
}
Dieser Teil wird ja ausgeführt, wenn auf Absenden geklickt wurde. Bei Redirect wird dann die Url eingefügt:
$_POST['Redirect']
Zum Beispiel: http://www.cs-erweiterungen.de/index.php?site=54
Leider bekomme ich immer diese Meldung:
Warning: Cannot modify header information - headers already sent by (output started at /home/www/web4/html/scripts/viewcomments.php:9) in /home/www/web4/html/scripts/viewcomments-script.php on line 32
...ich weiß nicht weiter
Hallo!
Warning: Cannot modify header information - headers already sent by (output started at /home/www/web4/html/scripts/viewcomments.php:9) in /home/www/web4/html/scripts/viewcomments-script.php on line 32
Das bedeutet, dass im Script "/home/www/web4/html/scripts/viewcomments-script.php" in Zeile 32 irgendetwas passiert, was bereits Daten ausspuckt.
Kannst du vl den Code von Zeile 32 posten?
Moin!
Warning: Cannot modify header information - headers already sent by (output started at /home/www/web4/html/scripts/viewcomments.php:9) in /home/www/web4/html/scripts/viewcomments-script.php on line 32
Das bedeutet, dass im Script "/home/www/web4/html/scripts/viewcomments-script.php" in Zeile 32 irgendetwas passiert, was bereits Daten ausspuckt.
Nein, der Output kommt aus Zeile 9 (output started at...). In Zeile 32 steht der Versuch, nach dem Output noch Header zu senden.
- Sven Rautenberg
Nein, der Output kommt aus Zeile 9 (output started at...). In Zeile 32 steht der Versuch, nach dem Output noch Header zu senden.
Achso ja, stimmt. Asche über mein Haupt :)
@Marc Metz
Wenn in Zeile 9 <?php
steht, was steht dann in zeile 1-8?
Nein, der Output kommt aus Zeile 9 (output started at...). In Zeile 32 steht der Versuch, nach dem Output noch Header zu senden.
Achso ja, stimmt. Asche über mein Haupt :)@Marc Metz
Wenn in Zeile 9<?php
steht, was steht dann in zeile 1-8?
Das hier:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Kommentar senden</title>
</head>
<body>
Hallo!
Das hier:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Kommentar senden</title>
</head><body>
Nun ja, Problem gelöst würde ich sagen. Sorge dafür, dass der PHP Code als erstes verarbeitet wird und erst dann die Ausgabe erfolgt (das beinhaltet auch dein "Das hier: ...") und dein Problem ist gelöst.
DANKE werde das sofort probieren.. hoffe das es geht. Melde mich dann nochmal
DANKE werde das sofort probieren.. hoffe das es geht. Melde mich dann nochmal
Habe jetzt das Header ganz nach oben geschrieben so hoch wie es nur ging... kam aber wieder das gleiche.
Ganze Scripts werden wohl nicht gerne gesehen.. aber ich weiß nicht, wie mir sonst jemand helfen soll.. habe es deswegen mal in einer Textdatei hochgeladen:
http://www.cs-erweiterungen.de/files/SCRIPT.txt
Hallo!
Habe jetzt das Header ganz nach oben geschrieben so hoch wie es nur ging... kam aber wieder das gleiche.
Wird die Datei irgendwo included o.ä.?
... habe es deswegen mal in einer Textdatei hochgeladen:
1.) Existiert diese Datei nicht.
2.) Kann man URLs zu Links machen mit [ link : deineURL ] oder [ link : deineURL @ title = deinOptionalerTitel ] alles ohne Leerzeichen
Hallo!
Habe jetzt das Header ganz nach oben geschrieben so hoch wie es nur ging... kam aber wieder das gleiche.
Wird die Datei irgendwo included o.ä.?
... habe es deswegen mal in einer Textdatei hochgeladen:
1.) Existiert diese Datei nicht.
2.) Kann man URLs zu Links machen mit [ link : deineURL ] oder [ link : deineURL @ title = deinOptionalerTitel ] alles ohne Leerzeichen
Sorry! Da hat irgendetwas mit dem Hochladen nicht geklappt.
[ link : http://www.cs-erweiterungen.de/files/SCRIPT.txt ]
Ja sie wird includet, aber ich habe auch probiert, es dort wo es includet wird nach ganz oben zu schreiben.
Hallo!
Ja sie wird includet, aber ich habe auch probiert, es dort wo es includet wird nach ganz oben zu schreiben.
Damit es funktionniert müsste es in der Datei "SEITE die Aufgerufen wird" wie du sie glorreich in der .txt genannt hast __GANZ AM ANFANG__ stehen.
Die besagt Datei müsste also so irgendwie aussehen:
<?php
// pliplaplo dein ganzer php code
// dein ereignis wo du eine andere seite haben willst kommt jetzt
if($dein_ereignis)
{
header('location: '.$deine_url);
exit;
}
// ganz viel pliplaplo
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Kommentar senden</title>
</head>
...
Verstehst du jetzt was ich mit __ganz oben / am Anfang__ meine? Es darf in keiner Datei (die includet wird oder die, welche jene Datei selber includen) KEINE AUSGABE erfolgen bevor du zur ensprechenden Zeile kommst.
Ach ja, bei deinem Include schreibst du einen __vollständigen__ HTML Code in einen anderen vollständingen HTML Code. Da wird der Validator aber nicht sehr glücklich sein.
Hast du dich überhaupt richtig in PHP eingelesen & -arbeitet?
hi,
Hast du dich überhaupt richtig in PHP eingelesen & -arbeitet?
Stellt sich die Frage überhaupt noch, wenn jemand zum zig-tausendsten Male mit der "Cannot modify header information"-Geschichte ankommt ...?
gruß,
wahsaga
Hallo!
Stellt sich die Frage überhaupt noch, wenn jemand zum zig-tausendsten Male mit der "Cannot modify header information"-Geschichte ankommt ...?
Man darf doch wohl noch an den Weihnachtsmann glauben :) (Auch wenn ich vor ca 12 Jahren herausgefunden habe, dass es das CHRISTKIND ist hehe)
Hallo!
Stellt sich die Frage überhaupt noch, wenn jemand zum zig-tausendsten Male mit der "Cannot modify header information"-Geschichte ankommt ...?
Man darf doch wohl noch an den Weihnachtsmann glauben :) (Auch wenn ich vor ca 12 Jahren herausgefunden habe, dass es das CHRISTKIND ist hehe)
OH LA LA très magnifique :)
Vielen Dank Snafu
Ich versteh zwar nicht ganz warum es jetzt auf einmal geht.. weil vorhin hatte ich es genau da hingeschrieben. ABER JETZT GEHTS!
Immerhin hab ich ein ganzes PHP BUCH durchgelesen mit 426 SEITEN. Header wurde darin nicht erwähnt. Das ich in der Includeten Datei das <html mit drin hatte war nen bisschen unüberlegt das stimmt.
Hallo!
Warning: Cannot modify header information - headers already sent by (output started at /home/www/web4/html/scripts/viewcomments.php:9) in /home/www/web4/html/scripts/viewcomments-script.php on line 32
Das bedeutet, dass im Script "/home/www/web4/html/scripts/viewcomments-script.php" in Zeile 32 irgendetwas passiert, was bereits Daten ausspuckt.
Kannst du vl den Code von Zeile 32 posten?
In Zeile 32 steht genau das:
Header("Location: ".$_POST['Redirect']);
In Zeile neun steht nur das:
<?php
Darunter steht dann das:
if (isset($_GET["admin"]) && $_GET["admin"] == "Passwort" || isset($_GET["Befehl"])) {
echo "<h3>Administrierbereich</h3>";
include("zugriff.inc.php");
$sql = "SELECT * FROM kommentare";
$result = mysql_query($sql);
while ($row=mysql_fetch_assoc($result)) {
echo "<div>[<a href='$_SERVER[PHP_SELF]?Befehl=$row[id]'>" .
"Eintrag löschen</a> ] ";
foreach ($row as $name => $key) {
echo "$key ";
}
echo "<br><br></div>";
}
}
if (isset($_GET["Befehl"])) {
$sql="DELETE FROM kommentare WHERE id='$_GET[Befehl]'";
if (mysql_query($sql)) {
echo "<p>Datensatz gelöscht -- bitte Reload wählen!</p>";
echo "<p><a href='$_SERVER[PHP_SELF]'>Ausloggen!</a></p>";
}
}
hi,
antworte bitt künftig direkt auf das Posting, auf dass du dich beziehst.
In Zeile 32 steht genau das:
Header("Location: ".$_POST['Redirect']);
In Zeile neun steht nur das:
<?php
Und _davor_ steht was?
Vor header hat _jegliche_ Ausgabe zu unterbleiben (oder muss abgefangen werden).
Alles ausserhalb des <?php ... ?>-Bereiches zählt als Ausgabe, und auch Leerzeichen/-Zeilen etc. sind Ausgabe.
gruß,
wahsaga
hi,
antworte bitt künftig direkt auf das Posting, auf dass du dich beziehst.
In Zeile 32 steht genau das:
Header("Location: ".$_POST['Redirect']);
In Zeile neun steht nur das:
<?phpUnd _davor_ steht was?
Vor header hat _jegliche_ Ausgabe zu unterbleiben (oder muss abgefangen werden).
Alles ausserhalb des <?php ... ?>-Bereiches zählt als Ausgabe, und auch Leerzeichen/-Zeilen etc. sind Ausgabe.gruß,
wahsaga
OKAY.. Davor steht das:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Kommentar senden</title>
</head>
<body>
Hallo
In Zeile 32 steht genau das:
Header("Location: ".$_POST['Redirect']);
In Zeile neun steht nur das:
<?phpUnd _davor_ steht was?
Vor header hat _jegliche_ Ausgabe zu unterbleiben (oder muss abgefangen werden).
Alles ausserhalb des <?php ... ?>-Bereiches zählt als Ausgabe, und auch Leerzeichen/-Zeilen etc. sind Ausgabe.OKAY.. Davor steht das:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
...
Was war an snafus Anmerkung "Sorge dafür, dass der PHP Code als erstes verarbeitet wird und erst dann die Ausgabe erfolgt" sowie an wahsagas oben zitierten Sätzen "Vor header hat _jegliche_ Ausgabe zu unterbleiben (oder muss abgefangen werden)." und "Alles ausserhalb des <?php ... ?>-Bereiches zählt als Ausgabe, und auch Leerzeichen/-Zeilen etc. sind Ausgabe." so unverständlich?
Sobald auch nur _ein_ zur Darstellung im Browser vorgesehenes Zeichen an jenen gesandt wurde, ist der Zug für header() abgefahren (Ausnahme ist die Pufferung des Outputs mit ob_start() und ob_end_flush()).
Wenn du vor jeglicher Ausgabe von für den Browser vorgesehenen Zeichen deine Prüfung mit eventuell vorgesehener Umleitung vornimmst und erst danach den HTML-Teil ausgibst, erledigt sich das Problem.
Beispiel:
<?php
if (isset($_POST["bla"]))
{
$blubb = "irgendwas";
}
else
{
header("http://www.example.com/trallalla.php");
}
?>
<DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Kommentar senden</title>
</head>
<body>
<!-- ... -->
Tschö, Auge
Hallo
Korrektur ("location" vergessen):
<?php
//...
else
{
header("location: http://www.example.com/trallalla.php");
}
?>
Tschö, Auge
--
Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
(Victor Hugo)
<dingdong /><dingdong /><toc /><toc /><toc /><shout>Florence!</shout>
[Veranstaltungsdatenbank Vdb 0.1](http://termindbase.auge8472.de/)