/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Header already sent
Fra : zeon


Dato : 30-08-02 08:39

Er der en måde at omgås "header already sent" problemet? Lad os sige man har
index.php, hvorfra man kan klikke sig videre til addpost.php, hvor man så
kan indtaste en post i systemet - altså en eller anden nyhed el.lign. Når
man har indtastet dataene og der er kørt et tjek på, at de forskellige forms
er udfyldt korrekt, ville jeg gerne at brugeren sendes tilbage til
index.php.

Jeg har så prøvet med:

header("Location: index.php"); EFTER at dataene er tilføjet i db'en, men
selvfølgelig får man problemer med "header already sent"..

herefter prøvede jeg at sætte følgende i toppen at scriptet inden der er
sendt output, dvs

if (isset($_POST[submit])) {
header("Location: index.php");
}

Dette virker skam også fint - brugeren sendes tilbage til index.php, men der
bliver ikke tilføjet noget til db'en

Er der en måde, at omgås det på, eller kunne jeg gøre noget smartere??

Takker!

/Thomas



 
 
Niels Andersen (30-08-2002)
Kommentar
Fra : Niels Andersen


Dato : 30-08-02 08:49

zeon wrote in <3d6f214a$0$636$ba624c82@nntp03.dk.telia.net>:
> Er der en måde at omgås "header already sent" problemet?

Lad være med at sende noget til klienten, før du er færdig med at skrive
headere.

Der står i fejlmeddelelsen hvor du starter med at sende til klienten.

--
Mvh.

Niels Andersen
(la nels. anersyn.)

zeon (30-08-2002)
Kommentar
Fra : zeon


Dato : 30-08-02 09:10

Ikke helt med...

scriptet ser sådan her ud:

<?php
// database information
include ('dbinfo.php');
?>

<?php
show_menu(); <- viser sidens menu


if (isset($_POST[submit])) {

// open database connection
$link = mysql_connect("$host", "$dbuser", "$dbpassword")
or die ("Could not connect");
mysql_select_db("$db", $link)
or die ("Could not select database");

// generate and exe sql statement
add_post_to_db();

} else {

// show add post form
add_post_form(); <- viser formen som brugeren indtaster data i

}

?>
<?php

show_footer();

?>

Hvis jeg sætter header("Location: index.php"); ind efter add_post_to_db();
så får jeg fejlen.

Hvis jeg sætter:

if (isset($_POST[submit])) {
header("Location: index.php");
}

allerførst i scriptet så smides der ingenting i db'en...

Hvordan er det lige du vil fixe det?? Var ikke helt med på den forklaring
du gav...


"Niels Andersen" <niels-usenet@myplace.dk> wrote in message
news:prFb9.39831$ww6.2882688@news010.worldonline.dk...
> zeon wrote in <3d6f214a$0$636$ba624c82@nntp03.dk.telia.net>:
> > Er der en måde at omgås "header already sent" problemet?
>
> Lad være med at sende noget til klienten, før du er færdig med at skrive
> headere.
>
> Der står i fejlmeddelelsen hvor du starter med at sende til klienten.
>
> --
> Mvh.
>
> Niels Andersen
> (la nels. anersyn.)



Jakob Møbjerg Nielse~ (30-08-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 30-08-02 09:21

zeon wrote:
> <?php
> // database information
> include ('dbinfo.php');
> ?>
>
> <?php
> show_menu(); <- viser sidens menu


Allerede her sender du et linjeskift (mellem ?> og <?php). Tomme linjer
og mellemrum bliver også sendt til klienten.

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



zeon (30-08-2002)
Kommentar
Fra : zeon


Dato : 30-08-02 09:46

Ja, ok...den er rettet, men det hjælper nu ikke alligevel...jeg må møblere
lidt om delene i scriptet for at det kommer til at virke...takker!


"Jakob Møbjerg Nielsen" <jakob@dataloger.dk> wrote in message
news:akn9rd$53l$1@sunsite.dk...
> zeon wrote:
> > <?php
> > // database information
> > include ('dbinfo.php');
> > ?>
> >
> > <?php
> > show_menu(); <- viser sidens menu
>
>
> Allerede her sender du et linjeskift (mellem ?> og <?php). Tomme linjer
> og mellemrum bliver også sendt til klienten.
>
> --
> Jakob Møbjerg Nielsen | "Five exclamation marks, the
> jakob@dataloger.dk | sure sign of an insane mind."
> http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
> Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.
>
>



Jakob Bock (30-08-2002)
Kommentar
Fra : Jakob Bock


Dato : 30-08-02 12:00

zeon skrev:

> <?php
> // database information
> include ('dbinfo.php');
> ?>
>
> <?php

Allerede her går det galt. I mellem de to php-blokke er der to linieskift.
Disse sendes til klienten -- sammen med diverse headere. Hvis du manuelt vil
sende en header -- f.eks. for at "redirecte" klienten -- så skal det være
før der sendes noget som helst til klienten.


Venlig hilsen
Jakob


Tinky Winky (30-08-2002)
Kommentar
Fra : Tinky Winky


Dato : 30-08-02 12:00


> Ikke helt med...
>
> scriptet ser sådan her ud:
>
> <?php
> // database information
> include ('dbinfo.php');
> ?>
>
> <?php
> show_menu(); <- viser sidens menu

Lad være med at escape phpmode - altså ?> og <?. Du skal alligevel ikke
sende noget til klienten. Sørg desuden for at det første "<?php" er helt i
starten ude i venstre hjørne. Når du er i "phpmode" (<?php), sender du ikke
noget ud, før du skriver echo (osv.) eller escaper ud af phpmode igen (?>)

> ?>
> <?php
>
> show_footer();
>
> ?>

Her er der heller ingen grund til at escape ud af php.



Ulrich (30-08-2002)
Kommentar
Fra : Ulrich


Dato : 30-08-02 10:02

In article <3d6f214a$0$636$ba624c82@nntp03.dk.telia.net>,
mosemis@hotmail.com says...
> Er der en måde at omgås "header already sent" problemet? Lad os sige man har
> index.php, hvorfra man kan klikke sig videre til addpost.php, hvor man så
> kan indtaste en post i systemet - altså en eller anden nyhed el.lign. Når
> man har indtastet dataene og der er kørt et tjek på, at de forskellige forms
> er udfyldt korrekt, ville jeg gerne at brugeren sendes tilbage til
> index.php.

Hvad med at indsætte følgende:

echo '<meta http-equiv="refresh" content="0;URL='."index.php".'">';

Ulrich

zeon (31-08-2002)
Kommentar
Fra : zeon


Dato : 31-08-02 15:39

Ja, det vil jeg egentlig også synes er nemmest. Jeg gjorde det bare i
javascript i stedet, så skal man nemlig ikke tænke over hvorvidt der er
sendt noget til klienten...(selvom det måske ikke er den pæneste løsning?)

echo "<SCRIPT LANGUAGE='JavaScript'>window.location='index.php';</script>";


"Ulrich" <Ulrich_egholm@mail1.stofanet.dk> wrote in message
news:MPG.17d952e8771960bf9896a4@sunsite.auc.dk...
> In article <3d6f214a$0$636$ba624c82@nntp03.dk.telia.net>,
> mosemis@hotmail.com says...
> > Er der en måde at omgås "header already sent" problemet? Lad os sige man
har
> > index.php, hvorfra man kan klikke sig videre til addpost.php, hvor man

> > kan indtaste en post i systemet - altså en eller anden nyhed el.lign.
Når
> > man har indtastet dataene og der er kørt et tjek på, at de forskellige
forms
> > er udfyldt korrekt, ville jeg gerne at brugeren sendes tilbage til
> > index.php.
>
> Hvad med at indsætte følgende:
>
> echo '<meta http-equiv="refresh" content="0;URL='."index.php".'">';
>
> Ulrich



Andreas Haugstrup Pe~ (31-08-2002)
Kommentar
Fra : Andreas Haugstrup Pe~


Dato : 31-08-02 16:20

"zeon" <mosemis@hotmail.com> wrote in
news:3d70d4e8$0$638$ba624c82@nntp03.dk.telia.net:

> Ja, det vil jeg egentlig også synes er nemmest. Jeg gjorde det bare i
> javascript i stedet, så skal man nemlig ikke tænke over hvorvidt der er
> sendt noget til klienten...(selvom det måske ikke er den pæneste
> løsning?)

Din løsning virker ikke hvis brugeren har slået javascript fra, så jeg vil
give dig ret i at det ikke er den bedste løsning

--
Andreas
http://www.solitude.dk

zeon (01-09-2002)
Kommentar
Fra : zeon


Dato : 01-09-02 10:55

Ja, ok...det har du selvfølgelig ret i, men det er intet prob, hvis man
bruger Ulrics løsning i forrige post!!


"Andreas Haugstrup Pedersen" <usenet@solitude.dk> wrote in message
news:Xns927BB08D46549usenetsolitudedk@130.225.247.90...
> "zeon" <mosemis@hotmail.com> wrote in
> news:3d70d4e8$0$638$ba624c82@nntp03.dk.telia.net:
>
> > Ja, det vil jeg egentlig også synes er nemmest. Jeg gjorde det bare i
> > javascript i stedet, så skal man nemlig ikke tænke over hvorvidt der er
> > sendt noget til klienten...(selvom det måske ikke er den pæneste
> > løsning?)
>
> Din løsning virker ikke hvis brugeren har slået javascript fra, så jeg vil
> give dig ret i at det ikke er den bedste løsning
>
> --
> Andreas
> http://www.solitude.dk



Andreas Haugstrup Pe~ (01-09-2002)
Kommentar
Fra : Andreas Haugstrup Pe~


Dato : 01-09-02 12:07

"zeon" <mosemis@hotmail.com> wrote in
news:3d71e3e8$0$22875$ba624c82@nntp02.dk.telia.net:

> Ja, ok...det har du selvfølgelig ret i, men det er intet prob, hvis man
> bruger Ulrics løsning i forrige post!!

Nej, men så er der andre problemer. Ikke alle browsere sender automatisk
brugeren videre. I Opera kan det f.eks. slås fra med lethed.

Den eneste pålidelige metode er header()

--
Andreas
http://www.solitude.dk

Ulrich (01-09-2002)
Kommentar
Fra : Ulrich


Dato : 01-09-02 17:33

In article <Xns927C85B16B0D3usenetsolitudedk@130.225.247.90>,
usenet@solitude.dk says...
> "zeon" <mosemis@hotmail.com> wrote in
> news:3d71e3e8$0$22875$ba624c82@nntp02.dk.telia.net:
>
> > Ja, ok...det har du selvfølgelig ret i, men det er intet prob, hvis man
> > bruger Ulrics løsning i forrige post!!
>
> Nej, men så er der andre problemer. Ikke alle browsere sender automatisk
> brugeren videre. I Opera kan det f.eks. slås fra med lethed.
>
> Den eneste pålidelige metode er header()
>
>

Hvor stor en procentdel af surferne bruger Opera?

Hvor kan man i øvrigt se en oversigt om de forskellige browseres
"markedsandele"?

Ulrich

Peter Binderup (01-09-2002)
Kommentar
Fra : Peter Binderup


Dato : 01-09-02 12:32

"zeon" <mosemis@hotmail.com> wrote in message news:3d6f214a$0$636$ba624c82@nntp03.dk.telia.net...
> Er der en måde at omgås "header already sent" problemet?

Ja ved at bruge output buffering kan du omgå problemet (og faktisk skrive til headeren flere gange)

http://dk.php.net/manual/en/function.ob-start.php

MVH
Peter



Niels Andersen (01-09-2002)
Kommentar
Fra : Niels Andersen


Dato : 01-09-02 13:43

Peter Binderup wrote in <3d71faa5$0$27666$edfadb0f@dspool01.news.tele.dk>:
>> Er der en måde at omgås "header already sent" problemet?
> Ja ved at bruge output buffering kan du omgå problemet (og faktisk skrive
> til headeren flere gange)

Det er altså lidt sjovt: Hver eneste gang nogen støder på dette problem,
bliver der næsten kun snakket om at omgå problemet. De få (eller den ene)
der fortæller om hvordan problemet løses, bliver (næsten) ignoreret.

Er folk mon slet ikke interesseret i at lave noget godt længere?

"Det virker på min computer, så må det jo være i orden."

(Jeg forventer ikke svar)

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Peter Binderup (01-09-2002)
Kommentar
Fra : Peter Binderup


Dato : 01-09-02 14:32

Dette er ikke at omgå problemet det er løsningen.

Problemet er at brugeren i sit script forsøger at skrive til headeren flere gange - det mås man ikke - løsningen er at vente med at
outputte noget til browseren før man er færdig med at udføre scriptet.

Ergo det er _ikke_ en omgåelse men en mulig løsningen: http://dk.php.net/manual/en/ref.outcontrol.php

/Peter


Niels Andersen (01-09-2002)
Kommentar
Fra : Niels Andersen


Dato : 01-09-02 14:51

Peter Binderup wrote in <3d7216e5$0$171$edfadb0f@dspool01.news.tele.dk>:
> Dette er ikke at omgå problemet det er løsningen.

...sagde du uden at vise hvad "dette" er (fx. med et citat).

Jeg går ud fra at det er output buffering du taler om.

> Problemet er at brugeren i sit script forsøger at skrive til headeren
> flere gange - det mås man ikke -

Kan du dokumentere det?
Hvordan skulle man ellers sætte mere end én header?

I øvrigt så tror jeg kun han prøver at sætte én header, men det kan da godt
være at jeg har glemt noget.

> løsningen er at vente med at outputte
> noget til browseren før man er færdig med at udføre scriptet.

Og den "rigtige" løsning er at lade være med at *lave* output, før man er
færdig med at sætte headere.

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Peter Binderup (01-09-2002)
Kommentar
Fra : Peter Binderup


Dato : 01-09-02 15:18

"Niels Andersen" <niels-usenet@myplace.dk> wrote in message news:pWoc9.41862$ww6.3247164@news010.worldonline.dk...
> Peter Binderup wrote in <3d7216e5$0$171$edfadb0f@dspool01.news.tele.dk>:
> > Dette er ikke at omgå problemet det er løsningen.
>
> ..sagde du uden at vise hvad "dette" er (fx. med et citat).
>
> Jeg går ud fra at det er output buffering du taler om.
>
> > Problemet er at brugeren i sit script forsøger at skrive til headeren
> > flere gange - det mås man ikke -
>
> Kan du dokumentere det?
> Hvordan skulle man ellers sætte mere end én header?

de warnings der kommer må vel være dokumentation nok.

> > løsningen er at vente med at outputte
> > noget til browseren før man er færdig med at udføre scriptet.
>
> Og den "rigtige" løsning er at lade være med at *lave* output, før man er
> færdig med at sætte headere.

ja, men ikke altid praktisk - derfor Output buffering.

/Peter


Niels Andersen (01-09-2002)
Kommentar
Fra : Niels Andersen


Dato : 01-09-02 16:27

Peter Binderup wrote in <3d72217a$0$177$edfadb0f@dspool01.news.tele.dk>:
>> > Problemet er at brugeren i sit script forsøger at skrive til headeren
>> > flere gange - det mås man ikke -
>> Kan du dokumentere det?
>> Hvordan skulle man ellers sætte mere end én header?
> de warnings der kommer må vel være dokumentation nok.

Den warning er ikke fordi man sætter flere header, men fordi man har startet
output af body'en.

>> Og den "rigtige" løsning er at lade være med at *lave* output, før man er
>> færdig med at sætte headere.
> ja, men ikke altid praktisk - derfor Output buffering.

Kan det ikke lade sig gøre, må man jo nøjes med det næst-bedste. Men her kan
det altså godt lade sig gøre.

Dit "ja" viser dog, at du ikke er helt uening med mig.

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408852
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste