« 1 2 »
Autor Zpráva
J
Profil *
Netušíte proč níže uvedené nevloží stánku z hodnoty "default (home.php)", ale tvrdošíjně tam cpe 404.php
<?
 $kod = "5e9c";
 if(IsSet($_GET['page'])):

 switch($page) {
   case "novinky":
   $url = "news.php";
   break;
   case "galeria":
   $url = "gallery.php";
   break;
   case "kontakt":
   $url = "contact.php";
   break;
   default:
   $url = "home.php";
 }
 else: $url = "404.php";
 endif;
 require $url;
?>
Werewolf
Profil
Tuším..

<?php
$kod = "5e9c";

switch($page) {
case "novinky":
$url = "news.php";
break;
case "galeria":
$url = "gallery.php";
break;
case "kontakt":
$url = "contact.php";
break;
default:
$url = "home.php";
}

require_once($url);
?> 
J
Profil *
Možná blbý dotaz: proč nenačte požadovanou hodnotu default? Mělo by se to chovat takhle: načti stránku home.php, pokud neexistuje načti 404.php.
TomášK
Profil
if(IsSet($_GET['page'])):
    /* cokoliv */
else: 
    $url = "404.php";
endif;

require $url; 

Pokud ten tvůj kód načítá 404, pak se provede else větev a k tomu switchi to ani nedojde, natož aby
to skočilo do defaultu.
fuckin
Profil *
protoze $_GET["page"] neni inicializovany nebo je prazdny, jednoduse receno, neni v url.

J
Ne nemelo.
Pokud pole get v indexu page obsahuje hodnotu pak vykona multivetveni (case), jinak vypise 404.

Muzu se zeptat v cem je tak dulezite tady uvadet toto:
$kod = "5e9c";
?
J
Profil *
Tento kód jsem našel na www.interval.cz : http://interval.cz/clanky/dynamicke-generovanie-stranky-v-php/

Jinak kód od Werewolfa šlape. Dík. Ještě se zeptám: má toto řešení nějakou bezpečnostní slabinu?
panther
Profil
J
Jinak kód od Werewolfa šlape. Dík.
obávám se, že „šlape“ bez té 404..
fuckin
Profil *
J
Kod od werewolfa (jen orezal tvuj kod) slape, ale...nejede tam 404 stranka.

Nejlepsi reseni bude dat do default vetve tu podminku.
If isset...
404
Else
Home
J
Profil *
Zkoušel jsem to z podmínkou if isset, ale nepodařilo se mi to rozchodit - zřejmě to cpu kam nemám. Myslíte, že byste mohl uvést celý kód včetně té 404-ky?

Jinak $kod = "5e9c"; - je to z intervalu.cz - vyrozuměl jsem, že by to mělo ověřit, že je na vkládané stránce tento kód a pokud ne, tak ji nevložit. Pro mě to důležité není.
J
Profil *
Ještě oprava: do každé stránky, která se vkládá se vloží toto:

<?if(IsSet($kod) && $kod == "5e9c"):?>
// vkládaná stránka (nějaký kód)
<?endif;?>

a pokud toto:

<?php
$kod = "5e9c";

switch($page) {
case "novinky":
$url = "news.php";
break;
case "galeria":
$url = "gallery.php";
break;
case "kontakt":
$url = "contact.php";
break;
default:
$url = "home.php";
}

require_once($url);
?>

obsahuje: $kod = "5e9c"; stránka se vloží. Pokud byste se pokusili zobrazit stránku s tímto:

<?if(IsSet($kod) && $kod == "5e9c"):?>
// vkládaná stránka (nějaký kód)
<?endif;?>

přímo - bez stránky index.php, tak se Vám to nepovede - zabraňuje to nahlížení do strředů stránek.

Nicméně to není to co řeším: Mohu poprosit o celý kód Werewolfa vč. té 404-ky? Děkuji.
AM_
Profil
Kód werewolfa je závislý na register_globals, FUJ.
šlo by to takhle:
$page = empty($_GET['page']) ? 'home' : $_GET['page'];
switch($page){
  case 'neco':
    $url = 'neco.php';
    break;
  ...
  case 'home':
    $url = 'home.php';
    break;
  default:
    $url='404.php';
}

na ten kód bych se klidně vykašlal tím si jenom komplikuješ život, jednodušší je vkládané soubory vecpat do zvlášť adresáře a tam pomocí .htaccess zakázat z venku přístup.
Werewolf
Profil
AM_:
register_globals, FUJ.
Vidíš, to jsem si neuvědomil. Vlastně v Jově kódu není definovaná proměnná $page.
Jinak bych ale doporučil fci import_request_variables():

$kod = "5e9c"; 
import_request_variables("g", "get_"); 
$page = empty($get_page) ? 'home' : $get_page; 
switch($page){ 
  case 'neco': 
    $url = 'neco.php'; 
    break; 
  ... 
  case 'home': 
    $url = 'home.php'; 
    break; 
  default: 
    $url='404.php'; 
} 
J
Profil *
[#11]
Nějak mi to nešlape. Kde mám chybu?

<?php
$page = empty($_GET['page']) ? 'uvod' : $_GET['page'];
switch($page){
case 'article1':
$url = 'pages/stranka1.php';
break;
case 'article2':
$url = 'pages/stranka2.php';
break;
case 'uvod':
$url = 'pages/uvod.php';
break;
default:
$url='pages/404.php';
}
?>

Jinak ten kód mě skutečně nezajímá.
AM_
Profil
Nějak mi to nešlape
jak ti to nešlape?
J
Profil *
Nenačte se nic.
AM_
Profil
něco se načíst musí, ani jedna z větví není prázdná. Zkus trochu vlastní snahy ;) zjisti si, kudy program jde, která proměnná je kde špatně...
J
Profil *
Nefafá mi ani tohle řešení:

if (empty($_GET["page"])) $page = uvod;
else $page = $_GET["page"];

switch ($page){
case "uvod":
$url = 'pages/uvod.php';
break;
case "article1":
$url = 'pages/stranka1.php';
break;
case "article2":
$url = 'pages/stranka2.php';
break;
case "article3":
$url = 'pages/stranka3.php';
break;
default:
$url = 'pages/404.php';
break;
}
panther
Profil
J
Nefafá mi ani tohle řešení:
nezapomínáš tam proměnnou „$url“ includovat? Máš dobře cestu k includovanému souboru?
J
Profil *
Cesty jsou v pořádku proměnná $url taky. Toto šlape:

<?php
switch($page) {
case "novinky":
$url = "news.php";
break;
case "galeria":
$url = "gallery.php";
break;
case "kontakt":
$url = "contact.php";
break;
default:
$url = "home.php";
}

require_once($url);
?>

Ale jakmile dám do defaultu 404-ku a nastavím:

if (empty($_GET["page"])) $page = uvod;
else $page = $_GET["page"];

nebo zkusím řešení od AM_ tak se prostě nic nenačte. 6ádná chybová hláška - prostě nic.
J
Profil *
Tohle funguje:
<?php
$page = $_GET["page"];
switch($page) {
case "article1":
$url = "pages/stranka1.php";
break;
case "article2":
$url = "pages/stranka2.php";
break;
case "article3":
$url = "pages/stranka3.php";
break;
default:
$url = "pages/uvod.php";
}
require_once(file_exists($url) ? $url : 'pages/404.php');
?>
AM_
Profil
Zkus trochu vlastní snahy ;) zjisti si, kudy program jde, která proměnná je kde špatně...
takže jsi to zkusil? takže víš, co bude v proměnné $url, když dáš default 404ku, a víš, jaký soubor se to pokusí includovat a jestli skutečně existuje?
AM_
Profil
[#20]
bude vyhazovat notice o nedefinovaném $_GET['page'], pokud ten parametr nebude zadaný. proto se používá isset nebo empty.
J
Profil *
Asi mám dlouhé vedení, ale nerozumím. Tohle [#20] se chová přesně tak jak potřebuji. Vaše řešení [#11][#12] mi prostě nechodí. Třeba mám něco špatně nastaveného... Nevím, ale prostě nechodí.
AM_
Profil
Vaše řešení [#11][#12] mi prostě nechodí
to nemá chodit, ale zobrazovat příslušnou stránku a tu to zobrazuje. Pokud ne, zkus popsat problém :)

Tohle [#20] se chová přesně tak jak potřebuji.
ano, ale čteš proměnnou $_GET['page'], aniž bys věděl, jestli existuje - na některých serverech to může házet chyby a není to moc čisté.

[#12] je zbytečná slátanina, k té se nehlásím.
[#20] se bude chovat jinak než [#11]:
tvé řešení hodí 404, pokud uživatel zadá nějakou podstránku, která je v tom switchi definovaná, ale soubor nebude existovat (což je tvoje chyba, sekce, které tam máš definované, bys tam měl mít). Pokud zadá uživatel nějakou zcela neexistující podstránku, hodí ho to na úvod.
Mé řešení hodí 404 na jakoukoli stránku, která není ve switchi definovaná, tedy se chová tak, jak se od 404 čeká - pokud uživatel zadá neexistující adresu.
J
Profil *
To AM_: netvrdím, že nemáte pravdu (ani bych si to nedovolil prostě proto, že se to teprve učím)

Tady uvedu kompletní zkušební web a řekněte mi zda dělám někde chybu:

index.php:
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
</head>
<body>

<?php
$kod ="JOB3811";
import_request_variables("g", "get_");
$page = empty($get_page) ? 'uvod' : $get_page;
switch($page){
case 'article1':
$url = 'pages/stranka1.php';
break;
case 'article2':
$url = 'pages/stranka2.php';
break;
case 'uvod':
$url = 'pages/uvod.php';
break;
default:
$url='pages/404.php';
}
?>

</body>
</html>

uvod.php:
<h1>Toto je stránka uvod.php</h1>
<a href="?page=article1">stranka1.php</a><br>
<a href="?page=article2">stranka1.php</a><br>
<a href="?page=article18">neexistující odkaz</a><br>

stranka1.php:
<h1>Toto je stránka stranka1.php</h1>

stranka2.php:
<h1>Toto je stránka stranka2.php</h1>

404.php:
<h1>Toto je stránka 404.php</h1>

A když toto načtu do prohlížeče - nezobrazí se nic. Když dán zobrazit zdrojový kód - vyplivne mi toto:
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
</head>
<body>



</body>
</html>

A to jak na lokále tak po natažení na web.
Kde dělám chybu?
J
Profil *
Jenom dodám, že struktura je:
www/index.php
www/pages/stranka1.php, stranka2.php, uvod.php, 404.php
petr 6
Profil
J, ad [#25]: Podle vseho stranka nic zobrazovat nema (tedy funguje spravne), uvnitr body ti totiz chybi jakykoli vystup, napr.
require $url;
J
Profil *
Tak v níže uvedené podobě to šlape, akorát pokud dojde k situaci, že smažu například soubor stranka2.php, tak to vyhodí takovouhle hnusnou hlášku:

Warning: require(pages/stranka2.php) [function.require]: failed to open stream: No such file or directory in C:\Documents and Settings\User\Dokumenty\www\ns\index.php on line 24

Fatal error: require() [function.require]: Failed opening required 'pages/stranka2.php' (include_path='.;C:\PROGRA~1\EASYPH~1.0\\php\includes') in C:\Documents and Settings\User\Dokumenty\www\ns\index.php on line 24

<?php
$page = empty($_GET['page']) ? 'uvod' : $_GET['page'];
switch($page){ 
  case 'article1': 
    $url = 'pages/stranka1.php'; 
    break; 
  case 'article2': 
    $url = 'pages/stranka2.php'; 
    break;
  case 'uvod': 
    $url = 'pages/uvod.php'; 
    break; 
  default: 
    $url='pages/404.php'; 
}
require $url;
?> 


Zkrátka nesměruje se to na 404.php
J
Profil *
Co tohle, mohlo by to být? Zkoušel jsem to a problém, který jsem uvedl tady [#28] se tím vyřešil. Je v tom nějaký problém?

<?php
$kod ="JOB3811";
$page = empty($_GET['page']) ? 'uvod' : $_GET['page'];
switch($page){ 
  case 'article1': 
    $url = 'pages/stranka1.php'; 
    break; 
  case 'article2': 
    $url = 'pages/stranka2.php'; 
    break;
  case 'uvod': 
    $url = 'pages/uvod.php'; 
    break; 
  default: 
    $url='pages/404.php'; 
}
require_once(file_exists($url) ? $url : 'pages/404.php');
?> 
AM_
Profil
akorát to require patří mezi <body></body>, ne hned na začátek dokumentu (kde to zřejmě máš) - prostě tam, kam se obsah vkládá.
Jinak nevím, proč require_once, ten se používá spíš při vkládání různých modulů atd., kde je např. potřeba předejít vícenásobné inicializaci modulu, tady bych nechal prostý require
« 1 2 »

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: