Autor Zpráva
Jata
Profil
Na svých stránkách mám udělanou změnu jazyka, mám to řešené pomocí sessions a cookies, cookies mám akorát pro zapamatování posledního jazyka, ale potřebuju, aby když přijde někdo, kdo má cookies vypnuté (sice je málo takových lidí, ale pokud se nemýlim, tak roboti je mají vypnuté), tak aby se využívalo pouze sessions, jenže vždycky to chvíli načítá a potom mi FF napíše, že vznikla smyčka při přesměrování a nic. Na úvodní stránce mam hned nahoře:

<?php
session_start();
if ($_COOKIE["hc-lang"]!="" && $_SESSION["hc-lang"]=="") { // pokud existuje cookie, ale session neni nastavena
$_SESSION["hc-lang"]=$_COOKIE["hc-lang"]; // nastav obsah session podle obsahu cookie
}
elseif ($_SESSION["hc-lang"]=="") { // pokud je session prázdná
Header("Location: check-lang.php"); // přesměruj na kontrolování jazyka
}
?>

Dále mam udělaný soubor check-lang.php, který podle databáze IP adres určí (není to můj výtvor, našel jsem to na netu), jestli je návštěvník z ČR nebo SR:

<?php
session_start();
$IPaddress=$REMOTE_ADDR;
$lang=iptocountry($IPaddress);

if ($lang=="cz" || $lang=="sk"){ // pokud se zjistilo, že je návštěvník je z ČR nebo SR
$_SESSION["hc-lang"]="cz"; // nastaví se session na cz
}
else{
$_SESSION["hc-lang"]="en"; // jinak se nastaví na en
}

function iptocountry($ip) {
$numbers = preg_split( "/\./", $ip);
include("ip_database.php");
$code=($numbers[0] * 16777216) + ($numbers[1] * 65536) + ($numbers[2] * 256) + ($numbers[3]);
foreach($ranges as $key => $value){
if($key<=$code){
if($ranges[$key][0]>=$code){$lang=$ranges[$key][1];break;}
}
}
if ($lang==""){$lang="unkown";}
return $lang;
}
Header("Location: index.php"); // přesměrování na hlavní stránku
?>

Nefunguje mi to akorát když zakážu cookies. Díky za nápady, co s tím.
k
Profil *
je to logicky.
Tim ze zakazes cookies tak tvuj script "index.php" zavola "check-lang.php" a v nem si lang ulozis do session a zavolas index.php kterej zjisti ze nema nic v cookie a zavola check-lang.php atp. atp...

v check-lang.php napis:

Header("Location: index.php?redir=1");

a v index.php:

elseif ($_SESSION["hc-lang"]=="" && !array_key_exists('redir',$_GET)) { // pokud je session prázdná

-- slo by to resit i pomoci session a mozna by to bylo lepsi. Zkus se kouknout na fce array_key_exists() a isset() a zacni je pouzivat. Tvuj script bude hazet spoustu noticu.
Jata
Profil
Po tom, co jsem to upravil, jak jsi říkal, mi sice už ta smyčka nedělá, ale nefunguje mi změna jazyka, přijde mi, že se vůbec ty session nenastaví.

Zkusil jsem to udělat pomocí session, do toho check-lang.php jsem přidal nastavení session hc-lang-ad na hodnotu 1, takže jsem logicky myslel, že když přidam na index.php následující kód za ten původní, tak mi to půjde:

session_start();
if ($_SESSION["hc-lang-ad"]!="1") { // pokud se už kontroloval jazyk, tak už se to provádět nebude
if (!isset($_SESSION["hc-lang"])) { // pokud není nastavená session hc-lang
if ($_COOKIE["hc-lang"]!="") { // pokud není cookie lang prázdná
$_SESSION["hc-lang"]=$_COOKIE["hc-lang"]; // nastav podle cookie session
}
Header("Location: check-lang.php"); // přesměruj
}
}

v check-lang.php jsem akorát přidal za ten Header nastavení session: $_SESSION["hc-lang-ad"]="1";
potom mam ještě taky soubory set-cz.php a set-en.php:

set-cz.php:
<?php
session_start();
setcookie("hc-lang", "cz", time()+51840000);
$_SESSION["hc-lang"]="cz";
if ($_GET["back"]=="") {
$kam="http://www.heroes-centrum.com/";
}
else {
$kam="http://www.heroes-centrum.com/";
$kam.=$_GET["back"];
}
Header("Location: $kam");
$_SESSION["hc-lang-ad"]="1";
?>

set-en.php:
ten je stejnej jako ten předchozí, akorát se nastavuje jako obsah cookie a session "en"
k
Profil *
eh no donutil si me..

index.php
------------------------------

session_start();

if(!array_key_exists('hc-lang-ad',$_SESSION) && !array_key_exists('hc-lang',$_SESSION)){
if(array_key_exists('hc-lang',$_COOKIE)){
$_SESSION["hc-lang"]=$_COOKIE["hc-lang"];
}else{
Header("Location: check-lang.php");
exit;
}
}

check-lang.php
------------------------------

$_SESSION["hc-lang-ad"]=true;
Header("Location: $kam");
exit;

hodnotu v session musis nastavit pred presmerovanim.
Anonymní
Profil *
Teď je tam zase smyčka, takže to nejde. Jenom tak mimochodem, v tom poslednim postu jsi trochu zmotal check-lang.php a set-cz.php
k
Profil *
nezmotal, ten kod sem psal pro automaticke nastaveni jazyka(coz dela check-lang.php).
O nicem jinem nebyla rec. Pokud jsi to implementoval spravne tak tam smycka byt nemuze.
V set-cz.php zadny zacykleni resit nemusis pokud to mas reseny tak ze se ten script vola po kliknuti na prislusny odkaz.
Jata
Profil
No vložil jsem tam ten tvůj kód a stejně mi to pořád píše, že je tam smyčka.

Nebylo by lepší, kdybychom to vyřešili třeba přes ICQ?
Toto téma je uzamčeno. Odpověď nelze zaslat.

0