Autor Zpráva
nigdo
Profil
Už od včera si nevím s tímto problémem rady:
Mám 2 oznámení, která chci, aby se pravidelně střídali při každém dalším kliknutím na odkaz (tedy přechod na další stránku).
Po projití pár textů, jsem se rozhodl pro sessions, ale nefunguje to jak má:
session_start();
//...
if (isset($_SESSION['cislo'])) {
if ($_SESSION['cislo'] == "1") {
//text1
$_SESSION['cislo'] = "2";}
else {
//text2
$_SESSION['cislo'] = "1";}}
else{
//text3
$_SESSION['cislo'] = "1";};

Při tomto kódu mi neustále vyskakuje "text1".
Nevíte někdo co dělám špatně?
Keeehi
Profil
nigdo:
Až na pár věcí to máš správně. úplně poslední středník tam nemá co dělat. Číslo ukládáš jako string, proč? Ale na funkčnost by to mít vliv nemělo (pro dva stavy by se lépe hodilo true/false nebo 1/0)

Chybu tam tedy obecně nemáš. Zkus si tedy před tou podmínkou vypsat tu sessions, ať víš, co tam leze (var_dump).

Takto by to mohlo vypadat s true/false:
session_start();
//…
if (isset($_SESSION['cislo'])) {
  if($_SESSION['cislo'])
    //text1
  else
    //text2

  $_SESSION['cislo']=!$_SESSION['cislo'];

else{
  //text3
  $_SESSION['cislo'] = true;
}
Spectator
Profil
nigdo:

Co je na tom špatně?
Funguje to normálně.
nigdo
Profil
Spectator:
Špatně je to, že mi při první návštěvě vyskočí text3, a pak už jen stále text1. Správně by se měly text1 a text2 střídat.
nigdo
Profil
Keeehi:
Díky za pomoc, ale problém je pořád stejný. Zkoušel jsem to na localhostu i na serveru, ale chová se to stejně. Není tedy nějaká jiná možnost, jak zařídit střídání dvou věcí?
session_start();
//…
var_dump($_SESSION['cislo']);//stále se drží true
if (isset($_SESSION['cislo'])) {
  if($_SESSION['cislo'])
    //text1
var_dump($_SESSION['cislo']);//true
$_SESSION['cislo']=!$_SESSION['cislo'];
var_dump($_SESSION['cislo']);//false
  else
    //text2

  $_SESSION['cislo']=!$_SESSION['cislo'];

else{
  //text3
  $_SESSION['cislo'] = true;
}
tiso
Profil
nigdo: Keeehi tam nedoplnil zátvorky okolo if/else, takže tvoj kód robí niečo iné ako ten od Keeehi.
nigdo
Profil
tiso:
V kódu je mám, když jsem to psal, tak jsem to jen zkopíroval od Keeehi a přikopíroval tam pár věcí.
tiso
Profil
nigdo: ak by si ich doplnil správne, tak by ti ten kód fungoval.
Alebo máš chybu (ovplyvňuješ tú SESSION premennú) ešte niekde inde…
nigdo
Profil
tiso:
Takhle to mám: (stále vyskakuje "text1")
session_start();
//...
if (isset($_SESSION['cislo'])) {
  if($_SESSION['cislo']){echo"text1";
    var_dump($_SESSION['cislo']);
    $_SESSION['cislo']=!$_SESSION['cislo'];
    var_dump($_SESSION['cislo']);}
  else{echo"text2";
    var_dump($_SESSION['cislo']);
    $_SESSION['cislo']=!$_SESSION['cislo'];}}
else{
  echo"text3";
  $_SESSION['cislo'] = true;
}

Jinde se sessions nic nedělám.
Spectator
Profil
nigdo:
já tvůj kód okopíroval a funguje mi uplně bez problému.
Spíš se podívej, jestli s $_SESSION['cislo'] nemanipuluješ někde mimo tent blok
nigdo
Profil
Spectator:
Tohle jsou jediné sessions, které na celém webu používám.
Vyzkoušel jsem to ve více prohlížečích:
IE: zasekne se to na text2 (už se to pak nezmění)
FF: totéž, ale s text1
Opera: totéž, ale s text1
Chrome: funguje bez chyby
xmark
Profil
Nemůže být problém v tom, že se snažíš tu session zpracovávat jako bool? Neříkám, že by to nemělo fungovat, ale nemám v to úplnou důvěru. Zkusil bych tam místo toho pracovat třeba s nulou a jedničkou.
Spectator
Profil
nigdo:

xmark:
Zkusil bych tam místo toho pracovat třeba s nulou a jedničkou.
Ano! Bez uvozovek.

Pokud ti to někde funguje a někde ne, tak neni problem v session ani v podmínkách, ale v tom, čim to plníš, protože už tu moc jiných věcí nezbývá.
xmark
Profil
Spectator:
Ano. Bez uvozovek. Vždycky chci mít jasno, jestli pracuju s boolem, číslem nebo stringem. A právě proto, že tady mi to jako úplná jistota nepřipadá, protože obsah session se ukládá jako string, navrhuju zkusit jiné řešení - číslo, protože tam je chyba vyloučena.

Netvrdím, že chyba při konverzi bool -> string -> bool nastala, jen eliminuju tu možnost. Co se ti na tom nelíbí?

Pokud ti to někde funguje a někde ne, tak neni problem v session ani v podmínkách
Ta úvaha je v pořádku, za předpokladu, že nigdo to chování popsal přesně a nespletl se. A těch případů jsem tady viděl větší než malé množství.
Spectator
Profil
xmark:
za předpokladu, že nigdo to chování popsal přesně a nespletl se
To je pravda. Dost často se zakomentuje část v podmínce a napíše výmluvně // nejaky text a pritom je zasadni chyba prave tam
nigdo
Profil
Dal jsem tam tedy čísla, ale problém přetrvává, Chrome funguje bez chyby, IE má průběh text3, text1, a poté zůstane na text2, FF a Opera zůstanou už na text1.
Přímo v kódu žádné komentáře nemám.
if (isset($_SESSION['cislo'])) {
  if($_SESSION['cislo'] == 1){
    echo"text1";
    $_SESSION['cislo'] = 2;
    var_dump($_SESSION['cislo']);}//píše int(2)
  else{
    echo"text2";
    $_SESSION['cislo'] = 1;
    var_dump($_SESSION['cislo']);}}// píše int(1)
else{
  echo"text3"; 
  $_SESSION['cislo'] = 1;}

Nenapadá tedy někoho úplně jiný způsob, jak zajistit střídaní dvou věcí?
Spectator
Profil
nigdo:
já používám operu a funguje normálně to, co tady odsud okopíruju.

Pokud tam v tom skriptu nemáš ještě něco okolo, tak je problém někde ve hvězdách, protože mě to funguje od začátku stejně a to uplně v klidu

EDIT: Vyzkoušeno v Opeře, IE6, FF - proste uplně v klidu. Řekl začínám mít obavu, že problém je někde u tebe

Tady je link na ozkoušení. je to přesně to, co jsem tady okopčil
nigdo
Profil
Spectator:
Tohle mi funguje dobře. Chyba je tedy u mě.
Zkusil jsem vymazat nějaké js, jestli se to neruší, a po smazání
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
to začalo fungovat. Vůbec mě nenapadlo, že by se to mohlo nějak ovlivňovat.
Díky všem za pomoc.
Spectator
Profil
nigdo:
Neni zač =)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0