Autor Zpráva
antimattero
Profil *
zdravim,
jsem se probudil po vcerejsim maratonu v PHP, ale nic se nezmenilo. jsem z toho porad zblblej. myslel jsem, ze spankem se mi to rozlozi v hlave. jedna se konkretne o menu psane html+css a includovane do stranky. pro zjednoduseni, abych nemusel ukladat menu do vsech podslozek a nasledne menit obsah u vsech menu zvlast jsem zvolil funkce php, tedy switch, viz.
priklad html
<a href="index.php?page=prvni">prvni.cz</a>
           <a href="index.php?page=druha">druha.cz</a>
           <a href="index.php?page=treti">treti.cz</a>
           <a href="index.php?page=ctrvrta">ctrvrta.cz</a>
atd...
dale php function
<?php
if    (isset($_GET['page'])) 
{    $page = $_GET['page'];
        switch($_GET['page'])
              {
            case 'prvni':
              include 'prvni.php';
                break;
          case 'druha':
              include 'druha.php';
                break;
 case 'treti':
              include 'treti.php';
                break;
 case 'ctrvrta':
              include 'ctrvrta.php';
                break;
            default :      // nejaky error  a nebo to ma a nebo muze byt index.php
                 break;
                }     
                                
}
?>
proste klasika, docetl jsem se ze switch je mene nechylny na utoky, ale nevim jestli by tomu jeste nejak pomohl file_exist?
anyway problem je trochu jinde a hlava mi ho nebere...


mam nejaky soubor index.php a ten musi byt prazdny jinak se mi ten obsah zobrazi i v odkazovanych strankach...ale on v podstate prazdny byt nemuze, kdyz je to ma uvodni stranka. v podstate toto nechapu?
priklad
<body>

<div id="kontejner-main">
<?php include ('adsence.php'); ?>
<?php include ('adsence2.php'); ?>
<?php include ('top.php'); ?>    
<?php include ('menu.php'); ?>
      /*    obsah, ktery se ma menit na kazde strance ma zde byt neco jineho */
    <div id="kontejner-second">
        <div id="kontejner-third">
            <?php include ('zpravy_index.php'); ?>
        </div>
        <div id="kontejner-fourth">
            <?php include ('zajimavosti_div.php'); ?>
        </div>        
        /* ----------------------------------------*/
<?php include ('spodni_menu.php'); ?>
<?php include ('paticka.php'); ?>

</div>

</body>
pokud index.php tedy bude prazdny ostatni stranky se tedy budou zobrazovat spravne, ale nemam tedy zadny obsah na uvodni strance. jak docilim toho, abych mel obsah i na uvodu, please?

thanks guys
panther
Profil
antimattero:
troch ubych to upravil. Jestliže nebude v URL žádná proměnná page, jsi pravděpodobně na úvodu, takže:
$page = isset($_GET['page']) ? $_GET['page'] : 'uvod';
Na 4. řádku testuj proměnnou page, kterou sis předtím vytvořil, nikoliv GET['page'].

Do default větve spadne vše, co nespadne do žádné podmínky výše. Pokud default chybí, neznámé hodnoty proměnné page se zahodí, resp. nezpracují.

ale nevim jestli by tomu jeste nejak pomohl file_exist?
ten určitě použij, ať neincluduješ neexistují soubor. Konkrétně ve switchi přímo neincluduj, ale pouze si ukládej název vkládaného souboru - $file = 'prvni'. Pod switchem pak měj něco jako
if (isset($file) && file_exists ($file . '.php')) {
    include $file . '.php';
}

ale on v podstate prazdny byt nemuze, kdyz je to ma uvodni stranka
píši výše, hned ta první podmínka, přiřazení $page = 'uvod', pokud neexistuje daná GET proměnná.


Piš česky a s diskaritikou, podobně „cesko-anglicke“ texty zde nejsou vítány. Děkuji.
antimattero
Profil *
panther

díky za rychlou odezvu

panther:
$file = 'prvni'

u tohohle mi to vypisuje nějakou chybu na řádku

jinak se s tím peru už druhý den, mimo ostatní věci... zkoušel jsem i array, ale prostě to nemůžu rozchodit až na pár nezabezpečenách verzí.

Piš česky a s diskaritikou, podobně ‚cesko-anglicke‘ texty zde nejsou vítány. Děkuji.


ani nebudeš věřit kolik času mi tohle vzalo jen kvůli diakritiky, nejsem zvyklej, protože nežiju v ČR
panther
Profil
antimattero:
u tohohle mi to vypisuje nějakou chybu na řádku
tak si ji přelož. Tipnu si, že ti chybí na konci středník - psal jsem jen náznak, jak to má vypadat, předpokládal jsem, že základy syntaxe znáš.

ani nebudeš věřit kolik času mi tohle vzalo jen kvůli diakritiky, nejsem zvyklej
tak si zde na diskusi zvykni, chceš-li radit.
antimattero
Profil *
panther:
tak si ji přelož. Tipnu si, že ti chybí na konci středník
to jsem samozřejmě zkoušel a mnohem více. jinak studuju teprve manuál, nicméně chybu mi nehlasí prohlížeč, ale editor, který ti neřekne nic konkrétního

tak si zde na diskusi zvykni, chceš-li radit.
no já zrovna radit nechci, ale spíše potřebuji poradit... a na druhou stranu nebuďme puntičkáři, většina lidí neovládá svou mateřštinu. psaní měkkých a tvrdých I,Y, t na místo d, s zaměnit se z apod., ale podstatné bude pokud bude vše diakritika. krást se taky nemá a pořád se krade, ale o tomhle to není, takže díky za pomoc s problémem o PHP.
panther
Profil
antimattero:
nicméně chybu mi nehlasí prohlížeč, ale editor, který ti neřekne nic konkrétního
co ti brání vyzkoušet kód v prohlížeči? Nebo aspoň ukázat, co přesně v kódu máš? Jinak ti samozřejmě nikdo chybu odhalit nepomůže.

no já zrovna radit nechci, ale spíše potřebuji poradit
tím spíše bys měl respektovat zdejší zvyklosti a nebrblat. Něco od nás žádáš, tak se dle toho chovej.
antimattero
Profil *
panther:
co ti brání vyzkoušet kód v prohlížeči? Nebo aspoň ukázat, co přesně v kódu máš? Jinak ti samozřejmě nikdo chybu odhalit nepomůže.
to mě máš opravdu za takového blbce? mám to na localhostu a vše samozřejmě testuji i pro různé spektrum prohlížečů. v prohlížeči mi to chybu nevypíše, ale také mi to nezobrazí požadovanou stránku. pouze se změní adresa. kód je stejný jen jsem navíc přidal ten tvůj kousek. v podstatě je to testovací kousek, nač zde budu dávat celý kód, když podstata je stejná?

tím spíše bys měl respektovat zdejší zvyklosti a nebrblat. Něco od nás žádáš, tak se dle toho chovej.
to už by snad stačilo, chápu, že je to tvá povinnost a respektuji, nebo mi snad někde chybí hášek? :)
ahoj
Profil *
antimattero:
kód je stejný jen jsem navíc přidal ten tvůj kousek

.. a spoustu řečí kolem. Jestli myslíš, že se ti dá podle výše napsaného nějak poradit, tak ne, nedá. Ukaž co máš, nebo si to vyřeš sám.
antimattero
Profil *
ahoj:
.. a spoustu řečí kolem. Jestli myslíš, že se ti dá podle výše napsaného nějak poradit, tak ne, nedá. Ukaž co máš, nebo si to vyřeš sám.
no taky ahoj, já jenom, že ten kód co je psaný na vrchu jsem upravil podle panthera(je to česky?) teď jsem se zase zamotal do anglicko-češtiny, alespoň příklad za co jsem byl osočován a co jsem bránil. totální triviálnost, kterou řešíme! mám ten stejný kód zde dávat znovu, nebude to opět proti pravidlům fóra? zbytečné místo v DB.


abych nevypadal jako totální troll, tak díky za snahu a já už to nějak vyřeším sám.
ahoj
Profil *
panther:
pouze si ukládej název vkládaného souboru - $file = 'prvni'

antimattero:
panther:
„$file = 'prvni'“
>
>
u tohohle mi to vypisuje nějakou chybu na řádku

panther:
antimattero:
„u tohohle mi to vypisuje nějakou chybu na řádku“
tak si ji přelož. Tipnu si, že ti chybí na konci středník - psal jsem jen náznak, jak to má vypadat, předpokládal jsem, že základy syntaxe znáš.

antimattero:
to jsem samozřejmě zkoušel a mnohem více. jinak studuju teprve manuál, nicméně chybu mi nehlasí prohlížeč, ale editor, který ti neřekne nic konkrétního

panther:
co ti brání vyzkoušet kód v prohlížeči? Nebo aspoň ukázat, co přesně v kódu máš?

antimattero:
to mě máš opravdu za takového blbce? mám to na localhostu a vše samozřejmě testuji i pro různé spektrum prohlížečů. v prohlížeči mi to chybu nevypíše, ale také mi to nezobrazí požadovanou stránku. pouze se změní adresa. kód je stejný jen jsem navíc přidal ten tvůj kousek.


Odfiltroval jsem vatu a možná i něco, co vata nebyla a možná tam bylo i něco podstatnějšího. Sorry, nechce se mně tím přebírat.
Ještě jednou se zamysli, jestli by se ti na základě tohohle chtělo někomu radit. Za stavu, kdy tvůj současný problém, jak se zdá, se týká přiřazení textu do proměnné. Napsals to sem tak blbě, jak to jen šlo - obalils to do uvozovek, takže není zřejmé, co z toho máš opravdu v tom souboru a cos tam nastřílel dodatečně.
Navíc je to pár znaků utopených uprostřed balastu. Lidi tady opravdu baví jiným radit, ale všechno má své meze.
Bertram
Profil
antimattero:
Ahoj, jde ti o toto? Jestli ne tak to hezky česky upřesni :)
<?php
$page = isset($_GET['page']) ? $_GET['page'] . 'php' : 'uvod.php';

include ('adsence.php');
include ('adsence2.php');
include ('top.php');
include ('menu.php');

if (file_exists($page)) {
    include $page;
} else {
    include "404.php";
}

include ('spodni_menu.php');
include ('paticka.php');
antimattero
Profil *
Bertram:
Ahoj, jde ti o toto? Jestli ne tak to hezky česky upřesni :)

ahoj, v podstatě mi o toto nejde, :) jak se divám jsou tam věci, které tam vůbec nemají být to se týkalo jiné věci, kterou jsem už vyřešil. asi jsem ten kód zde neměl ani dávat. jde mi o klidně složité menu, ale potřebuji ho pochopit. zatím pokaždé, co jsem napsal bylo nefunkční a to hodně krát i bez vypsání nějaké chyby. potřebuji něco viz příklady, ale nesmí to být napadnutelné.

příklad 1
<?
if (IsSet($_GET['page'])) {
   $page = $_GET['page'];
   switch($page) {
      case 'uvod':
         include "main.php";
         break;
      case 'download':
         include "download.php";
         break;
      //...
      default:
         include "errors/404.php";
         break;
   }
}
?>

funguje, ale není to nenapadnutelné

příklad 2
<?
if (IsSet($_GET['page'])) $page=$_GET['page'];
else $page="main";

$pages = array(
    'main' => 'main.php',
    'download' => 'pages/download.php'
);


if (isset($pages[$page])) {
   include($pages[$page]);
}
?>


lepší příklad, ale nefunguje!

příklad 3 a tento bych i rád použil
<?
if (IsSet($_GET['page'])) $page=$_GET['page'];
else $page="main";

$pages_name = array('main','download');

if (in_array($page,$pages_name)) {
   include("stranky/".$page.".php");
}
?>

a to pravděpodobně, jelikož jsem tento způsob snažil upravit, tak aby byli načítány stránky z root složky a podsložek. něco jsem zbabral.

jde mi jen o kód , který bude fungovat, bude bezpečný, viz. třeba ten file-exists a zbytek si aplikuju sám. :) díky předem snad je to lepší a přehlednější
Bertram
Profil
antimattero:
Asi ti nerozumím, protože jsem to už v podstatě jednou napsal a panther v #2 také.
<?
$page = isset($_GET['page']) ? $_GET['page'] : 'main';

if (file_exists("stranky/" . $page . ".php")) {
    include("stranky/" . $page . ".php");
} else {
    include "errors/404.php";
}
Jen je potřeba dávat pozor na chyby v cestě k souboru, jinak se vloží 404ka, pokud není špatná cesta i k ní, ale to by se ozvalo PHP s warning hlášením, pokud ho nemáš potlačené.
antimattero
Profil *
Bertram:
tak mi to háže 404ku ať zkouším, co zkouším, ale pokrok tu je. díky :) pořád jsem ještě positivně nalazen


nejjednodušší by bylo, kdyby jsi měl nebo mě nasměroval na nějaký soubor s fungujicím skriptem a já bych si to v hlavě rozebral, tak se nejlépe učím :)


:) a hle ono to opravdu funguje, díky za trpělivost se mnou.
jen pro jistotu, použil jsem následující
<?php
if (isset($_GET["page"]) && substr_count($_GET["page"], "/") < 1)
    $page = $_GET["page"];
else
    $page = "hlavni";
                         
$soubor = "$page.php";
if (file_exists($soubor))
    include $soubor;
else 
    include "404.php";
                         
?>

to substr_count je pokud jsem dobře pochopil odfiltrování i když dále jsem narazil na preg_replace, ale v tomto momente jsem spokojenej a posunuju se na další level :)))
ale beze srandy díky
Majkl578
Profil
Totéž se tu řešilo před pár dny. Zároveň tam je jedno z možných řešení.
antimattero
Profil *
Majkl578:
díky


ahoj, zase otravuju nemůžu nadefinovat podsložky ze kterých se mají načítat stránky. příklad co je zde načítá soubory pouze z root složky, což jestli chápu je proměnná $soubor, ale já bych potřeboval mít něco jako, hledej v root a hledej ve složce třeba /cestování, /internet, /pojištění, apod. ale zároveň se dokázal vracet zpět do root složky. taky asi budu muset nějak nadefinovat chybu 404.php jelikož když budu v nějaké podsložce cesta není přeci platná. chápu to ještě stále? :)
antimattero
Profil *
počkat, ale já se přece nepotřebuju dostávat do podsložek, když všechno načítám do souboru index.php. otázka tedy spíše zní jak nedefinovat cestu do podsložek a zpět. vlastně kde všude bude hledat odkazy. :)
antimattero
Profil *
podle návodu výše jsem tedy upravil:
<?php
 
// Ověření existence query proměnné a zda není polem
$page = isset($_GET['page']) && is_scalar($_GET['page']) ? $_GET['page'] : NULL;  //na misto NULL jsem dal 'hlavni' stránku 
 
// složka s podstránkami
$dir = __DIR__ . DIRECTORY_SEPARATOR . 'pages';  //tady na místo pages jsem dal './' jako root, ale dále nemůžu přidat další podsložky
 
// výchozí soubor - pro případ neuvedení/neexistence atd.
$file = $dir . DIRECTORY_SEPARATOR . 'default.php';       //tento default je 404, je to správně?
 
// název se skládá ze znaků a-z, 0-9, pomlčka, podtržítko a tečka
if ($page !== NULL && preg_match('~^[\w-\.]+$~', $page)) {
    // sestavení cesty k souboru
    $tmp = $dir . DIRECTORY_SEPARATOR . $page . '.php';
 
    // ještě ověření, zda existuje
    if (file_exists($tmp)) $file = $tmp;
}
 
// konečně načtení
require $file;
?>
antimattero
Profil *
jednoduchá otázka jak nastavím root složku a podsložky? díky
ahoj
Profil *
antimattero:
jednoduchá otázka jak nastavím root složku a podsložky? díky


http://php.net/manual/en/language.constants.php
Včetně naznačených konvencí, které používáš i ty.
antimattero
Profil *
ahoj:
díky zrovna pročítám tohle http://php.net/manual/en/function.include.php hned potom se mrknu. ještě jednou dík, konečně někdo odpověděl :)
ahoj
Profil *
antimattero:
konečně někdo odpověděl

Jasně, konečně po sedmi minutách v půl třetí ráno někdo odpověděl. Být tebou, tak se namíchnu a jdu někam, kde jsou lidi ochotnější.
antimattero
Profil *
ahoj:
konečně po sedmi minutách
můj první příspěvek byl v 13:50:05 UTC +1 a pokračoval jsem až do 01:49:06 UTC +1 a za sedm minut mého posledního příspěvku jsem dostal odpověď, takže jsem byl opravdu rád. nicméně žiji v jiném časovém pásmu a mám zřejmě vnitřní hodiny posunuty, ale kvůli tomu by mě neměl přeci nikdo odsuzovat. nebo je v podmínkách dané, že mohu přispívat od X času do X času? internet je omezený? je to totalitní fórum? musím být perzekvován za to, že se vymykám běžnosti? co ta Nečasova vláda s Vámi lidi dělá? nechci tě nějak odsuzovat, ale taky jsem býval dost často naštvaný, ale nakonec zjistíš, že si naštvaný jenom na sebe a na způsob života jaký vedeš, ale přenášíš to i na ostatní.
hele pořád se mi jen jedná o PHP funkci, kterou chci používat. potřebuji ji zprovoznit a až budu mít čas po dokončení toho webu, tak mám už pár rozečtených pěkných knížek o PHP. jinak kdybych si nevěděl už rady, tak bych asi nepsal. není to můj style, možná i kvůli takovým lidem si raději všechno dohledávám sám. wake up...

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: