Diskuze: Riešenie Warningu na fungujúce pole

PHP PHP Riešenie Warningu na fungujúce pole American English version English version

Avatar
Samuel Illo
Redaktor
Avatar
Samuel Illo :

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
www.samuelillo.com; lamka02sk(zavináč)samuelillo.com, www.point.samuelillo.com, www.csgorig.eu
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Samuel Illo
Marek Z.:
if(isset($_COOKIE['lang']) || $_COOKIE['lang'] == 'sk') {

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

Akceptované řešení
+20 Zkušeností
+1 bodů
Ř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
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Samuel Illo
Matúš Petrofčík:
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  +1 29.12.2014 21:39
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Samuel Illo
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Samuel Illo :

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
www.samuelillo.com; lamka02sk(zavináč)samuelillo.com, www.point.samuelillo.com, www.csgorig.eu
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Marek Z.:

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  +1 29.12.2014 21:45
Chybami se člověk učí, běžte se učit jinam!
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Samuel Illo
Matúš Petrofčík:

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
Marek Z.
Redaktor
Avatar
Odpovídá na Samuel Illo
Marek Z.:

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  +1 29.12.2014 21:47
Chybami se člověk učí, běžte se učit jinam!
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Marek Z.
Matúš Petrofčík:

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
Samuel Illo
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Samuel Illo :

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
www.samuelillo.com; lamka02sk(zavináč)samuelillo.com, www.point.samuelillo.com, www.csgorig.eu
Avatar
Samuel Illo
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Samuel Illo :

á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  +1 29.12.2014 21:50
www.samuelillo.com; lamka02sk(zavináč)samuelillo.com, www.point.samuelillo.com, www.csgorig.eu
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Marek Z.:

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

Nahoru Odpovědět  +1 29.12.2014 21:50
Chybami se člověk učí, běžte se učit jinam!
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Marek Z.
Matúš Petrofčík:

myslel som si :)

chudák lamka mi odpovedal chybne :D

Nahoru Odpovědět  +1 29.12.2014 21:53
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Marek Z.
Redaktor
Avatar
Nahoru Odpovědět  +1 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.