header Befehl?

BlauerCorsar

Grünschnabel
Moin.

Da ich jetzt ja auf eine neuere Version PHP umgestiegenbin, muss ich ja meine Scripte auf diese Superglobals umbauen, is auch soweit kein Problem, nur bei Sachen die ein Eingabeformular haben, treten Probleme mit dem header-Befehl auf.
Soweit ich gelesen habe darf vor dem header nichts stehen was der Browser auch nur irgendwie darstellen kann, nur was mach ich denn dann mit nem Eingabeformular, z.B.
PHP:
<?php
mysql_connect("localhost","xxx","xxx");
mysql_select_db ("xxx") or die(mysql_error());
function DoForm()
{
    print '<form action=newsblog.php>';
    print '<table>';
    print '<tr><td align="left"><font size="2">Topic:</font></td><td align="left"><input type=text name=topic class="form1" width=20></td></tr>';
    print '<tr><td align="left"><font size="2">Kommentar:</font></td><td align="left"><textarea name=text class="form1" cols=20 rows=5></textarea><br></td></tr>';
    print '<tr><td align="left">&nbsp;</td><td align="left"><input type=hidden name=cmd value=enter><input type=submit name="button1" value=Eintragen class="button1"></td></tr>';
    print '</table>';
    print '</form>';
}

/*------------------------------------------------------------------------------------------------------*/
function InsertData( $topic, $text)
{
    /*
        $topic = $_REQUEST['topic'];
        $text = $_REQUEST['text']; */

        if (($_REQUEST['topic']=="") OR ($_REQUEST['text']==""))
        {
            header("Location: newsblog.php");
            print "<b>Ups...da fehlt wohl was?!</b><br>";
        }
        else
        {
            $insert = "insert into blog ( datum, topic, text) values( NOW(), '$topic', '$text')";
            $query = mysql_db_query( "blauercorsar", $insert);
            if( ! $query) {print "<b>Fehler beim eintragen: $insert </b><br>";}
            else {header("Location: newsblog.php");}
        }

}
/*------------------------------------------------------------------------------------------------------*/
function ListContent()
blablabla
}
/*------------------------------------------------------------------------------------------------------*/
print '<center><h4>&bull;&bull;&bull;News/Wissenswertes&bull;&bull;&bull;</h4><hr size=1>';
DoForm();
$cmd = $_REQUEST['cmd'];
if( IsSet( $cmd))
{
    InsertData( $topic, $text);
}
ListContent();
print_r($_REQUEST);
?>

Das Eingabefeld soll schon in der Seite bleiben, und auch oben, also steht es doch theor. immer vor dem header? Oder gibts da andere Lösungsmöglichkeiten?
Weiteres Problem könnte vllt sein (noch nicht getestet, da es ja noch nichtmal so richtig läuft) das dieses Script dann per div in eine Seite integriert wird, auch dort steht doch dann Zeug vor dem Befehl?!
Google & Co haben mir bisher nicht wirklich weiterhelfen können bei dem Prob...
 
Wieso setzt du nicht einfach die Verarbeitung der Daten und damit auch die Umleitung vor die Ausgabe des Forumlars?
 
Obwohl ich das auch nicht verstehen, warum du die Verarbeitung nicht einfach an die Spitze stellst, gibt es eine Funktion, die die Ausgabe in einem Puffer speichert und später ausgibt.

ob_start() und ob_end_flush()
ob_start() im PHP Manual

ob_start() startet die Pufferung und ob_end_flush gibt alle gepufferten Daten aus und beendet die Pufferung.

Wenn ich dir noch einen Tipp geben darf. Schreibe deine ganzen Funktionen in zweite PHP-Dateien und include diese dann. Dann ist dein Code nicht so aufgebläht und du findest dich eventuell besser zurecht.
 
Zurück