Avatar billede anderskj1 Nybegynder
13. maj 2003 - 00:44 Der er 52 kommentarer og
1 løsning

Problem med brug af include() og header() på samme tid.

Jeg har ved at lave en som er bygget vha. css og tabeller. Så for at kunne flette en script ind i min kode bliver jeg nød til at bruge include.

Scriptet generere nogle links. Det bruger header() til at sende URL til browseren. Men det virker ikke efter at jeg bruge include. Jeg får flg fejl.

Warning: Cannot add header information - headers already sent by (output started at c:\apache\sites\tftinfo\includes\header.php:12) in c:\apache\sites\tftinfo\linkster\linkster.php on line 37

Jeg har fundet dette på nettet.
-------------------
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.
----------------------
Og det har jo nok noget med dette at gøre. Men jeg fatter ikke helt hvad de mener mener med mellemrum og tomme linier?!?
Avatar billede Slettet bruger
13. maj 2003 - 00:48 #1
Welll, der må i det korte og det lange ikke være generet noget output før et header() kald!
Følgende er f.eks output og header vil fejle:
<?php
    echo " ";
    header();
?>

Eller
----------------

<?php header();
----------------
Avatar billede tipsen Nybegynder
13. maj 2003 - 00:48 #2
Du må ikke sende noget som helst html-output til browseren inden dine header kald - det med mellemrum og tomme linier er bare for at gøre opmærksom på, at det også kan opfattes som html og dermed være nok til at ødelægge det for header()
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 00:50 #3
fuck....Findes der et alternativ til at bruger header? Ellers kan jeg ,,uha..kun lave det ved at lave scriptet i en IFRAME istedet for hente det med include
Avatar billede Slettet bruger
13. maj 2003 - 00:53 #4
Det kommer nok lidt an på hvordan du bruger din header()...
Men måske skulle du se lidt på din programstruktur...
jeg kunne forestille mig at du har noget i stil med:
<?php
include("header.php");
echo "Et eller andet....";//Og en masse parsing...
include("footer.php");
?>
I så fald skal du overveje at skifte til:
<?php
//En masse parsing så du har variablen $content
include("header.php");
echo $content;
include("footer.php");
?>
Avatar billede jakoba Nybegynder
13. maj 2003 - 00:55 #5
Hvis du viser koden kan vi nok hitte det blanktegn der skal væk.
Medmindre det er din include fil der direkte skriver noget output.
Avatar billede tipsen Nybegynder
13. maj 2003 - 00:55 #6
Hvad er det for et header-kald du har brug for at lave midt inde i dokumentet?
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 00:58 #7
OK. Jeg kan se jeg ikke fattede hvad header() krævede. Jeg buger et php script der hedder linkster. Dette ganere en liste over links som giver bruger mulighed for at selv at tilføje links osv. Scriptet lægger i en fil der hedder linkster.php. Hvis den køres alene virker det fint. Men hvis den includes midt i et html dokument virker den ikke mere. Men så er der jo også sendt en masse til browseren.

Kig her for fejlen.
http://www.tftinfo.dk/links.php
og tryk på et link.

Men igen. Det er jo klart. Eller hvad? Vil se hele koden?
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:01 #8
ps. links.php ser ud som flg.

<?include ("includes/top_menu.php");?>
<div id="rh-col">
<?require("linkster/linkster.php");?>
</div>
<?include ("includes/bottom.php");?>
Avatar billede Slettet bruger
13. maj 2003 - 01:02 #9
hvad skal du bruge header() til????
Avatar billede jakoba Nybegynder
13. maj 2003 - 01:02 #10
Næppe nødvendigt. du lyder til at hav fattet ideen :-)
måske du kan flytte det header-kald ud af filen og op foran i den fil den inkluderes i?
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 01:02 #11
Du skal vel bare gå direkte til linkster.php  -  det er en anden site
der skal vises, og derfor kommer der alligevel ikke noget af din
html ud tril brugeren.
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:05 #12
Nej linkster.php skal indgå som en del af layoutet med header.php og footer.php. Men hvordan kan jeg flytte header() kaldet OVENOVER den funktion som bestemmer hvad header() skal kalde? Kan kan kun skrive header("Location: $URL"); hvor URL er tom.....
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 01:06 #13
frames/iframes - der er ingen anden vej. Og din frame så er det linkster.php direkte
Avatar billede Slettet bruger
13. maj 2003 - 01:06 #14
jakoba og erik >> Er det ikke noget med at han kan gemme outputtet i en buffer?
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:07 #15
outputtet det har jeg også læst lidt om . Men der blev jeg sgu sat af sporet. Noget med at fylde den og flushe den tildsidst. Men da det er et "færdog" lavet script vil det umiddlebart være urimeligt meget arbejde at lave om. Er IFRAME forøvrigt XHTML 1.1 ? ELler er det IE only
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 01:08 #16
Jo, der er en anden vej du bør overveje nøje: drop ideen med
at den anden site skal være en del af dit layout. Det er ikke
særlig venligt overfor din bruger, og har kun den ene virkning,
at han synes du er anmassende. Det virker næppe heller altid
Avatar billede tipsen Nybegynder
13. maj 2003 - 01:10 #17
Forstår stadig ikke, hvad header() egentlig bruges til - og om det rent faktisk er nødvendigt... - men udover det er det helt korrekt, at man kan bruge outputbuffering til at omgå problemerne - se mere på: http://dk.php.net/manual/en/ref.outcontrol.php
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:10 #18
Nu tror jeg du har misforstået noget. (måske) scriptet er IKKE et andet site men en del af min egen side. Det jeg vil (og som scriptet gør) er at når jeg trykker på de links linkster.php genere bliver der åbnet et NYT vindue med linket i. (ref. http://tftinfo.dk/links.php
Avatar billede Slettet bruger
13. maj 2003 - 01:12 #19
Lige et skud i tågen... men prøv det her:
<?php ob_start("callback");?>
<?include ("includes/top_menu.php");?>
<div id="rh-col">
<?require("linkster/linkster.php");?>
</div>
<?include ("includes/bottom.php");?>
<?php
ob_end_flush();
?>
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:12 #20
links.php henter altså linkter.php som laver de 2 links der ses. Men linkster kan ikke sende header() da jeg jo har skrevet en masse i browseren allerede.
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:12 #21
prøver lige. regin
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 01:12 #22
Nej jeg forstår nok ikke. Man trykker på Acer-linket. Jeg forventer
at der åbner et nyt vindue med http://www.acer.dk - men du mener, så
vist jeg forstår, at der åbner et vindue med dine menuer og logoer, og
med http://www.acer.dk som en del af dette ??
Avatar billede Slettet bruger
13. maj 2003 - 01:13 #23
anders>>Fjern "callback" fra ob_start("callback")
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:13 #24
WEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:13 #25
nej det vikrer
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:14 #26
Avatar billede Slettet bruger
13. maj 2003 - 01:14 #27
*G* første gang jeg har prøvet med det!
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 01:15 #28
Så kunne du være gået direkte til linkster.php i stedet for.
Du laver unødvendigt arbejde
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:15 #29
I skal sgu alle sammen have mange tak for super god hjælp. Point falder til regin da han kom med den endelig løsning. :)))))
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:15 #30
hvordan?
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:16 #31
mener du isteder for at linkte til links. så linke direkte til linkster.php?
Avatar billede Slettet bruger
13. maj 2003 - 01:17 #32
ja... erik har faktisk ret...
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 01:17 #33
Ja, ... med den rigtige parameter, som jeg ikke lige
kender. Det er ikke:
http://tftinfo.dk/linkster/linkster.php?URL=http://www.acer.dk
Avatar billede tipsen Nybegynder
13. maj 2003 - 01:17 #34
Enig med Erik - unødvendig (og langsommelig) omvej for at nå målet...
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:18 #35
hmmmmm. Nu ved jeg ikke hvad i 2 snakker om. lol.
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:20 #36
linkster scriptet sender bruger afsted sådan her.
if ($QUERY_STRING && $LID && $URL) {
  mysql_query("UPDATE $link_table SET Clicks = Clicks+1 WHERE ID = $LID");  // add 1 to click count
  header("Location: $URL");  // send user to website
}
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:22 #37
Men måske er det bare fordi jeg er for træt jeg ikke fatter noget. Tror nærmest jeg holder mig til den anden løsning. Nu bliver det heller ikke et 10K hits site jeg laver. ;) Men jeg lader lige ? stå 15 min. hvis der nogen der har en opfølgning. Så sider jeg klar.
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 01:24 #38
Du skal bare have linket til

http://tftinfo.dk/linkster/linkster.php?LID=1&URL=http://www.acer.dk

og sørge for at LIB og URL passer sammen. Og det er altså i
stedet for at linke til din egen links.php
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:26 #39
Ahhh. MEN linkster.php laver SELV et opslag i min MQSQL DB og henter alle de links der nu findes og derefter udskrirver dem.
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 01:28 #40
Det er også pænt af den :) De links der bliver sat ind på
din side skal så blot laves til at have det udseende jeg har vist dig
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:30 #41
AHHHHHHHHH. Nu fatter min lille hjerne det. :). Ja selvfølgelig. !
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 01:31 #42
Ser du dig omkring på nettet, hvor den der linkster bruges,
så er det også ca. sådan.

Skal vi prøve?
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:34 #43
Mener du / i at jeg statisk skal lave dette foran hvert link? Og så appende URL på?

http://tftinfo.dk/linkster/linkster.php?LID=1&URL=
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 01:35 #44
Nej, LID-en er "Løbenummeret" i tabellen - bruges til
at opdatere hvor mange gange der er klikket på linket.'
Du skal hente URL-en OG id-en ud ved udskrift af links
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 01:35 #45
Hvordan ser det ud nu?
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:35 #46
ahhh. det var også det jeg mente. Men det var sgu ikke nemt at vide.
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 01:37 #47
Det er derfor eksperterne sidder her. For at hjælpe :))

Jeg kigger på dit site i morgen igen....
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:38 #48
OK! Jeg lader det stå åbenet. Tak for hjæpen indtil vider. og godnat
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:46 #49
Det løst jo problemet elegant!
Orginal kode:
----------------
echo "<td bgcolor='$row3_color' id=linkster-list><a href=$PHP_SELF?LID=$LID&URL=$URL".$new_window.">$Website</a>$LDescription</td>\n";


Ny kode:
------------------
echo "<td bgcolor='$row3_color' id=linkster-list><a href=http://www.tftinfo.dk/linkster/linkster.php?LID=$LID&URL=$URL".$new_window.">$Website</a>$LDescription</td>\n";

Var det ikke det du mente?
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 01:54 #50
hvis jo så SVAR lige på spørgsmåler. Så bliver det det der "vinder". Det er sgu fedt i gider hjælpe herinde forøvrigt. Meget motiverende når man skal igang med noget nyt. Har programmeret i C++ i 3 år nu. Men det hjælper jo ikke meget med PHP´s finurligheder.
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 07:42 #51
Du kan formentlig nøjes med:

echo "<td bgcolor='$row3_color' id=linkster-list><a href=/linkster/linkster.php?LID=$LID&URL=$URL".$new_window.">$Website</a>$LDescription</td>\n";

Jah, det er lidt mærkeligt, men vi synez vist det er sjovt at hjælpe....;))
Avatar billede anderskj1 Nybegynder
13. maj 2003 - 08:46 #52
Ja det virkede også :). Tak for hjælpen
Avatar billede tipsen Nybegynder
13. maj 2003 - 09:17 #53
anders: C++ hjælper meget på PHPs finurligheder - det har sandsynligvis stor indflydelse på hvor hurtigt du lærer det og hvor godt du forstår 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