Avatar billede kongfjong Nybegynder
27. februar 2005 - 00:33 Der er 16 kommentarer og
1 løsning

Undgå at header giver problemer

Jeg har en fil, fil1, der på et tidspunkt sender en header.

Denne fil, er inkluderet i en anden fil, fil2, som indeholder noget metainfo og andre html-tags. Hvordan undgår jeg at den laver fejl, fordi fil2 sender output før den kalder headeren?

Fil2, hvor fil1, bliver inkluderet, ser således ud:

<?php
session_start();
print "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">";

print "<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">
<title>hjemmeside.dk
</title>
<link rel=\"stylesheet\" type=\"text/css\" href=\"css/style.css\">
</head>";

print "<div id=\"center\">";
include("loginIndhold.php");
//    include("rightmenu.php");
//    include("topbillede.php");
//    include("box.php");
//    include("leftmenu.php");

print "</div>";

print "</html>";
?>
Avatar billede kongfjong Nybegynder
27. februar 2005 - 00:35 #1
Skal lige siges, at den del jeg skrev med:

include("loginIndhold.php");
//    include("rightmenu.php");
//    include("topbillede.php");
//    include("box.php");
//    include("leftmenu.php");

rent faktisk ser således ud:

include("topbillede.php");
include("box.php");
include("leftmenu.php");
include("loginIndhold.php");
include("rightmenu.php");
Avatar billede mr_bacardi Nybegynder
27. februar 2005 - 00:40 #2
Har ikke selv haft brugt denne løsning, eller prøvet den, men vidste jeg havde set den før, så fandt den lige igen:
Du kan gemme alt i en buffer på serveren, dette gøres med:
http://dk2.php.net/manual/en/function.ob-start.php
Så sendes headers som de første, og alt andet bliver gemt i bufferen, og så sender du det med:
http://dk2.php.net/manual/en/function.ob-end-flush.php
Læs om dem ;)
Avatar billede hmortensen Nybegynder
27. februar 2005 - 07:46 #3
Hvad skal din header gøre ? sender brugeren til en anden side ?
Avatar billede kongfjong Nybegynder
27. februar 2005 - 11:06 #4
Ja
Avatar billede hmortensen Nybegynder
27. februar 2005 - 11:07 #5
Så kald en side hvor designet ikke bliver inkluderet.
Avatar billede kongfjong Nybegynder
27. februar 2005 - 11:26 #6
Hvordan mener du?
Avatar billede mr_bacardi Nybegynder
27. februar 2005 - 11:35 #7
Du kan også (Hvis du ikke vil bruge den overstående metode, som dog anbefales), gøre sådan her:
I stedet for: header("Location: nyfil.php");
Bruge: die("<script>location.replace('nyfil.php');</script>");
Avatar billede hmortensen Nybegynder
27. februar 2005 - 11:39 #8
Normal måde at gøre det:

Side med design og form --> Send data til anden side uden design.
Her behandles data, og der redirectes til side med det design.

På den måde vil du aldrig opleve header fejl.
Avatar billede kongfjong Nybegynder
27. februar 2005 - 11:40 #9
Okay.

Mht. hmortensens forslag, så er min side bygget sådan op, at i hvert eneste link i hovedmenuen, indgår designet. Dvs. at kalde man fx Login-menupunktet, kommer man til login.php, som indeholder designet, altså:

include("topbillede.php");
include("box.php");
include("leftmenu.php");
include("loginIndhold.php");
include("rightmenu.php");

I index.php hedder det så bare:

include("topbillede.php");
include("box.php");
include("leftmenu.php");
include("indhold.php");
include("rightmenu.php");

Jeg ved ikke om I kan se strukturen?

Så jeg synes ikke rigtigt jeg kan se andre måder at gøre det på. For kalder jeg login.php uden at have designet inkluderet i den, så ryger designet jo;)
Avatar billede hmortensen Nybegynder
27. februar 2005 - 11:42 #10
Ja, men når du så sender login oplysninger fra login form, så send dem til fx. login_check.php, som ikke har noget design.
Avatar billede kongfjong Nybegynder
27. februar 2005 - 11:44 #11
Okay. Det er nok fordi jeg er ny til php, men kan du forklare lidt mere omkring hvordan det med at sende data til en anden side uden design, og se redirecte til den side med design? Er det noget med at opbygge en query-streng i url'en eller hvordan?
Avatar billede kongfjong Nybegynder
27. februar 2005 - 11:57 #12
måske skal jeg forklare det lidt bedre.

Jeg har en side, login.php, der indeholder designet:

include("topbillede.php");
include("box.php");
include("leftmenu.php");
include("loginIndhold.php");
include("rightmenu.php");

loginIndhold.php tester så, om man er logget ind. Er man ikke logget ind, tester den så, om man har trykket på en af knapperne i login-formularen. Hvis ikke så viser den formularen, og ellers inkluderer den et af tre forskellige scripts, alt efter hvilken knap man har trykket på.

Har man trykket på Login-knappen i login-formularen, inkluderer den en fil, som tjekker på om brugernavn og kodeord findes, og om de hænger sammen. Gør de det, sættes en session-variabel, og man sendes, via den famøse header, til index.php.
Avatar billede hmortensen Nybegynder
27. februar 2005 - 11:57 #13
Ok, et simpelt eksempel.

----login.php----

<form action="check_login.php" method="post">
    Brugernavn:
    <input type="text" name="brugernavn">
    Kodeord:
    <input type="password" name="kodeord">
    <input type="submit">
</form>



----check_login.php----

<?php

if (isset($_POST['brugernavn'], $_POST['kodeord']) && !empty($_POST['brugernavn']) && !empty($_POST['kodeord']))
{
    if ($_POST['brugernavn'] == "test" && $_POST['kodeord'] == "hest")
    {
        header("location: privat.html");
        exit;
    } else {
        header("location: login.php");
        exit;
    }
} else {
    header("location: index.php");
    exit;
}

?>


----privat.html----

<h1>Du er nu på den hemmelige side</h1>


Der er dog ingen sikkerhed i det her login script. Blot et eksempel.
Avatar billede kongfjong Nybegynder
27. februar 2005 - 12:03 #14
Okay. Men jeg har så et problem. Hvis ikke jeg inkluderer designet i login.php, så forsvinder det fra siden....
Avatar billede hmortensen Nybegynder
27. februar 2005 - 12:04 #15
Lig dit login check i en anden fil.....
Avatar billede kongfjong Nybegynder
27. februar 2005 - 12:18 #16
Ok... Nu tror jeg at jeg fatter det. Tak for din tålmodighed:)
Avatar billede kongfjong Nybegynder
21. marts 2005 - 22:49 #17
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester