Autor Zpráva
jova
Profil *
Při prvním spuštěním mé zkušební stránky se mi zobrazí v části okna definovaného ve zdrojovém kodu "class="obsah" obsah prvního souboru includovaného z menu a zároveň se mi objeví i hlášky ostatních souborů v s tímto zněním.
"Notice: Undefined index: stranka in
 C:\ComplexWebServer\http_docs\nova_slozka\stranka-hlavni.php on line 72"
atd…
Po následném výběru (kliknutím) jakékoli položky z menu jsou odkazy (výpisy) includovaných souborů v okně vpořádku bez chybových výpisů.
Odkazy na includované externí soubory definuji takto:
<?
if (!isset($_REQUEST['stranka'])) { include ("uvod.html"); };
if ($_REQUEST['stranka'] == 'uvod'){ include ("uvod.html"); }; 
if ($_REQUEST['stranka'] == 'kontakt'){ include ("kontakt.html"); }; 
if ($_REQUEST['stranka'] == 'stranka1') { include ("stranka1.html"); }; 
if ($_REQUEST['stranka'] == 'stranka2') { include ("stranka2.html"); };

//if (!isset($_GET['stranka'], $_GET['php'], $_GET['stranka'])) { $stranka - 'uvod'; };
//if ($_GET['stranka'] == 'uvod'){ include ("uvod.html"); }; 
//if ($_GET['stranka'] == 'kontakt'){ include ("kontakt.html"); }; 
//if ($_GET['stranka'] == 'stranka1') { include ("stranka1.html"); }; 
//if ($_GET['stranka'] == 'stranka2') { include ("stranka2.html"); };  
?>
S asociovaným polem s $_GET je výpis chyb u všech položek, což je ještě horší.
Zkouším to rozchodit na localu v IE. Ke stylování používám layout s pozicování. Dle mého názoru na použití prohlížeče a stylování v tomto případě nezáleží.
Jsem začátečník ve tvorbě webu. Zdrojové kódy si píši v poznámkovém bloku.
Zvažoval jsem použít jiné mnou nově na definované pole a naplnit jej položkami z menu a pak jej includovat, ale narušilo by mi to strukturu zdrojového kódu a nevím zda-li by mi to pomohlo .
Děkuji za Vaše rady.

Moderátor Str4wberry: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Str4wberry
Profil
Mělo by stačit použít elseif místo if u dalších podmínek.
jova
Profil *
Str4wberry:
Díky za radu. Bohužel problém se ještě zhoršil. Při spuštění po změně s elseif se stránka vůbec nezobrazí a objeví se hláška "Parse error: syntax error, unexpected T_ELSEIF in C:\ComplexWebServer\http_docs\nova_slozka\stranka-hlavni.php on line 72"
Str4wberry
Profil
Hm, teď se ještě stačí podívat na správný způsob zápisu pro ifelseif a bude to fungovat.
Alphard
Profil
Hádám, že jste nesmazal středníky za složenými závorkami. V současnosti jsou k ničemu (ale nevadi). S konstrukcí if, elseif už budou i vadit.
Danqo
Profil
Tak ja by som to robil cez switch,case break a úplne by som else(if) odignoroval... Potom späť k problému tá chyba ti hlási že neexistuje index "stranka" teda $_REQUEST['stranka'] neexistuje v momente keď ju voláš... Preto doplň nad riadok 72:
isSet($_GET['stranka']) ? $_REQUEST['stranka'] = $_GET['stranka'] : $_REQUEST['stranka'] = "";


predpokladam teda ze beries tieto data z GETu
AM_
Profil
Danqo:
isSet($_GET['stranka']) ? $_REQUEST['stranka'] = $_GET['stranka'] : $_REQUEST['stranka'] = "";
1) dobrou coding style zásadou je NIKDY nepřepisovat pole jako $_REQUEST atd.. koneckonců $_REQUEST['stranka'] = $_GET['stranka'] je až komicky nesmyslné, pokud bylo něco předáno v $_GET['stranka'], je to automaticky v $_REQUEST['stranka'] (_REQUEST je sjednocení _GET a _POST).
2) ternární operátor se dá v kombinaci s přiřazením použít jednodušeji
3) ve Tvém příkladu absolutně chybí zabezpečení proti vložení úplně cizího skriptu... takže:

include (isset($_GET['stranka']) ? preg_replace('~[^a-z0-9_-]~i', '', $_GET['stranka']).'.html' : 'uvod.html');
Str4wberry
Profil
Nevím, co tu řešíte. Postup, který používá jova je v pořádku. Stačí opravit ty syntaktické chyby (viz Alphard) — případně ještě do else doplnit vložení „nenalezeno.html“.
Danqo
Profil
Str4wberry:
Notice: Undefined index: stranka in
 C:\ComplexWebServer\http_docs\nova_slozka\stranka-hlavni.php on line 72"
 

nie je chyba toho... je to chyba toho že nevie nájsť index stranka

a vychádzam z toho, že je to len pri prvom načítaní stránky(podľa názvu tejto diskusie) + tie ify by mali taktiež fungovať len su čudne napísané stále sa držím toho, že ja by som tam hodil swtich...

AM_
pravda bezpečnosťou som sa nezaoberal chcel som podať len obraz toho ako by to malo byť aby to nedávalo chybu s indexom...
a to s REQUEST sa mi tam tiež veľmi nepáčilo, ale neviem s REQUEST skúsenosti nemám používam priamo $_GET alebo $_POST takže sa ospravedlňujem
Str4wberry
Profil
Podívej se na ten kód — jde o to, že na hlavní stránce se splní první podmínka, ale taky se začnou vyhodnocovat ty další. Které vyvolají poznámku kvůli nedefinovaném indexu další podmínky, protože chybí ?stranka=něco. Ten tvůj kód je v podstatě zahrnut už v if (!isset($_REQUEST['stranka'])) — jenom stačí ty podmínky spojit.
jova
Profil *
Str4wberry:
Díky za radu. Chyba byla způsobena mou neznalostí vyhodnocování a používání podmínek if a elseif.
S použitím elseif u následných řádků za if a odstranění ";" kromě posledního řádku se při první spuštění stranky chová podle očekávání. Tedy bez chybových hlášení parseru. Pro představu pro ostaní diskutující (za to jim děkuji) přikládám část opraveného zdrojového kódu.
<?
if (!isset($_REQUEST['stranka'])) { include ("uvod.html"); }
elseif ($_REQUEST['stranka'] == 'uvod'){ include ("uvod.html"); } 
elseif ($_REQUEST['stranka'] == 'kontakt'){ include ("kontakt.html"); } 
elseif ($_REQUEST['stranka'] == 'stranka1') { include ("stranka1.html"); } 
elseif ($_REQUEST['stranka'] == 'stranka2') { include ("stranka2.html"); };

//if (!isset($_GEt['stranka'])) { include ("uvod.html"); }
//elseif ($_GET['stranka'] == 'uvod'){ include ("uvod.html"); } 
//elseif ($_GET['stranka'] == 'kontakt'){ include ("kontakt.html"); } 
//elseif ($_GET['stranka'] == 'stranka1') { include ("stranka1.html"); } 
//elseif ($_GET['stranka'] == 'stranka2') { include ("stranka2.html"); };  
?>

Ještě malý dovětek :
Pokoušel jsem se to rozchodit i s $_GET. Stránka se zobrazila bez chybových hlášek ale při přepínání v menu byla stále zobrazena pouze stránka s includovaným souborem "uvod.html".

Budu se ještě muset podívat na to zabezpečení jak uvádí AM_.
Ještě jednou díky Vám i ostatním diskutujícím za Vaše podněty.
Alphard
Profil
jova:
Budu se ještě muset podívat na to zabezpečení jak uvádí AM_.
AM reagoval za něco jiného. Tohle [#11] je bezpečné.

a odstranění ";" kromě posledního řádku
Ani ten poslední tam nemá být.
jova
Profil *
Alphard:
Upravil jsem to podle Tvé rady, bez posledního středníku. Stránka chodí bezvadně a bez hlášek.
Nejsem si jist s tou mojí bezpečností.
Včera mi vyskočile hláška, že se někdo jiný snaží přihlásit k mému comu pod stejnou adresou.
Tuto hlášku jsem spatřil poprvé.
Díky moc za rady.
Alphard
Profil
jova:
Nejsem si jist s tou mojí bezpečností.
Včera mi vyskočile hláška, že se někdo jiný snaží přihlásit k mému comu pod stejnou adresou.
Já jsem mluvil o tomto menu.
jova
Profil *
Alphard:
Přeci se mi podařilo rozchodit stránky pomocí $_GET . Přidal jsem i nějaké nějaké kontroly na existenci souborů a ošetřil jsem zadávání vstupních údajů s adresního řádku prohlížeče. Také jsem přemístil soubory pro obsahy do nově vytvořeného adresáře " ./stranky/".
Zde přikládá změnený zdrojovýnkód:
 
<?php
      // overeni, zda je $_GET["stranka"] definovana
      if (isset($_GET["stranka"]) && substr_count($_GET["stranka"], "/") < 1)
      $stranka = $_GET["stranka"];
      else
      $stranka = "uvod";
      
      // pripojeni ".php" k promenne $stranka                   
      $soubor = "./stranky/$stranka.php";
      if (file_exists($soubor))
      include $soubor;
      else 
      include "./stranky/straka-nenalezena.php";
       ?>

Původní kód mi při neexistenci souboru s obsahem zobrazoval prázdným obsahem. Nyní se zobrazí obsah souboru "straka-nenalezena.php".
Snad se to bude také někomu hodit.

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