Avatar billede engaai Nybegynder
07. marts 2004 - 21:24 Der er 22 kommentarer

Header problem

Hej

Jeg er lidt i tvivl om hvornår header("location:path"); kan bruges.
I mit tilfælde, har jeg startet session øverst i mit script ( session_start(); )

Og længere nede på min side, har jeg brug for at der skal blive kørt en if sætning, som så skriver header("location:fejl.php");
Hvis den givende betingelse ikke er opfyldt. Men så er der noget med at der ikke må komme noget output før man bruger header, og det er i mit tilfælde umuligt. Er der noget jeg kan gøre?
Avatar billede erikjacobsen Ekspert
07. marts 2004 - 21:26 #1
Det er bestemt ikke umuligt - du strukturerer blot dit script med beregninger
først, og HTML til sidst. Put de ting der skal udskrives i variabler.
Avatar billede engaai Nybegynder
07. marts 2004 - 21:29 #2
tja... Det er ikke muligt at udskrive output, før <html> eller?
Avatar billede erikjacobsen Ekspert
07. marts 2004 - 21:32 #3
Jeg forstår ikke din sidste kommentar.

Men hvis du vil redirecte til fejl.php er der vel ingen grund til at
skrive noget på siden ud først. Find ud af om fejlen er der som det første
du gør. Mere er der ikke i det.
Avatar billede engaai Nybegynder
07. marts 2004 - 21:36 #4
nej, men hvis der ikke er fejl, skal den gøre noget hvori der indgår outputs!
Avatar billede erikjacobsen Ekspert
07. marts 2004 - 21:39 #5
Ja, selvfølgelig, og det er ikke noget problem. Du vil have lavet din
redirect lang tid før.
Avatar billede engaai Nybegynder
07. marts 2004 - 21:43 #6
havde nu tænkt at det skulle være i samme if sætning. F.eks:

?>
if(!isset($_REQUEST['tissetrold'])) {
    header("location:fejl.php");
} else {
    echo "Jada, du fik lov til at se den magiske tekst";
?>

<html>

// Indhold mellem de to html tags 
</html
 
Der vil jo i dette tilfælde komme output før <html> tagget. Er det ok, hvis ikke hvad bør jeg så gøre?
Avatar billede erikjacobsen Ekspert
07. marts 2004 - 21:51 #7
<?
if(!isset($_REQUEST['tissetrold'])) {
    header("location:fejl.php");
  exit;
}
?>

<html>
<head>...</head>
<body>
  Ja, Karl Børge, du slap ind din trissetold.
</body>
</html>
Avatar billede engaai Nybegynder
07. marts 2004 - 21:53 #8
nåh ja. Takker

Du ligger bare et svar
Avatar billede engaai Nybegynder
07. marts 2004 - 21:54 #9
Men hov!

Havde helt glemt, at mit problem er mere omfattende end som så :|
Det jeg gør, er at jeg includer en side, hvorpå header indgår. Den side bliver så includet i bodyen på en anden side, og der holder ovenstående metode jo ikke.
Avatar billede erikjacobsen Ekspert
07. marts 2004 - 21:57 #10
Lige præcis den konkrete realisering holder måske ikke. Men du kan stadig
holde beregninger og HTML adskilt, og bør gøre det for at lave dit
system overskueligt.
Avatar billede engaai Nybegynder
08. marts 2004 - 15:10 #11
Kan du give et eksempel på hvordan, når jeg skal bruge headers i den fil jeg includer, i min body?
Avatar billede erikjacobsen Ekspert
08. marts 2004 - 15:36 #12
Jeg kan vel ikke sige mere end jeg har gjort.

Du har ikke brug for headers i din HTML-kode, hvis du strukturerer koden korrekt.
Avatar billede engaai Nybegynder
08. marts 2004 - 15:45 #13
Den sidste kommentar, forstår jeg ikke helt.
I mit tilfælde har jeg en side, ( index.php ), hvorpå jeg inkulder alle sider, og alle mine sider linker til index.php.
Jeg bruger så $_GET til at finde ud af hvilket link brugeren har trykket på, og derefter hvilken side der så sksal inkluderes.

F.eks:

<a href="index.php?site=forside">Forsiden</a>
<a href="index.php?site=side2">Side 2</a>
<a href="index.php?site=side3">Side 3</a>

<?
if(isset([$_GET['site')) {
    $site = $_GET['side'];
} else {
    $side = "forside";
}

if($side == "forside") {
    include("forside.php");
} elseif($side == "side2");
    include("side2");
} 
//osv

Så har jeg en side som f.eks denne, som jeg inkluder:

<?

$id = $_GET['id'];

if(!isset($_SESSION['user'])) {
    include("needlogin.php");
    exit();

if(!isset($id)) {
    echo "du skal vælge et indlæg på <a href='index.php?site=forside>forsiden</a>";
} else {
    mysql_query("delete from nyheder where id='$id'") or die(mysql_error());
    header("location:index.php");
}

?> 

I det tilfølde, har jeg da ikke mulighed, for at bruge headers før er er udskrevet noget output.
Avatar billede engaai Nybegynder
08. marts 2004 - 17:45 #14
?
Avatar billede erikjacobsen Ekspert
08. marts 2004 - 18:38 #15
Jo, men du skal jo flytte rundt på det du gør. Hvis du ikke vil det, så er det
da rigtigt at du ikke kan stille så meget op.
Avatar billede engaai Nybegynder
08. marts 2004 - 19:14 #16
Jeg har prøvet at ligge min hjerne i blød, og tænke over en mulig løsning på problemet, med den realativt lille viden jeg har om php, men umiddelbart vil den ikke hoste op med nogen løsning. Kan du ikke prøve at give et eksempel, ud fra ovenstående kode, hvor der 'byttes om' på koden, således at header kan bruges?
Avatar billede erikjacobsen Ekspert
08. marts 2004 - 20:49 #17
Så kan du jo opgive det... Men jeg siger bare at du kan lave beregninger
før HTML-en kommer, og at det kræver en omstrukturering. Start med
at finde ud af hvad brugeren vil og om han må, og find så den side med
HTML han må se.
Avatar billede engaai Nybegynder
09. marts 2004 - 08:34 #18
Kunne man gøre brug af ob_start(); og ob_end_flush();?
Avatar billede erikjacobsen Ekspert
09. marts 2004 - 09:48 #19
Ja, selvfølgelig kan man det. Så kan man lave lige så meget ulæselig og
uoverskuelig spaghettikode man vil, og så virker det alligevel.

Men hvorfor ikke gøre dig selv den tjeneste at få lavet en god struktur i dit system?
Avatar billede engaai Nybegynder
09. marts 2004 - 13:48 #20
Jeg vil hellere end gerne lave en god struktur i mit system, men eftersom jeg kun har arbejdet med php i et par måneder, har jeg ikke særlig stor erfaring, og derfor svært ved det. Umiddelbart virker det med at include sider, ved at give links navne, som en god måde at strukturere sine sider, men den holder jo ikke helt, når jeg gerne vil  burge headers. Kunne du ikke give et eksempel på en smart måde at strukturere sine sider (bare et simpelt eksempel)?
Det kan godt være at det lyder som om jeg ikke er villig til at yde noget selv, men sådan er det bestemt ikke.
Avatar billede engaai Nybegynder
09. marts 2004 - 14:43 #21
Jeg kan sagtens forhøje med nogle point, hvis du ønsker!
Avatar billede engaai Nybegynder
09. marts 2004 - 17:24 #22
Det er meget godt at du siger:

"Ja, selvfølgelig kan man det. Så kan man lave lige så meget ulæselig og
uoverskuelig spaghettikode man vil, og så virker det alligevel.
Men hvorfor ikke gøre dig selv den tjeneste at få lavet en god struktur i dit system?"

Men er du ikke sød at give et eksempel, på hvordan jeg kan inkludere en fil, som indeholder headers, uden at der går galt. Eller i det mindste vise et eksempel på den 'bedre strukturerede kode' du sagde jeg burde lave?
For i øjeblikket står jeg ret stille med mit script, eftersomm jeg skal bruge headers, men ikke kan komme til det.
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