IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Neaktivní uživatel:29.12.2014 21:26

Ahojte,
zdokonaľujem svoj "Multilanguage" kód a narazil som na problém. Kvôli veľkosti môjho projektu som sa rozhodol rozdeliť jeden extrémne veľký súbor na menšie časti. Jednou takouto časťou je aj zmena/určenie jazyka stránky.

PROBLÉM
Mám súbor index.php a ešte pár iných, kde tento kód vkladám. Zo všetkých súborov som vymazal jazykový kód a vložil do zvlášť súboru. Tento kód potom jednoducho v každom súbore vložím cez include.
Pre istotu sem ten kód vložím.
"Jazykový kód":

<?php
$exp_time = time() + 3600 * 24 * 365;
if(isset($_GET['lang'])) {
    if($_GET['lang'] == 'sk') {
        if(isset($_COOKIE['lang']) || $_COOKIE['lang'] == 'uk') {
            unset($_COOKIE['lang']);
        }
        setcookie('lang', 'sk', $exp_time);
        include 'logic/output/lang_sk.php';
    } elseif($_GET['lang'] == 'uk') {
        if(isset($_COOKIE['lang']) || $_COOKIE['lang'] == 'sk') {
            unset($_COOKIE['lang']);
        }
        setcookie('lang', 'uk', $exp_time);
        include 'logic/output/lang_uk.php';
    }
} else {
    if(isset($_COOKIE['lang']) || $_COOKIE['lang'] == 'sk') {
        include 'logic/output/lang_sk.php';
    } elseif(isset($_COOKIE['lang']) && $_COOKIE['lang'] == 'uk') {
        include 'logic/output/lang_uk.php';
    } else {
        include_once 'logic/output/lang_sk.php';
    }
}
?>

Kód v súbore napr. index.php:

<?php
include "component/setlang.php";
echo $lang['nazov'];
?>

Problém nastáva, ak stránka nemá definovanú COOKIE. Vtedy vypíše toto:
Notice: Undefined index: lang in G:\xampp\htdoc­s\*censored*\com­ponent\setlan­g.php on line 18

Neviem či to môže byť spôsobené tým, že vlastne includujem súbor v includovanom súbore. Hľadal som aj na Google ale nejak to nevyšlo. Každopádne sú určite aj lepšie spôsoby tvorby prepínača medzi jazykmi a viem o nich ale nemám čas teraz ten kód prepisovať. :)

Ďakujem za prípadné rady.

Editováno 29.12.2014 21:27
Odpovědět
29.12.2014 21:26
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Uživatel sítě :29.12.2014 21:38
if(isset($_COOKIE['lang']) || $_COOKIE['lang'] == 'sk') {

změň OR (||) na AND (&&).

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
29.12.2014 21:38
Chybami se člověk učí, běžte se učit jinam!
Avatar
Odpovídá na Neaktivní uživatel
Matúš Petrofčík:29.12.2014 21:39
if(isset($_COOKIE['lang']) || $_COOKIE['lang'] == 'sk') {

nemá tam byť namesto || skôr && ako to máš ďalej v kóde?

// edit1: Mara ma predbehol

// edit2: a zmenil by som || na && aj pri ostatných podmienkach

Editováno 29.12.2014 21:41
Nahoru Odpovědět
29.12.2014 21:39
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Neaktivní uživatel:29.12.2014 21:44

vlastne hej :D predtým som to tam aj mal ale nejak mi prestal funcgovať mozog :D ale chybu to nerieši...

EDIT: ba rieši :D takže je to v poriadku...ach ja blbec :D

Editováno 29.12.2014 21:46
Nahoru Odpovědět
29.12.2014 21:44
Neaktivní uživatelský účet
Avatar
Odpovídá na Matúš Petrofčík
Uživatel sítě :29.12.2014 21:45

To by mu už snad došlo.. :D

&& (AND chcete-li) to jako by smísíš to jedné logické podmínky, tudíž už ta druhá v té směsi ví, že to není definované a nevyhodí tu hlášku.. :)

Nahoru Odpovědět
29.12.2014 21:45
Chybami se člověk učí, běžte se učit jinam!
Avatar
Odpovídá na Neaktivní uživatel
Matúš Petrofčík:29.12.2014 21:46

a akú to vypisuje chybu teraz? rovnaku?

// edit: tak si choď radšej oddýchnuť :D :D :D

Editováno 29.12.2014 21:46
Nahoru Odpovědět
29.12.2014 21:46
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Neaktivní uživatel
Uživatel sítě :29.12.2014 21:47

Pokud neřeší a to by mělo tak to změň takto:

if(isset($_COOKIE['lang']){
  if($_COOKIE['lang'] == 'sk') {
      include 'logic/output/lang_sk.php';
  }elseif($_COOKIE['lang'] == 'uk') {
      include 'logic/output/lang_uk.php';
  }else{
      include 'logic/output/lang_sk.php';
  }
} else {
    include_once 'logic/output/lang_sk.php';
}
Editováno 29.12.2014 21:48
Nahoru Odpovědět
29.12.2014 21:47
Chybami se člověk učí, běžte se učit jinam!
Avatar
Odpovídá na Uživatel sítě
Matúš Petrofčík:29.12.2014 21:48

Tak príde mi trochu zmätený :D btw AND nie je to isté ako &&, len neviem či u PHP, či to u SQL :D

Nahoru Odpovědět
29.12.2014 21:48
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Neaktivní uživatel:29.12.2014 21:48

Pôjdem :D počkať...vlastne som s PHP týždeň nerobil takže možno je to tým :D

Nahoru Odpovědět
29.12.2014 21:48
Neaktivní uživatelský účet
Avatar
Odpovídá na Matúš Petrofčík
Neaktivní uživatel:29.12.2014 21:50

áno AND je to isté ako && :D inak dúfam, že si si všimol, že to už ide...
Dik za pomoc :)

Nahoru Odpovědět
29.12.2014 21:50
Neaktivní uživatelský účet
Avatar
Odpovídá na Matúš Petrofčík
Uživatel sítě :29.12.2014 21:50

Je tam změna v tom, že && či || má vyšší prioritu, než jejich druhé varianty.

Nahoru Odpovědět
29.12.2014 21:50
Chybami se člověk učí, běžte se učit jinam!
Avatar
Odpovídá na Uživatel sítě
Matúš Petrofčík:29.12.2014 21:53

myslel som si :)

chudák lamka mi odpovedal chybne :D

Nahoru Odpovědět
29.12.2014 21:53
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Uživatel sítě :29.12.2014 21:55

Sabotáž nebo únava.. ;D

Nahoru Odpovědět
29.12.2014 21:55
Chybami se člověk učí, běžte se učit jinam!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.