/ 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
"Cannot add header information" ???
Fra : Martin Jensen


Dato : 09-07-02 10:52

Jeg har en side der virker ved at have variabler i adresselinien
der bestemmer indholdet. Jeg har oplevet at header() ikke virker
når jeg bruger dette system. Der kommer følgende fejl-meddelse:

"Cannot add header information"

Er der en måde man kan reloade en side i php uden brug af header
? Eller er der en andre måder at løse problemet på ?

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

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


Dato : 09-07-02 11:01

Martin Jensen wrote in <agebnm$h6a$1@sunsite.dk>:
> "Cannot add header information"

Sæt headerne *før* du skriver noget i bodyen.
Når den kommer med den fejlmeddelelse siger den også hvilken linje du
starter output til body'en på. Fjern det, eller byt rundt på rækkefølgen.

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Martin Jensen (09-07-2002)
Kommentar
Fra : Martin Jensen


Dato : 09-07-02 11:19

Niels Andersen wrote in dk.edb.internet.webdesign.serverside.php:
> Martin Jensen wrote in <agebnm$h6a$1@sunsite.dk>:
> > "Cannot add header information"
>
> Sæt headerne *før* du skriver noget i bodyen.
> Når den kommer med den fejlmeddelelse siger den også hvilken linje du
> starter output til body'en på. Fjern det, eller byt rundt på rækkefølgen.
>
> --
> Mvh.
>
> Niels Andersen
> (la nels. anersyn.)

Problemet er at det er en del af et script. Jeg har et vote script som skal
reloade efter ens stemme er blevet registreret i en MySQL_database !!!

Her er den del af koden hvor der er problemer:

if ($vote && !$HelloCheater) {
mysql_connect($server,$db_user,$db_pass) or die("Database Connect
Error");
$query = mysql_db_query($database,"update tb_afstemning set
votes=votes+1 where name='$vote'") or die("Database Query Error1");
mysql_close();
setcookie("HelloCheater", "1", time()+(3600*$cookie_time));
header("Location: $PHP_SELF");
exit;
}


--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jesper Brunholm (09-07-2002)
Kommentar
Fra : Jesper Brunholm


Dato : 09-07-02 11:41

Martin Jensen wrote:

Niels Andersen:
>>Sæt headerne *før* du skriver noget i bodyen.
>>Når den kommer med den fejlmeddelelse siger den også hvilken linje du
>>starter output til body'en på. Fjern det, eller byt rundt på rækkefølgen.

eller brug output buffering
<http://www.php.net/manual/en/function.ob-start.php>

> Problemet er at det er en del af et script. Jeg har et vote script som skal
> reloade efter ens stemme er blevet registreret i en MySQL_database !!!

Det ville jeg personligt løse ved at lade php arbejde oppe i <head> i en
arbejdsfil og så skrive flg html-kode:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<?php
# kør din php og queries her
?>
<meta http-equiv="refresh" content="0;URL=http://
filenSomBrugerKomFra.php ?>">
</head>
<body>

</body>
</html>

Du kan selvfølgeligt også holde det i samme fil, og så checke på
variablerne om den skal køre ovenstående eller noget andet output...

mvh

Jesper Brunholm

--
Phønix - dansk folk-musik fra unge musikere -
http://www.phonixfolk.dk


Kristian Risager Lar~ (09-07-2002)
Kommentar
Fra : Kristian Risager Lar~


Dato : 09-07-02 11:45

> eller brug output buffering
> <http://www.php.net/manual/en/function.ob-start.php>
Jeg har skrevet en kort lille artikel om det.
http://kezze.dk/artikler.php.php

> Det ville jeg personligt løse ved at lade php arbejde oppe i <head> i en
> arbejdsfil og så skrive flg html-kode:
Det er en ualmindeligt dårlig løsning i mine øjne. Brug "den pæne måde" som jeg har
skrevet om.

> <meta http-equiv="refresh" content="0;URL=http://
> filenSomBrugerKomFra.php ?>">
Jeg vil til enhver tid foretrække at sende http-headers afsted og ikke gennem
meta-tags.

--
Mvh, Kristian Risager Larsen -
http://kezze.dk - mailto:kezze@kezze.dk
"Der er 10 slags mennesker. Dem der kan binære tal og dem der ikke kan."


Jesper Brunholm (09-07-2002)
Kommentar
Fra : Jesper Brunholm


Dato : 09-07-02 12:14

Kristian Risager Larsen wrote:
>>eller brug output buffering
>><http://www.php.net/manual/en/function.ob-start.php>
>
> Jeg har skrevet en kort lille artikel om det.
> http://kezze.dk/artikler.php.php

Den er godt nok kort - jeg fik ikke så voldsomt meget ud af det med den
pæne løsning, og det står ikke just lysende klart for mig hvordan det
løser det omtalte problem.

>>Det ville jeg personligt løse ved at lade php arbejde oppe i <head> i en
>>arbejdsfil og så skrive flg html-kode:
>
> Det er en ualmindeligt dårlig løsning i mine øjne. Brug "den pæne måde" som jeg har
> skrevet om.

kan du argumentere lidt for hvorfor det er skidt?

mvh

Jesper Brunholm

--
Phønix - dansk folk-musik fra unge musikere - http://www.phonixfolk.dk


Peter Brodersen (09-07-2002)
Kommentar
Fra : Peter Brodersen


Dato : 09-07-02 12:19

On Tue, 09 Jul 2002 13:13:34 +0200, Jesper Brunholm
<nospam@brunholm-scharff.dk> wrote:

>kan du argumentere lidt for hvorfor det er skidt?

I nogle browsere vil du ikke kunne bladre tilbage henover den
META-viderestilling, plus at browsere ikke opfører sig ensartet alt
efter om der skal viderestilles bare når META-koden er læst, eller
først når hele siden er hentet.

Dette kan give "blink" og synliggøre at brugeren ryger ind på en side,
som han så ryger videre fra - hvilket måske skaber forvirring.

--
- Peter Brodersen

Jakob Møbjerg Nielse~ (09-07-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 09-07-02 12:20

Jesper Brunholm wrote:
> kan du argumentere lidt for hvorfor det er skidt?


Fordi brugere først kan se sider, når de er kompilerede helt færdige.
Der er dog også nogle smarte funktioner. Bl.a. kan man styre hvortil
outputtet bliver sendt. Det kan være til en browser, en fil eller noget
helt tredie.

At bruge buffering til at rette fejl i en dårligt designet kode er dog
stadig grimt.

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


Henrik Stidsen (09-07-2002)
Kommentar
Fra : Henrik Stidsen


Dato : 09-07-02 19:52

"Kristian Risager Larsen" <kezze@kezze.dk> wrote in
news:ageeuu$n6s$1@news.net.uni-c.dk

>> eller brug output buffering
>> <http://www.php.net/manual/en/function.ob-start.php>
> Jeg har skrevet en kort lille artikel om det.
> http://kezze.dk/artikler.php.php

Jeg forstår ikke helt du kalder det slamkode, den beskidte måde - der
er altså forhold der gør at det er *den eneste* måde, det gør da ikke
koden dårligere vel ?

--
Henrik Stidsen | HS235-DK | Ikke eksisterende samleobjekt
http://min.hjemmeside.er.paa.http.kolon.2-x-skraastreg.susie.dk/
"These opinions are my own, though for a small fee they
be yours too." -- Dave Haynie

Jakob Møbjerg Nielse~ (09-07-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 09-07-02 20:06

Henrik Stidsen wrote:
> der er altså forhold der gør at det er *den eneste* måde,

Hvilke? Jeg har *aldrig* stødt på sådanne forhold.

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


Henrik Stidsen (09-07-2002)
Kommentar
Fra : Henrik Stidsen


Dato : 09-07-02 21:51

Jakob Møbjerg Nielsen <jakob@dataloger.dk> wrote in
news:agfc6h$nj7$1@sunsite.dk

>> der er altså forhold der gør at det er *den eneste* måde,
>
> Hvilke? Jeg har *aldrig* stødt på sådanne forhold.

Lad os tage det eksempel jeg umidelbart tænker på:

Et system arbejder ud fra en template og skal kunne bruge moduler til
at generere indhold midtvejs. Et af de moduler har brug for at sende
en header, f.eks. en redirect eller en 404. Hvordan vil du gøre det ?

--
Henrik Stidsen | HS235-DK | Ikke eksisterende samleobjekt
http://min.hjemmeside.er.paa.http.kolon.2-x-skraastreg.susie.dk/
"These opinions are my own, though for a small fee they
be yours too." -- Dave Haynie

Jakob Møbjerg Nielse~ (09-07-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 09-07-02 23:17

Henrik Stidsen wrote:
> Lad os tage det eksempel jeg umidelbart tænker på:
>
> Et system arbejder ud fra en template og skal kunne bruge moduler til
> at generere indhold midtvejs. Et af de moduler har brug for at sende
> en header, f.eks. en redirect eller en 404. Hvordan vil du gøre det ?

Det kan altid tjekkes om det er nødvendigt inden outputtet genereres.
Jeg stødte ind i et meget lignende problem engang, men det var intet
problem at rette. Det drejer sig kun om at flytte noget kode.

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


Jakob Møbjerg Nielse~ (09-07-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 09-07-02 23:48

Jakob Møbjerg Nielsen wrote:
> Det kan altid tjekkes om det er nødvendigt inden outputtet genereres.
> Jeg stødte ind i et meget lignende problem engang, men det var intet
> problem at rette. Det drejer sig kun om at flytte noget kode.

Jeg skulle måske lige uddybe lidt:

Jeg kan sagtens designe et system sådan at buffering er nødvendigt, men
jeg vil altid kunne designe et tilsvarende system, hvor buffering ikke
er nødvendigt. Det store problem ligger i at skulle arbejde på dårligt
designet kode. Der kan der nogle gange ikke være andre løsninger, end at
bruge buffering (eller *mange* timers arbejde på at rette designet. Her
kan det oftest betale sig at lave det fra scratch).

Se forresten http://www.phpbuilder.com/columns/david20000512.php3. Han
beskriver ganske glimrende hvordan man kan undgå problemerne.

Selvom templates er smarte, synes jeg dog ikke om dem. Netop det med at
en parser, der bruger masser af regexps, skal startes og at outputtet
generes til sidst, gør hhv. siderne langsomme og sider med meget
indhold, der tager lang tid at generere, kan ikke ses før hele siden er
kompileret. Den helt store fordel, som jeg ser det, er at HTML og PHP
adskilles, så udviklerne ikke får skylden for at smadre designernes
HTML-kode

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


Henrik Stidsen (10-07-2002)
Kommentar
Fra : Henrik Stidsen


Dato : 10-07-02 13:33

Jakob Møbjerg Nielsen <jakob@dataloger.dk> wrote in
news:agfncg$1g7$1@sunsite.dk

> Det kan altid tjekkes om det er nødvendigt inden outputtet
> genereres. Jeg stødte ind i et meget lignende problem engang,
> men det var intet problem at rette. Det drejer sig kun om at
> flytte noget kode.

Problemet er så bare, hvis den der laver output-modulerne ikke er den
samme som den der laver template-readeren...

Er der en måde at hente den parsede PHP fil ind i en variabel ?

F.eks.:

<?php
$template = /sti/til/template
$outputphp = /sti/til/output.php

$output = eregi_replace("{content}", $outputphp, $template);
echo $output;
?>

Altså at man parser en php fil, men det der normalt ville blive sendt
til klienten bliver istedet sendt til en variabel og kan således
indsættes i templaten og headerne kan sendes som normalt uden brug af
buffering.

--
Henrik Stidsen | HS235-DK | Ikke eksisterende samleobjekt
http://min.hjemmeside.er.paa.http.kolon.2-x-skraastreg.susie.dk/
"These opinions are my own, though for a small fee they
be yours too." -- Dave Haynie

Andreas Kleist Svend~ (10-07-2002)
Kommentar
Fra : Andreas Kleist Svend~


Dato : 10-07-02 15:20

Henrik Stidsen wrote:

> Altså at man parser en php fil, men det der normalt ville blive sendt
> til klienten bliver istedet sendt til en variabel og kan således
> indsættes i templaten og headerne kan sendes som normalt uden brug af
> buffering.

Hvis du åbner filen via http er det vist hvad der sker, altså noget i stil
med fopen("http:/www.mit.site/sti/til/fil", "r").

--
mvh Andreas Kleist Svendsen

Henrik Stidsen (10-07-2002)
Kommentar
Fra : Henrik Stidsen


Dato : 10-07-02 17:38

Andreas Kleist Svendsen <usenetnospam@nau.dk> wrote in
news:aghfqr$i3u$1@sunsite.dk

> Hvis du åbner filen via http er det vist hvad der sker, altså
> noget i stil med fopen("http:/www.mit.site/sti/til/fil", "r").

Det er bare ikke særlig optimalt - i så fald skal man jo også læse
headeren og derefter sende de relevante igen (dvs. også on-the-fly
vurdere automagisk hvilke der er relevante!).

Jeg har overvejet om det var sådan der det skulle gøres, men det
virker IMHO lidt molboagtigt...

--
Henrik Stidsen | HS235-DK | Ikke eksisterende samleobjekt/undtagelse
http://min.hjemmeside.er.paa.http.kolon.2-x-skraastreg.susie.dk/
"These opinions are my own, though for a small fee they
be yours too." -- Dave Haynie

Andreas Kleist Svend~ (10-07-2002)
Kommentar
Fra : Andreas Kleist Svend~


Dato : 10-07-02 19:27

Henrik Stidsen wrote:

> Andreas Kleist Svendsen <usenetnospam@nau.dk> wrote in
> news:aghfqr$i3u$1@sunsite.dk
>
>> Hvis du åbner filen via http er det vist hvad der sker, altså
>> noget i stil med fopen("http:/www.mit.site/sti/til/fil", "r").
>
> Det er bare ikke særlig optimalt - i så fald skal man jo også læse
> headeren og derefter sende de relevante igen (dvs. også on-the-fly
> vurdere automagisk hvilke der er relevante!).

Nej, det skal man ikke, se evt. http://php.net/fopen som siger:

If filename begins with "http://" (not case sensitive), an HTTP 1.0
connection is opened to the specified server, the page is requested using
the HTTP GET method, and a file pointer is returned to the beginning of the
body of the response.

--
mvh Andreas Kleist Svendsen

Henrik Stidsen (10-07-2002)
Kommentar
Fra : Henrik Stidsen


Dato : 10-07-02 23:20

Andreas Kleist Svendsen <usenetnospam@nau.dk> wrote in
news:aghu9d$gug$1@sunsite.dk

> If filename begins with "http://" (not case sensitive), an HTTP
> 1.0 connection is opened to the specified server, the page is
> requested using the HTTP GET method, and a file pointer is
> returned to the beginning of the body of the response.

Ikke forstået - du skal stadig se efter om der er nogle headere der
skal sendes igen...


--
Henrik Stidsen | HS235-DK | Ikke eksisterende samleobjekt/undtagelse
http://min.hjemmeside.er.paa.http.kolon.2-x-skraastreg.susie.dk/
"These opinions are my own, though for a small fee they
be yours too." -- Dave Haynie

Andreas Kleist Svend~ (11-07-2002)
Kommentar
Fra : Andreas Kleist Svend~


Dato : 11-07-02 11:03

Henrik Stidsen wrote:

> Ikke forstået - du skal stadig se efter om der er nogle headere der
> skal sendes igen...

Hvilke headers tænker du på? Var du ikke blot interesseret i at få det
output som PHP giver, altså uden headers?

--
mvh Andreas Kleist Svendsen

Henrik Stidsen (11-07-2002)
Kommentar
Fra : Henrik Stidsen


Dato : 11-07-02 13:52

Andreas Kleist Svendsen <usenetnospam@nau.dk> wrote in
news:agjl54$b4c$1@news.cybercity.dk

>> Ikke forstået - du skal stadig se efter om der er nogle headere
>> der skal sendes igen...
>
> Hvilke headers tænker du på? Var du ikke blot interesseret i at
> få det output som PHP giver, altså uden headers?

Hvis jeg skal inkludere et login-modul der f.eks. har brug for at
sende en 403 eller en 401 (er det ikke dem der bruges til password
sider ?) vil jeg jo netop have brug for at checke om siden sender
sådan en!
En redirect header kan også komme på tale hvis samme modul sender
videre til "ok, du er inde" side.

--
Henrik Stidsen | HS235-DK | Ikke eksisterende samleobjekt/undtagelse
http://min.hjemmeside.er.paa.http.kolon.2-x-skraastreg.susie.dk/
"These opinions are my own, though for a small fee they
be yours too." -- Dave Haynie

Andreas Kleist Svend~ (11-07-2002)
Kommentar
Fra : Andreas Kleist Svend~


Dato : 11-07-02 21:56

Henrik Stidsen wrote:

> Hvis jeg skal inkludere et login-modul der f.eks. har brug for at
> sende en 403 eller en 401 (er det ikke dem der bruges til password
> sider ?) vil jeg jo netop have brug for at checke om siden sender
> sådan en!
> En redirect header kan også komme på tale hvis samme modul sender
> videre til "ok, du er inde" side.

Jeg kan godt se at det bliver lidt kompliceret så, men så er det måske også
den forkerte løsning du vælger, så vidt jeg har forstået vil du have din
egen php-side til at sende headers, som du selv læser, og derefter sender
til brugeren. Hvis jeg har forstået det rigtigt vil jeg mene det er en
omstændig vej du har valgt. Det må kunne gøres på en anden og smartere måde.

--
mvh Andreas Kleist Svendsen

Henrik Stidsen (11-07-2002)
Kommentar
Fra : Henrik Stidsen


Dato : 11-07-02 22:31

Andreas Kleist Svendsen <usenetnospam@nau.dk> wrote in
news:agkrcb$23i8$1@news.cybercity.dk

> Jeg kan godt se at det bliver lidt kompliceret så, men så er det
> måske også den forkerte løsning du vælger, så vidt jeg har
> forstået vil du have din egen php-side til at sende headers, som
> du selv læser, og derefter sender til brugeren. Hvis jeg har
> forstået det rigtigt vil jeg mene det er en omstændig vej du har
> valgt. Det må kunne gøres på en anden og smartere måde.

Jeg har fundet noget på http://dk.php.net/ob_start - den måde hvor
den bruges inde midt i en side til at "gemme" en del af sidens output
til senere er lige præcis hvad jeg skal bruge ;)

--
Henrik Stidsen | HS235-DK | Ikke eksisterende samleobjekt/undtagelse
http://min.hjemmeside.er.paa.http.kolon.2-x-skraastreg.susie.dk/
"These opinions are my own, though for a small fee they
be yours too." -- Dave Haynie

Andreas Kleist Svend~ (12-07-2002)
Kommentar
Fra : Andreas Kleist Svend~


Dato : 12-07-02 10:58

Henrik Stidsen wrote:

> Jeg har fundet noget på http://dk.php.net/ob_start - den måde hvor
> den bruges inde midt i en side til at "gemme" en del af sidens output
> til senere er lige præcis hvad jeg skal bruge ;)

Det kan sikkert bruges i det aktuelle tilfælde, men hvis man designede
sitet fra bunden kunne man med stor sandsynlighed undgå det, og derved få
en bedre løsning.

--
mvh Andreas Kleist Svendsen

Henrik Stidsen (12-07-2002)
Kommentar
Fra : Henrik Stidsen


Dato : 12-07-02 12:49

Andreas Kleist Svendsen <usenetnospam@nau.dk> wrote in
news:agm97d$ktl$1@news.cybercity.dk

>> Jeg har fundet noget på http://dk.php.net/ob_start - den måde
>> hvor den bruges inde midt i en side til at "gemme" en del af
>> sidens output til senere er lige præcis hvad jeg skal bruge ;)
>
> Det kan sikkert bruges i det aktuelle tilfælde, men hvis man
> designede sitet fra bunden kunne man med stor sandsynlighed
> undgå det, og derved få en bedre løsning.

Men hvordan ? - når siderne skal kunne ændres osv. uafhængigt at
resten af systemet.

--
Henrik Stidsen | HS235-DK | Ikke eksisterende samleobjekt/undtagelse
http://min.hjemmeside.er.paa.http.kolon.2-x-skraastreg.susie.dk/
"These opinions are my own, though for a small fee they
be yours too." -- Dave Haynie

Andreas Kleist Svend~ (12-07-2002)
Kommentar
Fra : Andreas Kleist Svend~


Dato : 12-07-02 22:45

Henrik Stidsen wrote:

> Men hvordan ? - når siderne skal kunne ændres osv. uafhængigt at
> resten af systemet.

Jeg ved ikke nok om hvad du ønsker at opnå til at jeg kan komme med et
fornuftigt forslag, men jeg vil gerne kigge på det hvis du fortæller lidt
mere. Jeg tager dog på ferie i morgen, så der er nok større chance for at
en anden kan hjælpe dig før jeg kommer hjem igen (om en uge).

--
mvh Andreas Kleist Svendsen

Henrik Stidsen (12-07-2002)
Kommentar
Fra : Henrik Stidsen


Dato : 12-07-02 23:57

Andreas Kleist Svendsen <andreas@fabel.dk> wrote in
news:agnik3$2c0g$1@news.cybercity.dk

>> Men hvordan ? - når siderne skal kunne ændres osv. uafhængigt
>> at resten af systemet.
>
> Jeg ved ikke nok om hvad du ønsker at opnå til at jeg kan komme
> med et fornuftigt forslag

Well well, jeg prøver med en lidt mere udførlig forklaring ;)

Jeg vil gerne have at jeg kan have en central template hvor der
markes med "felter" hvad der skal puttes ind hvor, f.eks. [TITLE] til
titlen på denne side, [CONTENT] der hvor selve indholdet skal være
osv.
Templaten skal læses ind og felterne udskiftes med det der skal ud
til klienten. Problemet kommer faktisk først når jeg vil have PHP
kode med i det der skal sættes ind som [CONTENT], det kan jeg ikke
med mindre jeg bruger en form for include.

Det jeg selv har fået lavet ind til videre virker med en ob_start():
<?php
bla bla bla...
ob_start();
include ($contentfil);
$content = ob_get_contents();
ob_end_clean();
$output = eregi_replace("\[CONTENT\]"; $content, $template);
?>

- problemet i det er egentlig at , så vidt jeg kan se, include
spytter ud til klienten alligevel - men $content får alligevel
værdien... Kan det være fordi php kører med en output buffer fra
starten af ? (i php.ini)

> men jeg vil gerne kigge på det hvis
> du fortæller lidt mere. Jeg tager dog på ferie i morgen, så der
> er nok større chance for at en anden kan hjælpe dig før jeg
> kommer hjem igen (om en uge).



--
Henrik Stidsen | HS235-DK | Ikke eksisterende samleobjekt/undtagelse
http://min.hjemmeside.er.paa.http.kolon.2-x-skraastreg.susie.dk/
"These opinions are my own, though for a small fee they
be yours too." -- Dave Haynie

Peter Brodersen (09-07-2002)
Kommentar
Fra : Peter Brodersen


Dato : 09-07-02 23:20

On Tue, 9 Jul 2002 20:50:46 +0000 (UTC), Henrik Stidsen
<spamtrap@spammer.dk> wrote:

>Et system arbejder ud fra en template og skal kunne bruge moduler til
>at generere indhold midtvejs. Et af de moduler har brug for at sende
>en header, f.eks. en redirect eller en 404. Hvordan vil du gøre det ?

Venter med at printe noget til allersidste linje?

De template-systemer, jeg har haft rodet med, har netop ikke printet
med det samme, men fx blot løbende tilføjet til i en variabel - netop
så man kan "undervejs" kan lave diverse stunts. For mig at se har det
netop været ret tydeligt for en del CMS'er, at den problemstilling har
været med i kravspecifikationen fra starten af, hvorfor man netop gør
en del ud af at lave det fornuftigt.

Man behøver ikke absolut at have kløe i print-fingeren - og
alternativet er slet ikke så svært. Sammenlign fx følgende to:

== 1 ==
<?
print "<html><body>";
print LavOverskrift("Madopskrifter");
if (date("H") > 20) {
// vil fejle
header("Location: http://www.domæne.dk/aftenside");
exit;
}
print HentContent("mad");
print "</body></html>";
?>

== 2 ==
<?
$output = "<html><body>";
$output .=LavOverskrift("Madopskrifter");
if (date("H") > 20) {
// vil virke fejle
header("Location: http://www.domæne.dk/aftenside");
exit;
}
$output .= HentContent("mad");
$output .= "</body></html>";
print $output;
?>

Dette er et yderst simpelt eksempel. I praksis er alle print'er blot
erstattet med en variabel, som der løbende bliver tilføjet mere til
(og tilsidst outputtet - vi kunne evt. tillige udnytte at vi har al
outputtet liggende i en færdig variabel og så smide en passende
Content-Length-header på, vha. strlen() ).

--
- Peter Brodersen

Henrik Stidsen (10-07-2002)
Kommentar
Fra : Henrik Stidsen


Dato : 10-07-02 13:34

Peter Brodersen <usenet@ter.dk> wrote in
news:agfni5$k27$1@dknews.tiscali.dk

> Dette er et yderst simpelt eksempel. I praksis er alle print'er
> blot erstattet med en variabel, som der løbende bliver tilføjet
> mere til (og tilsidst outputtet - vi kunne evt. tillige udnytte
> at vi har al outputtet liggende i en færdig variabel og så smide
> en passende Content-Length-header på, vha. strlen() ).

Hva så hvis man undervejs skal have en php fil parset ? (så man
normalt bare ville bruge include)

--
Henrik Stidsen | HS235-DK | Ikke eksisterende samleobjekt
http://min.hjemmeside.er.paa.http.kolon.2-x-skraastreg.susie.dk/
"These opinions are my own, though for a small fee they
be yours too." -- Dave Haynie

Peter Brodersen (10-07-2002)
Kommentar
Fra : Peter Brodersen


Dato : 10-07-02 23:33

On Wed, 10 Jul 2002 12:34:12 +0000 (UTC), Henrik Stidsen
<spamtrap@spammer.dk> wrote:

>Hva så hvis man undervejs skal have en php fil parset ? (så man
>normalt bare ville bruge include)

Hvor kommer den fra? Den blå luft?

Jeg går ud fra at man include'r en fil, der giver én adgang til
relevante klasser eller funktioner, og så ka' man ta' den derfra.

--
- Peter Brodersen

Henrik Stidsen (11-07-2002)
Kommentar
Fra : Henrik Stidsen


Dato : 11-07-02 01:04

Peter Brodersen <usenet@ter.dk> wrote in
news:agicm5$oae$1@dknews.tiscali.dk

>>Hva så hvis man undervejs skal have en php fil parset ? (så man
>>normalt bare ville bruge include)
>
> Hvor kommer den fra? Den blå luft?

nej, den ligger på serveren...

> Jeg går ud fra at man include'r en fil, der giver én adgang til
> relevante klasser eller funktioner, og så ka' man ta' den derfra.

Forestil dig denne situation:

Der er en template med en "trigger" i, denne skal erstattes af
indholdet af /inc/$id.inc når siden kaldes med ?id=side.

Dvs. det indhold der er i $id.inc kan skifte hele tiden ligesom det
vil være forskelligt alt efter hvilken side der bruger templaten. For
at kunne lave f.eks. ?id=login vil det være nødvendigt at f.eks.
sende en cookie.
Vil du så lave det hele som en stor fil hvor du laver alle ting i ?

--
Henrik Stidsen | HS235-DK | Ikke eksisterende samleobjekt/undtagelse
http://min.hjemmeside.er.paa.http.kolon.2-x-skraastreg.susie.dk/
"These opinions are my own, though for a small fee they
be yours too." -- Dave Haynie

Peter Brodersen (11-07-2002)
Kommentar
Fra : Peter Brodersen


Dato : 11-07-02 13:25

On Thu, 11 Jul 2002 00:03:40 +0000 (UTC), Henrik Stidsen
<spamtrap@spammer.dk> wrote:

>Der er en template med en "trigger" i, denne skal erstattes af
>indholdet af /inc/$id.inc når siden kaldes med ?id=side.

Jeg ser stadigvæk ingen grund til at hver $id.inc-side skulle have
behov for at printe ting råt - eller at man overhovedet i første
omgang ender med en sådan løsning med vilkårlige filer.

I et template-system må man have nogle passende kodestandarder for
dataudveksling. I flere tilfælde, hvor jeg har set output-buffering
blive brugt, har det i højere grad været tale om at man har
kompenseret for en ustruktureret kodeplan. Og såvidt, jeg kan se, er
det også lidt det, du gerne vil give eksempler på ("Hvis man tager
denne situation, hvor filer printer noget, hvad vil du så gøre?"), men
det mener jeg ikke er relevant at forholde sig til i første omgang.
Bemærk at tråden har omhandlet selv at skrive kode.
..
--
- Peter Brodersen

Henrik Stidsen (11-07-2002)
Kommentar
Fra : Henrik Stidsen


Dato : 11-07-02 13:54

Peter Brodersen <usenet@ter.dk> wrote in
news:agjteg$qct$1@dknews.tiscali.dk

> I et template-system må man have nogle passende kodestandarder
> for dataudveksling. I flere tilfælde, hvor jeg har set
> output-buffering blive brugt, har det i højere grad været tale
> om at man har kompenseret for en ustruktureret kodeplan. Og
> såvidt, jeg kan se, er det også lidt det, du gerne vil give
> eksempler på ("Hvis man tager denne situation, hvor filer
> printer noget, hvad vil du så gøre?"), men det mener jeg ikke er
> relevant at forholde sig til i første omgang.

Okay, helt konkret - jeg forsøger at lave et system så jeg kan bruge
en central template på alle mine små "legesider" på min server. Jeg
vil gerne kunne bruge forskellige PHP ting til at includere i
"content" området på min template.
Jeg har løst det ved bl.a. at bruge outputbuffering.

> Bemærk at tråden har omhandlet selv at skrive kode.

?

--
Henrik Stidsen | HS235-DK | Ikke eksisterende samleobjekt/undtagelse
http://min.hjemmeside.er.paa.http.kolon.2-x-skraastreg.susie.dk/
"These opinions are my own, though for a small fee they
be yours too." -- Dave Haynie

Henrik Stidsen (11-07-2002)
Kommentar
Fra : Henrik Stidsen


Dato : 11-07-02 21:56

Henrik Stidsen <spamtrap@spammer.dk> wrote in
news:Xns9248978601EE9hstidsen@212.54.64.149

> Jeg har løst det ved bl.a. at bruge outputbuffering.

Har fundet en anden og bedre løsning - dog stadig med buffering, dog
på en lidt anden måde end før:

<?php
header("X-Header-1: outside buffer");
ob_start();
header("X-Header-2: buffer");
echo "this is inside the buffer";
$buffer = ob_get_contents();
ob_end_clean();
echo "buffer has stopped";
echo "<br><br>".$buffer;
?>

Det virker som det skal - er det stadig slamkode ? ;)

--
Henrik Stidsen | HS235-DK | Ikke eksisterende samleobjekt/undtagelse
http://min.hjemmeside.er.paa.http.kolon.2-x-skraastreg.susie.dk/
"These opinions are my own, though for a small fee they
be yours too." -- Dave Haynie

Kristian Risager Lar~ (09-07-2002)
Kommentar
Fra : Kristian Risager Lar~


Dato : 09-07-02 20:20

> Jeg forstår ikke helt du kalder det slamkode, den beskidte måde - der
> er altså forhold der gør at det er *den eneste* måde, det gør da ikke
> koden dårligere vel ?

Jeg vil vædde en muggen hat på at man kan konstruere kode der outputter det samme og
som ikke har brug for output buffering.
Vil du give et konkret eksempel?
--
Mvh, Kristian Risager Larsen - http://kezze.dk - mailto:kezze@kezze.dk
"Der er 10 slags mennesker. Dem der kan binære tal og dem der ikke kan."


Henrik Stidsen (09-07-2002)
Kommentar
Fra : Henrik Stidsen


Dato : 09-07-02 21:52

"Kristian Risager Larsen" <kezze@kezze.dk> wrote in
news:agfd01$i4a$1@news.net.uni-c.dk

> Vil du give et konkret eksempel?

Se mit svar til Jakob.

--
Henrik Stidsen | HS235-DK | Ikke eksisterende samleobjekt
http://min.hjemmeside.er.paa.http.kolon.2-x-skraastreg.susie.dk/
"These opinions are my own, though for a small fee they
be yours too." -- Dave Haynie

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


Dato : 09-07-02 13:57

Jesper Brunholm wrote in <3D2ABDCF.10706@brunholm-scharff.dk>:
>>>Sæt headerne *før* du skriver noget i bodyen.
[...]
> Det ville jeg personligt løse ved at lade php arbejde oppe i <head> i en
> arbejdsfil og så skrive flg html-kode:

> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
> <html>
> <head>
> <?php
> # kør din php og queries her
> ?>
> <meta http-equiv="refresh" content="0;URL=http://
> filenSomBrugerKomFra.php ?>">
> </head>
> <body>
[...]

Det var nu ikke html-headere jeg tænkte på, det var http-headere. :)

<?php
....
?>
<!DOCTYPE...>
<html>
....

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Christian Hansen (09-07-2002)
Kommentar
Fra : Christian Hansen


Dato : 09-07-02 13:58

Martin Jensen wrote:

> Problemet er at det er en del af et script. Jeg har et vote script som skal
> reloade efter ens stemme er blevet registreret i en MySQL_database !!!


Er problemet, at du har brug for at overfører bestemte variable under
reload? Hvis du anvender en formular til afgivelse af stemmen, så sæt
disse nødvendige variabler som hidden felter i formularen.

<input type="Hidden" name="denneside" value="<?php print
$_SERVER[PHP_SELF] ?>">


Reloaded kommer jo så automatisk, når brugeren submitter sin stemme.

MVH Christian


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


Dato : 09-07-02 13:56

Martin Jensen wrote in <agedb8$pgm$1@sunsite.dk>:
> Problemet er at det er en del af et script.

Selvfølgelig er det en del af et script. Mit råd gælder stadig.

> Her er den del af koden hvor der er problemer:
>
> if ($vote && !$HelloCheater) {
> mysql_connect($server,$db_user,$db_pass) or die("Database Connect
> Error");
> $query = mysql_db_query($database,"update tb_afstemning set
> votes=votes+1 where name='$vote'") or die("Database Query Error1");
> mysql_close();
> setcookie("HelloCheater", "1", time()+(3600*$cookie_time));
> header("Location: $PHP_SELF");
> exit;
> }

Yeps, der har vi header-fyren. Det er den kode, der skal flyttes. Mit råd
gælder stadig.

--
Mvh.

Niels Andersen
(la nels. anersyn.)

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

Månedens bedste
Årets bedste
Sidste års bedste