Avatar billede gizmo1234 Nybegynder
12. marts 2004 - 19:26 Der er 8 kommentarer og
1 løsning

Header problem

Hej.
Hvad gør i andre hvis i har brugt et session login, hvor der jo bliver brugt header, og man så senere i koden også skal bruge header til at smide en person et sted hen efter personen har smidt noget ind i en database?

Man kan jo ikke have 2 headers i samme dokument, så hvordan gør i det?

Og jeg bruger Session login, fordi mit webhotel ikke har apache, så kan ikke bruge htaccess, ville ellers gerne, men det kan man bare ikke...
Hvad ville i gøre der?
Avatar billede ztyxx Nybegynder
12. marts 2004 - 19:33 #1
den letteste løsning er outputbuffering, ved at omslutte din koden med
<?
ob_start();
?>
kode...
<?
ob_end_flush();
?>
vil du ikke få header-fejl, men ved korrekt kodning kan det undgås
Avatar billede ztyxx Nybegynder
12. marts 2004 - 19:34 #2
Avatar billede sukos Juniormester
12. marts 2004 - 22:11 #3
Eller lade alle dine submits blive udført af en fil, som så sender brugeren tilbage til forgående side
Avatar billede gizmo1234 Nybegynder
12. marts 2004 - 22:13 #4
Kan du komme med et eksempel på hvordan det kunne se ud sukos?
Avatar billede sukos Juniormester
12. marts 2004 - 22:27 #5
Du klipper du jo bare alle dine "form-actions" ud af dine scripts, og gemmer dem i en enkelt fil.
Bruger selv  en session til at sende tilbage, men kunne jo så være et hidden felt i stedet.

session: (flg. ligger i en fil som includes på ALLE sider) (bruges på showsource.dk)

$no_session_back = array("db_handle.php", "db_kon.php", "db_user.php", "db_upload.php", "404.php");

if(!in_array(basename($_SERVER["PHP_SELF"]), $no_session_back)) {
$_SESSION["back"] = $_SERVER["REQUEST_URI"];
}

i alle filer som der kan submittes til, og som ligger i array'et, $no_session_back, startes med:

if(isset($_SESSION["back"])) {

    if(isset($_POST["mail"])) {
..................
header("Location:". $_SESSION["back"] ."");
exit;
    }

    if(isset($_POST["update_mysql"])) {
..................
header("Location:". $_SESSION["back"] ."");
exit;
    }

}

Eller med et hidden felt
<form action="/db_handle.php" method="post">
<input type="hidden" name="back" value="<?php echo $_SERVER["REQUEST_URI"]; ?>">

resten af form.....................

</form>
Det kan jo så bruges til at sende brugeren tilbage til samme side
Avatar billede gizmo1234 Nybegynder
13. marts 2004 - 14:53 #6
Fandt lige ud af at jeg ikke kan bruge det der sukos, fordi den hos mig ikke skal gå tilbage, men gå til en ny side... Jeg prøver lige det med
<?
ob_start();
?>
kode
<?
ob_end_flush();
?>
Avatar billede -xyz- Nybegynder
14. marts 2004 - 16:30 #7
Output Buffering (OB)er totalt overkill på et så lille problem, når det ofte kan løses med lidt omstrukturering af scriptet
Avatar billede Slettet bruger
14. marts 2004 - 22:21 #8
Så vidt jeg kan se, er hele problemstillingen baseret på den antagelse, at der ikke kan sendes mere end en enkelt header af et script. Da dette er forkert, er problemet ikkeeksisterende (eller i hvert fald et andet end det antagede).

Du siger, at dit hotel ikke kører Apache. Hvis de kører IIS 5, så kan det være problemet, at den simpelthen nægter at lave en cookie og en locationheader på samme tid.

Jeg vil forslå, at du opretter en session allerede på din startside, således at cookien bliver oprettet der. Så skulle det kunne lade sig gøre at bruge en location-header i login-scriptet.
Avatar billede gizmo1234 Nybegynder
18. marts 2004 - 20:17 #9
Jeg har fundet en anden måde at fixe det på, så lukker spørgsmålet. Tak fordi i prøvede på at hjælpe :)
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