|
| 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
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
| |
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.)
| |
|
|