Datenbankeintrag und dann zu einer anderen Seite gelangen

Phips_CH

Mitglied
Hallo Zusammen

Ich möchte mit Dreamweaver ein Formular machen, um einen Datenbankeintrag zu machen. Das Funktioniert auch.
Nur wenn ich danach zu einer weitere Seite gelangen möchte, erhalte ich eine Fehlermeldung das in einer Zeile etwas nicht stimmt.

Code:
  $insertGoTo = "postendienstanfrage_2.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));

in der letzten Zeile sei ein Fehler.
Die Fehlermeldung im Browser lautet dann:
==>Warning: Cannot modify header information - headers already sent by (output started at ....Pfad/htdocs/index.php:5)

Die Seite postendienstanfrage_2.php ist im selben Ordner wie die Seite mit dem Formular.

Was mach ich da falsch?

Bei einem Formular, wo ich einen Datensatz ändere, funktioniert das wunderbar auf diese weise. nicht aber, wenn ich einen Datensatz neu einfüge.
 
Der Fehler sagt aus das der Header bereits gesendet wurde. Ein Header wird gesendet wenn eine Ausgabe stattfinden, auch wenn es nur ein Leerzeichen ist.
Was auch sein kann das z.B. ein "Notice" ausgegeben wird bevor du den Header abschickst. Was auch diesen Fehler auslösen würde.
 
Ich hab jetzt schon einiges ausprobiert. aber den Fehler hab ich immer noch. Ist der denn in dem File zu suchen wo er auch angezeigt wird, oder in dem File, die neu angezeigt wird? resp, die Seite, die nach dem DB-Eintrag aufgerufen wird?

Ich hab den Code mit Dreamweaver erzeugt, was ich komisch finde, wieso erhalte ich den Fehler? ist das ein Fehler des Programms?
 
In den Zeilen 5 und 6 bei index.php steht:
Code:
<script src="javascripts/prototype.js" type="text/javascript"></script>
<script src="javascripts/scriptaculous.js" type="text/javascript"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Ich hab nun die Seite so aufgerufen. also ohne index.php auch da kommt der Fehler.

Wenn ich einen Datensatz aktualisiere, dann funktioniert es.
 
Wenn du HTML-Code in deiner index.php hast, ist das genau wie wenn du etwas über echo ausgibst. Du sendest damit Daten vom Server an den Client. In dem Falle kann die Funktion header() keine weiteren HTTP-Kopfdaten senden, da diese dann natürlich schon raus sind. Die Kopfdaten kommen vor den Nutzdaten (HTML, Video-/Audio-Stream, etc). Wenn du keine explizit sendest, macht das PHP implizit sobald du das erste mal was "ausgibst". HTML ist auch wie eine Ausgabe (wie schon zuvor geschrieben).

EDIT: Und eine alternative. Output-Buffering
 
Langsam kommt etwas Licht ins Dunkle. aber durchblicken tu ich noch lange nicht ganz.
Wie ich das verstehe, verwende ich irgendwo ob_start() und dann ob_end_flush()
Aber wo verwende ich denn ob_start() resp. ob_end_flush()?
 
ob_start() sollte man so früh wie möglich aufrufen und ob_end_flush() so spät wie möglich. Wenn du das include()-Konzept für deine Seite verwendest, und quasi immer nur die index.php aufgerufen wird, dort drinnen dann entschieden, welche Seite dargestellt werden soll, ist die Integration recht einfach. Erzähl mal was über die Struktur deiner Seite.
 
Ich hab eine Index-Seite mit wo alle Frames mit Logo, Navigation etc. sind und im Hauptframe werden dann die einzelnen Seiten dargestellt.

aber wende ich das ob_start() und ob_end() auf der Index-Seite oder auf meiner Seite mit dem Formular an?
 
Zurück