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" 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"); }; ?> $_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 |
#2 · Zasláno: 4. 8. 2010, 22:48:15 · Upravil/a: Str4wberry
Mělo by stačit použít
elseif místo if u dalších podmínek.
|
||
jova Profil * |
#3 · Zasláno: 5. 8. 2010, 07:28:42
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 |
#4 · Zasláno: 5. 8. 2010, 07:58:30
Hm, teď se ještě stačí podívat na správný způsob zápisu pro
if — elseif a bude to fungovat.
|
||
Alphard Profil |
#5 · Zasláno: 5. 8. 2010, 09:46:20
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 |
#6 · Zasláno: 5. 8. 2010, 10:11:56
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 |
#7 · Zasláno: 5. 8. 2010, 11:28:36 · Upravil/a: AM_
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 |
#8 · Zasláno: 5. 8. 2010, 11:46:21
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 |
#9 · Zasláno: 5. 8. 2010, 11:59:51 · Upravil/a: Danqo
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 |
#10 · Zasláno: 5. 8. 2010, 13:34:15
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 * |
#11 · Zasláno: 5. 8. 2010, 21:24:58
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 |
#12 · Zasláno: 5. 8. 2010, 21:33:28
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 * |
#13 · Zasláno: 6. 8. 2010, 08:24:37
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 |
#14 · Zasláno: 6. 8. 2010, 09:59:29
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. |
||
Časová prodleva: 4 dny
|
|||
jova Profil * |
#15 · Zasláno: 10. 8. 2010, 06:04:14
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. |
||
Časová prodleva: 14 let
|
0