Avatar billede mac10 Nybegynder
18. januar 2010 - 22:09 Der er 17 kommentarer og
1 løsning

Session først blive sat efter pageload?

Hej allesammen,

Jeg har en session til at afgøre hvilket sprog man ønsker at se sitet i. Det virker fint at skifte mellem sprogene, men problemmet er når man første gang kommer på hovedsiden eller en underside, så ved den ikke hvilke data den skal hente.

Jeg har alle data lagt 2 forkellige filer:
lang/lang_dk.php
lang/lang_eng.php

Jeg har følgende check til at se om der allerede er sat en session:

if(!$_SESSION['lang']) {
    $_SESSION['lang']     = 'dk';
}

Så hvis ikke der er en session så sætter den det til dansk.

og neden under den har jeg:
include('lang/lang_'.$_SESSION['lang'].'.php');

Når man kommer ind på siden får man denne fejl:
Warning: include(lang/lang_.php) [function.include]: failed to open stream: No such file or directory i...

Hvis man så opdaterer siden, så virker det fint.

Nogen der ved hvordan jeg kan knække denne kode?
Avatar billede repox Seniormester
18. januar 2010 - 22:16 #1
Vis lige din fulde kildekode ned til den linie der fejler.
Avatar billede mac10 Nybegynder
18. januar 2010 - 22:24 #2
Hej repox,

Jeg har en masse includes og diverse og selvfølgelig session_start(); og efterfølgende kommer:

if(!$_SESSION['lang']) {
    $_SESSION['lang']     = 'dk';
}

include('lang/lang_'.$_SESSION['lang'].'.php');

Det er der koden knækker. Når den skal include lang filen fordi den ikke kan finde $_SESSION['lang'] så den har intet at include, men jeg definere den jo lige over :/
Avatar billede Slettet bruger
18. januar 2010 - 22:27 #3
Den kode du viser os er rigtig nok, så det må tydeligvis være et andet sted i koden det går galt. Måske sætter du variablen til en tom streng længere oppe i koden?
Avatar billede repox Seniormester
18. januar 2010 - 22:31 #4
Som sagt, et sted undervejs gør du noget forkert, så du kan lige så godt - først som sidst - vise det jeg bad dig om.
Brug evt pastebin...
Avatar billede Slettet bruger
18. januar 2010 - 22:42 #5
Avatar billede mac10 Nybegynder
18. januar 2010 - 22:43 #6
Tror ikk det nytter fordi der ikke er så meget at byde på længere oppe, men værsgo :)

<?php
session_start();
require_once('smarty/Smarty.class.php');
include('config.php');

$smarty = new Smarty;

if(!$_SESSION['lang']) {
    $_SESSION['lang']     = 'dk';
}

include('lang/lang_'.$_SESSION['lang'].'.php');

.....

Det er blot Smarty php som bliver integreret og config.php som indeholder mine DB data.
Avatar billede repox Seniormester
18. januar 2010 - 22:55 #7
Prøv lige det her:


<?php
<?php
session_start();
//require_once('smarty/Smarty.class.php');
//include('config.php');

//$smarty = new Smarty;

if(!$_SESSION['lang']) {
    $_SESSION['lang']    = 'dk';
}

include('lang/lang_'.$_SESSION['lang'].'.php');
die(); // Så kan vi se om det er noget af det du inkluderer der får skidtet til at fejle
.....




og så se om den fejler nu, når du besøger siden den første gang.
Avatar billede mac10 Nybegynder
18. januar 2010 - 23:30 #8
Så viser den blot fejlen igen bare uden alt grafik og css inkluderet :S
Avatar billede repox Seniormester
18. januar 2010 - 23:36 #9
Link?
Avatar billede mac10 Nybegynder
19. januar 2010 - 00:40 #10
Arbejder på det offline. Da mærkeligt hvis i siger det er sådan man gør og det ikke virker?
Avatar billede Slettet bruger
19. januar 2010 - 08:57 #11
Prøv lige at ændre din kode til dette:

echo (isset($_SESSION['lang'])) ? '$_SESSION[\'lang\'] = ' . $_SESSION['lang'] : '$_SESSION['\lang\'] er ikke sat.';

if(!$_SESSION['lang']) {
    $_SESSION['lang']     = 'dk';
}

echo '$_SESSION[\'lang'\] = ' . $_SESSION['lang'];

include('lang/lang_'.$_SESSION['lang'].'.php');


og fortæl os hvad den siger. (Skidt med fejl.)
Avatar billede repox Seniormester
19. januar 2010 - 09:59 #12
Sidder du tilfældigvis på et windowsmiljø?
Avatar billede mac10 Nybegynder
19. januar 2010 - 10:53 #13
kimsey,
Jeg får denne fejl:
Warning: include() [function.include]: Failed opening 'lang/lang_.php' for inclusion (include_path='.;C:\php5\pear') in C:.......\index.php on line 9
er ikke sat.

repox,
Ja det gør jeg?
Avatar billede repox Seniormester
19. januar 2010 - 12:52 #14
#13
Prøv at flytte det ud på et driftet miljø; det er umuligt at debugge på et windows miljø. Jeg vil næsten garantere dig at lige så snart du får smidt skidtet op på en live server, så virker det...
Avatar billede stigma Nybegynder
19. januar 2010 - 13:40 #15
Prøv evt. at bruge isset() i din din if sætning, mener jeg har været ude i samme problem, hvor det hjalp, men er ikke sikker :)

if (isset($_SESSION['lang'])) {
    $_SESSION['lang'] = 'dk';
}
Avatar billede Slettet bruger
19. januar 2010 - 17:08 #16
Det kan måske være fordi du kører Vista eller 7, og at PHP prøver at gemme et sted den ikke har rettigheder til. En simpel test kunne være denne:

$_SESSION['abc']='abc;echo $_SESSION['abc'];
Avatar billede mac10 Nybegynder
19. januar 2010 - 19:00 #17
Har fundet ud af hvorfor...

Jeg kører med Smarty PHP og har en fælles header.php for alle filerne som jeg havde sat den i, men det var åbenbart ikke nok. Så istedet har jeg lavet en fil jeg includer på alle siderne som indeholder:

session_start();
if(!$_SESSION['lang']) {
    $_SESSION['lang']    = 'dk';
}

Og så virker det fint.

Mange tak allesammen fordi i bidragede til at hjælpe mig. Jer der har gjort en indsats, lav venligst svar. Tak.
Avatar billede Slettet bruger
19. januar 2010 - 23:25 #18
Jeg forstod ikke helt løsningen, men skidt med det.
Jeg er glad for at du fik det til at virke :)

Her kommer et svar fra mig hvis du føler at jeg har hjulpet dig.
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