Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z sesja...
Forum PHP.pl > Forum > Gotowe rozwiązania
track
Mam nadzieje, ze trafiam do dobrego dzialu. Dobra przejde do rzeczy.

Mam strone na ktorej mam 2 style. W zaleznosci jaki zaladujesz tzn. $temat=style_blue albo $temat=style_green strona jak sie pewnie domyslacie zmienia kolor. Sek w tym, ze chce aby dany styl zostawal tak dlugo, az ja sam nie bede chcial go zmienic. To znaczy wchodze na strone standardowo laduje sie niebieska, ale po kilku kliknieciach chce zmienci ja na zielona. Zmieniam i teraz chce, aby ta strona (zielona) zostala tak dlugo, az nie zechce jej zmienic na niebieska. Pomijam tutuaj zamkniecie przegladarki, bo chce aby narazie przy otworzeniu nowego okna ladowala sie standardowa skora. Mam nadzieje, ze nie namieszalem zbytnio.

Probowalem to zrobic z sesja:

[php:1:101e8f4cea]<?php
session_start();

if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
}

if ($temat == "style_blue")
{
session_unset( "temat" );
session_register( "temat" );
}

if ($temat == "style_green")
{
session_unset( "temat" );
session_register( "temat" );
}
?>[/php:1:101e8f4cea]
Chcialem, aby przed kazdym zarejestrowaniem wyrejestrowal zmienna i zarejestrowal ja jeszcze raz. Niestety to nie dziala. Kto powie mi dlaczego? Z gory dzieki za pomoc.
___
[scanner] Proszę używac BBCode
DeyV
powinno być po prostu tak:
[php:1:d32a1523ae]<?php
if ( in_array($temat , array("style_blue", "style_green" ) ) )
{
$_SESSION['temat'] = $temat;
}

?>[/php:1:d32a1523ae]

a przy okazji poczytaj dokładnie do czego służy funkcja [manual:d32a1523ae]session_unset[/manual:d32a1523ae]
Omega
Mozna zrobić bez sesji, ale jest troche więcej gmatwania. Na każdej stronie ustawiasz zmienną $styl dla przykładu, ustawiasz ukryte pole formulaża z zawartością tej zmiennej i na każdej nastepnej stronie zmienna $styl zawiera tę wartość jaką określiłeś wcześniej. Na podstawie tej zmiennej ustalasz wygląd.
track
Wiem, ze mozna to zrobic bez sesji, ale nie chcialem.
Omega
Ok, to tylko propozycja... biggrin.gif
track
Niestety nie rozwiazalo to mojego problemu do konca. Strona jak wczyta jeden styl, to nie pozwala wczytac juz drugiego. Style wywoluje przez URL
?temat=style_green Drugim problemem jest brak zdefiniowanego stylu na samym poczatku strony, ale wydaje mi sie, ze moge to zrobic w ten sposob

[php:1:35afd5353a]
if($temat == "") $temat = "style_blue";
[/php:1:35afd5353a]

Mam racje? Tylko teraz jak zrobic, zeby mozna bylo zmieniac style po zaladowaniu juz jednego z nich... Z gory dzieki za pomoc.

TRACK
spenalzo
A spróbuj dać przed zmianą stylu na inny
[php:1:5a0f0469c5]<?php
unset($HTTP_SESSION_VARS["temat"]);
$HTTP_SESSION_VARS["temat"]="nazwa_tematu";
?>[/php:1:5a0f0469c5]
I pamiętaj, żeby wszędzie stosować tablice globalne $_POST, $_GET (lub ich starsze odpowiedniki).
track
Zrobilem cos takiego:

[php:1:27ded24ae7]
<?php
if (session_is_registered("temat"))
{
unset($HTTP_SESSION_VARS["temat"]);
$HTTP_SESSION_VARS["temat"]=$temat;
}
else
{
$HTTP_SESSION_VARS["temat"]=$temat;
}
?>
[/php:1:27ded24ae7]

niestety nie dziala i nie wiem dlaczego Moze pomozecie? Poza tym nie mam zarejestrowanej zadnej zmiennej typu $temat = "style_green" dopiero definiuje ja poprzez adres URL index.php?temat=style_green

TRACK
spenalzo
Ja już nic nie kapuję...
To podaj cały kod, i linki które wywołują zmianę tematu.
track
Link wywolujacy zmiane tematu to http://strona.pl?temat=styl_blue

kod strony to:
[php:1:0568d7ec65]<?php

session_start(); // mozna pominac jesli jest sie pewnym ze wlaczona jest opcja auto_start

if (!isset($_SESSION['count'])) { // jesli zmienna nie jest zarejestrowana
$_SESSION['count'] = 0; // przypisz jej poczatkowa wartosc
} else { // jesli jest zarejestrowana
$_SESSION['count']++; // zwieksz jej wartosc
}

echo 'Strona odczytana '.$_SESSION['count'].' razy w ciagu tej sesji';
echo "<p><b>ID sesji</b> $PHPSESSID";

if (session_is_registered("temat"))
{
unset($HTTP_SESSION_VARS["temat"]);
$HTTP_SESSION_VARS["temat"]=$temat;
}
else
{
$HTTP_SESSION_VARS["temat"]=$temat;
}


?>

<html>
<head>
<title>
Szko&sup3;a Mistrzostwa Sportowego im. Kazimierza Górskiego
</title>

<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=iso-8859-2">
<meta name="discription" content="Strona Szko&sup3;y Mistrzopstwa Sportowego im. Kazimierza górskiego w &pound;odzi">
<meta name="Keywords" content="sport, pi&sup3;ka no&iquest;na, szko&sup3;a, mistrzostwa sportowego, kazimierz górski, &sup3;ód&frac14;, taniec">
<meta name="robots" content="index, nofollow">
<meta http-equiv=Page-Exit content=blendTrans(Duration=0.5)>

<STYLE type="text/css">
<?php include ("data/$temat.css"); ?>
</STYLE>

</head>
<body>
<table border=1 cellpadding=0 cellspacing=0 BorderColorLight=black borderColorDark=#C9CACB width=758 align=center class=strona>
<tr><Td>
<table border=0 cellpadding=0 cellspacing=0 width=100% height=150>
<tr><Td class=top>
<?php include ("data/files/logo.php");?>
</td>
<td class=logo>

<!-- <img src=pliki/logo.gif border=0 align=right> -->

</td></tr>
</table>
</i></b>
</td></tr>
<tr><Td class=top_menu>

<?php include ("data/files/menu_top.php"); ?>

</td></tr>
<tr><Td class=glowna>

<?php include ("data/glowna.php"); ?>

</td></tr>
<tr><td class=down>

Copyright &copy; 2002 - 2003 <a href="mailto:track@op.pl">TRACK</a>
</td></tr>
</table>
</body>
</html>[/php:1:0568d7ec65]

[KaMeLeOn]: Czy kiedyś nauczycie się stosować BBcode?
spenalzo
A może BBCodequestionmark.gif? To pewnie przez to nie działa...
track
questionmark.gif? To znaczy... :oops:
KaMeLeOn
To znaczy, że nie przeczytałeś regulaminu...
Przy pisaniu posta jest na górze BUTTON "php", który powoduje że ogarniasz kod znacznikami php... a wynik wygląda mniej więcej tak:
[php:1:9b351f7bb1]<?php
// twoj kod
?>[/php:1:9b351f7bb1]
spenalzo
Ja do zmiany grafiki robiłem coś takiego, że tworzyłem osobny plik, np. coś w tym stylu:
[php:1:fa96be371c]<?php
// plik design.php
session_start();
$design=$HTTP_GET_VARS["set"];
session_register("design");
$HTTP_SESSION_VARS["design"]=$design;
header("Location: ".urlencode(base64_decode($HTTP_GET_VARS["back"])));
?>[/php:1:fa96be371c]

[php:1:fa96be371c]<?php
// inne pliki
echo "<a href="design.php?set=2&back=".base64_encode($HTTP_SERVER_VARS["PHP_SELF"]."?".$HTTP_SERVER_VARS["QUERY_STRING"])."">Zmień design</a>";
?>[/php:1:fa96be371c]
i zawsze działało.
spenalzo
Zrób po zadeklarowaniu nowej wartości
[php:1:8c3a9d85ef]<?php
echo $HTTP_SESSION_VARS["temat"];
?>[/php:1:8c3a9d85ef]
i zobacz co się pokazuje.
track
Dobra zaczynamy od poczatku, bo moj kod caly czas sie zmienia.
Wyglada to teraz tak:

[php:1:c2e1ab6713]
<STYLE type="text/css">
<?
include ("data/$temat.css");
session_start();
session_register("temat");
?>
</STYLE>
[/php:1:c2e1ab6713]

Standardowo nie ma ustawionego, zadnego stylu. Jesli klikam na link
http://strona.pl/index.php?temat=style_blu...SID=numer_sesji (jest to dolaczane automatycznie do linkow na stronie)
strona zmienia sie na niebieska i wszystko jest spoko. Niestety jak klikne na jakis link ktory nie zawiera zdefiniowanego stylu strona otwiera sie "pusta" czyli bez zadnego stylu. Mam nadzieje, ze wyraznie to napisalem. Co polecacie zrobic?
KaMeLeOn
1. session_start() musi być wywołane zanim coś wyślesz do przeglądarki... Czyli:
[php:1:867b8c12a8]<?php
session_start();
?>
<html>
<head>
itd...[/php:1:867b8c12a8]
2. Po co używasz session_register() ? Wystarczy tak...
[php:1:867b8c12a8]<?php
$_SESSION['temat'] = $_GET['temat'];
?>[/php:1:867b8c12a8]
track
Zrobilem jak kazales.

[php:1:fe7c910ec9]
<?php session_start(); ?>

<html>
<head>
<title></title>
<STYLE type="text/css">
<?php
include ("data/$temat.css");
$_SESSION['temat'] = $_GET['temat'];
?>
</STYLE>
[/php:1:fe7c910ec9]

niestety to nie dziala. Kto powie mi dlaczego?questionmark.gif

Teraz na samym poczatku (przy pierwszym zaladowaniu strony) do linkow ladnie zostaje dodany numer sesji. Niestety pozniej numer sesji zniaka z adresu URL.

Oczywiscie temat jest wywolywany tak jak we wczesniejszym poscie.

Pozdrawiam i czekam na pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.