header-Problem

Hallo zusammen.
Ich komme (wie so mancher) frisch von Funpic, da deren Probleme einfach nur nerven (wie nicht funktionierende mail-funktion).
Ich habe dort schon eine Page erstellt (html - php -mysql), die ich nun für bplaced anpassen wollte.
Allerdings habe ich festgestellt dass es einen kleinen Unterschied zwischen Funpic und bplaced gibt…und zwar diesen

Ich habe so ziemlich überall (zB beim eigens erstellten Gästebuch) header() oder beim Login setcookie().
Davor kommt logischer Weise immer ein Formular (Gästebucheintrag, Logindaten usw.)
Bisher habe ich dann eben immer mit betätigen eines Buttons ein paar if’s usw. und am Schluss, wenn alles passt ein header() zu der nächst-gewünschten Seite.

Bei funpic kein Problem, hier geht garnichts mehr :frowning:

Dazu muss ich erwähnen, ich benutze das “2 Spalten Layout” (http://tut.php-quake.net/de/layout.html), sprich eine index.php die alle anderen Seiten über $_GET() einfügt.

Ich suche nun seit 2 Tagen eine einfache Möglichkeit, das Problem zu beheben ohne eine ganz neue Seite schreiben zu müssen, aber ich komme einfach auf keinen grünen Zweig.
Also kann mir jemand helfen bevor ich verweifel?

mfG Chiller

[quote=“Chiller”]Ich habe so ziemlich überall (zB beim eigens erstellten Gästebuch) header() oder beim Login setcookie().
Davor kommt logischer Weise immer ein Formular (Gästebucheintrag, Logindaten usw.)[/quote]
Das ist nicht “logisch” - bzw. nur dann, wenn man unsaubere Scripte schreibt.

Vernünftige Scripte werden nach dem EVA-Prinzip geschrieben - und damit hättest du dieses Problem gar nicht.

output_buffering aktivieren - das fängt die vorher gemachten Ausgaben erst mal ab, so dass noch “zwischendrin” Header gesendet werden können.

Wenn du jetzt diese schnelle “Lösung” wählst - dann aber bitte beim nächsten Script gleich von Anfang an sinnvoll vorgehen.

[code]













Benutzer: Kennwort:
<?php if(isset($_POST['Absenden'])){ if($name == "" or $pass == ""){ echo "


Bitte beide Felder ausfüllen!
\n"; } else{ $sql = "SELECT Username,Passwort,freigeschalten FROM User;"; $result = mysql_query($sql) OR die(mysql_error()); if(mysql_num_rows($result)){ while($row = mysql_fetch_assoc($result)) { if(($name == $row['Username']) and ($pass == $row['Passwort']) and ($row['freigeschalten'] == "ja")){ setcookie("user", $name, time()+(60*60*24*7)); setcookie("eingeloggt", "ja", time()+(60*60*24*7)); header("Location: index.php?page=1"); } } echo "


Entweder Name oder Passwort sind falsch oder sie wurden noch nicht freigeschalten!
\n"; } } }

if(isset($_POST[‘reg’])){
header(“Location: index.php?page=3a”);
}
?>[/code]
Dies ist zB mein momentanes Login-gebastel, welches wie gesagt von der index.php eingebunden wird.
Wenn ich dort was eingebe und auf submit gehe kommt nur “Bitte beide Felder ausfüllen!”, obwohl ich das ja habe.
Und wenn es funktionieren würde, wäre ich wieder bei dem alten Fehler

setcookie("user", $name, time()+(60*60*24*7)); setcookie("eingeloggt", "ja", time()+(60*60*24*7)); header("Location: index.php?page=1");
Weil hab ja html-Code davor.
Ist das echt so mies programmiert?

Das liegt an der Nichtberücksichtigung von register_globals=off.

In der Zeile darüber ist der Zugriff auf ein Formularparameter ja noch korrekt - also passe auch die nächsten entsprechend an.

[quote]Weil hab ja html-Code davor.
Ist das echt so mies programmiert?[/quote]
Ja.

Hm ja, ich weiß es nicht besser. Hab mir alles Wissen selbst zusammengesammelt un das wohl nich richtig :ps:

also „register_globals=off“ hab ich vergessen, das funktioniert jetzt deutlich besser :unamused:

Also mehr wie schämen kann ich mich auch nich :smiley:
Aber hat jemand nen Vorschlag wie ich jetzt die 3 header-Fehlermeldungen beseitigen kann?

output_buffering funktioniert nur bei php oder? Weil davor ja html steht…

Du nimmst das ganze HTML Zeugs und setzt es hinter das PHP Zeugs, das müsste grob gehen…

Hm wenn’s nur die Seite wär ja, aber das Ganze gepostete wird ja in der index.php includiert.
Und davor kommen diverse div-Elemente, in welche die include eingebunden is.

[code]<?php
include “includes/load.php”;
?>

Chillers Page
             <div id="all">
                     <ul id="Navigation">

Navigationsplatzhalter

                     <div id="page">
                             <div id="text">
                                     <?php
                                             if(isset($_GET['page']) AND isset($dateien[$_GET['page']])) {
                                                     include $dateien[$_GET['page']];
                                             }
                                             else {
                                                     include $dateien['1'];
                                             }
                                     ?>
                             </div>
                     </div>
             </div>
     </body>
[/code]

Nein, es bezieht sich auf sämtliche Ausgaben eines Scriptes ab dem Zeitpunkt, wo es aktiviert wird.

Danke! Genau diese Info hab ich gebraucht :hail:
Ganz an den Anfang und ganz ans Ende von index.php und alles läuft.
Der Rookie dankt 1000fach