Avatar billede christian-s Nybegynder
07. marts 2003 - 23:59 Der er 17 kommentarer og
2 løsninger

Regler for header

Hvad er de præcise regler for hvornår jeg kan sætte en header til at henvise til en anden side?

Her tænker jeg på: header("Location: side.html");

Jeg har tit problemer med det, hvis jeg har included filer eller andet..
Avatar billede ztyxx Nybegynder
08. marts 2003 - 00:04 #1
headers skal stå før out put, som der sikkert kan være i dine includes, på nogle servere kan en tom linie betragtes som output
Avatar billede ztyxx Nybegynder
08. marts 2003 - 00:05 #2
Avatar billede erikjacobsen Ekspert
08. marts 2003 - 07:28 #3
En regel som sædvanlig omgås, og ofte virker alligevel, er at
der skal stå en fuld URL:

  header("Location: http://...osv...");
Avatar billede binderup Nybegynder
08. marts 2003 - 09:16 #4
<religionskrig>

Du kan omgå fejlen ved at bruge Output buffering (http://dk.php.net/manual/en/function.ob-start.php) hvis du pakker din PHP kode ind i dette så kan du skrive lige så mange gange til headeren som du vil da outputtet først kommer efter scriptet er kørt færdigt.

Outputter du meget tekst så kan det betale sig at bruge gz komprimering da det vil speede overførelsen en anelse op.

</religionskrig>

(grunden til at jeg skriver religionskrig er at folk er meget uenige om dette er god skik eller ej - min holdning er: det er en funktion hvorfor så ikke benytte sig af den)
Avatar billede christian-s Nybegynder
08. marts 2003 - 12:42 #5
tak for jeres links, jeg vil dog godt til sidst have en kort løsning på dette:

if ($action) {
echo "her kommer en form";
}

else {
header("Location: link.php");
}

hvordan skal det udformes?
Avatar billede binderup Nybegynder
08. marts 2003 - 12:56 #6
Der er ikke noget galt med syntaksen, men det vil hjælpe meget hvis du lige beskrev problemet...
Avatar billede christian-s Nybegynder
08. marts 2003 - 13:01 #7
Den skrive header allerede er blevet sendt.
Jeg require en fil øverst i scriptet, er det fejlen?
Avatar billede binderup Nybegynder
08. marts 2003 - 13:03 #8
undersøg om der ikke er en tiom linje eller noget i den stil i toppen af filen.

ellers prøv

<?
ob_start();

//her skal al din kode så være

ob_end_flush();

?>
Avatar billede christian-s Nybegynder
08. marts 2003 - 13:18 #9
ingen af delene virker, er der ikke en mere simpel måde?
koden ser ud i princippet som sådan:

require("fil.php")

if (!$action) {
echo "her er formen";
}

if ($action) {

if ($checkbox) {
echo "formen bliver indsat i db";
}

else {
header("Location: fil.php");
}

}
Avatar billede binderup Nybegynder
08. marts 2003 - 13:22 #10
jeg tror at du blander header og require/include noget sammen

din require kommando henter file.php og parser den hvorfor det ikke giver mening at du skriver til headeren.
Avatar billede christian-s Nybegynder
08. marts 2003 - 13:26 #11
i min require henter jeg databaseoplysninger ind mv., mens jeg bruger headeren til videresendelse. er det helt forkert?
Avatar billede binderup Nybegynder
08. marts 2003 - 13:31 #12
du henter fil.php og henviser til fil.php - det er jo den samme fil?
Avatar billede christian-s Nybegynder
08. marts 2003 - 15:32 #13
ja, undskyld! det gør jeg heller ikke, det er kun et ekempel for at vise hvordan det ser ud.
det er ikke de samme filer jeg benytter mig af!
Avatar billede binderup Nybegynder
08. marts 2003 - 15:34 #14
så tror jeg at du skal tage at poste koden her som den ser ud (selvfølgelig uden passwords)
Avatar billede christian-s Nybegynder
08. marts 2003 - 15:56 #15
Således koden hvor jeg de to steder med "//" har problemer med vidersendelse..

add_bogforside.php:
<?php

require("../databaseoplysninger.inc");

if (!$action) {

echo "        <form action='add_bogforside.php' method='post' enctype='multipart/form-data'>\n";
echo "        <input type='hidden' name='action' value='go1'>\n";

echo "        <b>Bogforside (max 120px i bredden!):</b><br>\n";
echo "        <input type='file' name='enfil'><br><br>\n";

echo "        <b>Beskrivelse:</b><br>\n";
echo "        <textarea cols='20' rows='5' name='beskrivelse'></textarea><br><br>\n";

echo "        <b>PDF (kryds hvis .pdf-fil skal vedlægges):</b><br>\n";
echo "        <input type='checkbox' name='pdf' value='checkbox'><br><br>\n";

echo "        <input type='submit' name='submit' value='Tilføj'>\n";
echo "        </form>\n";

}

if ($action == 'go1') {

mysql_connect($host,$brugernavn,$kodeord) or die("Kan ikke få forbindelse til serveren!");
mysql_select_db($database) or die("Kan ikke få forbindelse til databasen!");

$lowercase = strtolower($enfil_name);

copy($enfil, "/..../$lowercase");

$query = mysql_query("INSERT INTO .....)");

$bog_id = mysql_insert_id();

if ($pdf == 'checkbox') {

echo "        <form action='add_bogforside.php' method='post' enctype='multipart/form-data'>\n";
echo "        <input type='hidden' name='action' value='go2'>\n";
echo "        <input type='hidden' name='bog_id' value='$bog_id'>\n";

echo "        <b>PDF:</b><br>\n";
echo "        <input type='file' name='enfil'><br><br>\n";

echo "        <input type='submit' name='submit' value='Tilføj'>\n";
echo "        </form>\n";

}

else {
// DETTE VIRKER IKKE, SKAL VIDERESENDE TIL EKSEMPLER.PHP
header("Location: eksempler.php");
}

}

if ($action == 'go2') {

mysql_connect($host,$brugernavn,$kodeord) or die("Kan ikke få forbindelse til serveren!");
mysql_select_db($database) or die("Kan ikke få forbindelse til databasen!");

$lowercase = strtolower($enfil_name);

copy($enfil, "/mappe.../$lowercase");

$query = mysql_query("UPDATE ......'");

// DETTE VIRKER IKKE, SKAL VIDERESENDE TIL EKSEMPLER.PHP
header("Location: eksempler.php");

}

?>
Avatar billede binderup Nybegynder
08. marts 2003 - 16:05 #16
Og hvad får du af fejl når du bruger

<?
ob_start();

//her skal al din kode så være

ob_end_flush();
?>

Desuden vil jeg anbefale at du ikke bruger en .inc fil til at definere dine mysql oplysninger, hvis ikke disse ligger i en beskyttet folder eller uden for WWW-scope så er det muligt at se dine database oplysninger. Lav det om til .php for så vil det blive parset og skjult.
Avatar billede christian-s Nybegynder
08. marts 2003 - 16:46 #17
ok, tak for tippet!

men der er ingen forskel, stadig: Warning: Cannot add header information - headers already sent by (output started ...
Avatar billede christian-s Nybegynder
12. marts 2003 - 20:40 #18
har løst det med et lille javascript.
selvom jeg ikke fandt ud af hvorfor header ikke virker, deler vi alligevel!
Avatar billede ztyxx Nybegynder
12. marts 2003 - 23:04 #19
takker for point :-)
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