Autor Zpráva
Supel
Profil *
Dobrý den

Chápu, že je tady toho spustu a omlouvám se za vytvoření nového tématu, ale mohl by mi někdo prosím upravit tento kód?
Chtěl bych, aby se mi chybovka 404.php otevírala, ale ne jak to mám teď, při default.
Prosím pomozte. Nechci nový kód. Na tento jsme zvyknutý. Stačí menší úpravy.
Moc děkuji.
A omlouvám se za vymýšlení:-)

<?php   
		    if(!isset($_GET['page']))
                    include "page1.htm";
               else
                    switch ($_GET["page"])
                    {
                    case "00":
                  	 include "page1.htm";
                         break;
                    case "01":
               		 include "page2.htm";
                         break;
                    case "02":
               		 include "page3.htm";
                         break;
  		   default:
                          include "404.php";
			 break; 
}
        ?>
Tori
Profil
Supel:
Chtěl bych, aby se mi chybovka 404.php otevírala, ale ne jak to mám teď, při default.
A kdy se teda má includovat? Jste nenapsal.
Supel
Profil *
Tori:
Samozřejmě chci, aby se includovala, když stránka nelze nalézt. Ale aby to nebylo určeno defaultem.

Něco jako: Pokud stránku nenalezneš, otevři 404.php.
Tori
Profil
Tak místo include jen přiřazujte jméno souboru do proměnné. Za podmínkou pak zjistíte, jestli soubor existuje (file_exists) a podle toho buď includujete ten soubor nebo 404.
Supel
Profil *
Tori:
Díky, ale nešlo by to spíše napsat?
Chápu, že to není zrovna dobré řešení, ale moje ambice v PHP nejsou žádné.
Tohle používám jen proto, že frame se mi nelíbí.
Tori
Profil
if(!isset($_GET['page']) || empty($_GET['page']))
  $file = "page1.htm";
else
{
  switch ($_GET["page"])
  {
    case "00":
      $file = "page1.htm";
      break;
                    
    case "01":
      $file = "page2.htm";
      break;
      
    case "02":
      $file = "page3.htm";
      break;
  }
}
if (file_exists($file))
  include $file;
else
  include "404.php";
CZechBoY
Profil
já bych tam dal ještě proměnný název u toho pageX.htm podle toho jak se na to koukám ;) samozřejmě pak budeš muset filtrovat data přes (int)
u 404 bych ještě poslal
Header('Status: 404 Not Found',true,404);
pro informaci vyhledáváčům
motik
Profil
Supel:
Ale aby to nebylo určeno defaultem.
jen nechápu, proč by to nemělo být v default... přece když něco nemáš "povolené" v tom switch, tak by ta stránka "neměla existovat"
switch ($_GET["page"])
  {
    case '':
        include 'page.htm';
      break;
    
    case "00":
        include "page1.htm";
      break;
    
    case "01":
        include "page2.htm";
      break;
    
    case "02":
        include "page3.htm";
      break;
    
    default:
        include "404.php";
       break;
   } 
Bertram
Profil
Ahoj, programovat mě nikdy nikdo neučil a vše co znám je převážně z knih, ale snad ve všech se píše, abych se snažil těmto konstrukcím vyhýbat.
Z kódu je patrné, že závislost proměnné z url a názvem souboru je daná.
Proč to tedy nezautomatizovat a vyhnout se nutnosti dopisovat kód s každou novou stránkou?
Rád si přečtu Váš názor a nechám si to vysvětlit.

  if (isset ($_GET['page'])){
    $page = "page". intval($_GET['page']+1). ".htm";
    loadPage ($page);
  }
  
  function loadPage($page) {
      if (file_exists($page))
        {
          include_once $page;
        }
      else
        {
          include_once "404.php";
        }
    }
Supel
Profil *
motik:
jen nechápu, proč by to nemělo být v default... přece když něco nemáš "povolené" v tom switch, tak by ta stránka "neměla existovat"

Je to proto, že chci použít jednoduchou změnu title a nevím, jak vyřešit, abych neměl duplicitní název.
To asi ale i tak budu mít, protože includuju do index.php stránku (page.htm hned při startu.
Nevím jak to udělat, abych při kliknutí v menu na úvod nemusel vypisovat index.php?page=page
Ale bude to pokrok, protože při stávajícím řešení mám 250 duplicit:-(

Pro tu změnu title chci použít tohle. Je to pro mě pochopitelné a zdá se mi to jednoduché:
Tohle způsobuje, že mi stránka vypíše název i při 404
<title><?php
switch (isset($_GET['stranka']) ? $_GET['stranka'] : NULL) {
    case '00': echo 'Název page1'; break;
    case '01': echo 'page2'; break;
            default: echo 'Název page1';
}
?></title>
motik
Profil
Supel:
Je to proto, že chci použít jednoduchou změnu title a nevím, jak vyřešit, abych neměl duplicitní název.
a proč to tedaneuděláš např. takto?
<?php
switch ($_GET["page"])
  {
    case '':
        $title = "vítejte na stránkách";
        $strana = 'page1.htm';
      break;
 /*   
   toto dát pryč - i pro vyhledávače by neměl být stejný obsah na více adresách
    case "00":
        include "page1.htm";
      break;
  */  
  
    case "01":
        $title = "novinky";
        $strana = 'page2.htm';
      break;
  
    default:
        $title = "stránka nenalezena....";
        $strana "404.php";
       break;
   } 
?>   
<html>
  <head>
    <title><?php $title; ?></title>
  </head>
  
  <body>
    <?php 
        include $strana;
      ?> 
  </body>
</html>
   

ještě bych ty číselné indexy prohodil za text např. page=01 za page=novinky
Supel
Profil *
motik:
a proč to tedaneuděláš např. takto?

Protože jsem PHP antitalent. Používám to jen, když mi s tím někdo poradí.
Jinak se do žádných šíleností nepouštím. Jen css a obyčejný html kód. A to taky jen omezeně.

Díky moc lidi. Zkusím něco z toho použít, i když nevím co je nejlepší.
motik
Profil
Supel:
Zkusím něco z toho použít, i když nevím co je nejlepší.
nejlepší není asi nic, záleží, co od toho čekáš...
dá se to řešit různými způsoby (pro začátek bych ti doporučil asi [#11] (hlavně kůli tomu, že si tam nadefinuješ pěkně to co potřebuješ a zbytěčně tam necpeš podmínky, kterým nerozumíš) a když si budeš kód pěkně odsazovat, tak se v něm i lépe vyznáš.. záleží i na tom, jak vypadají ty vkládané soubory... má to ale nevýhodu, že musíš k tomu ještě ručně dělat menu např.: když se rozhodneš přidat stránku, tak ji musíš definovat i v tom switch a dále i v tom menu (tudíž bude větší pravděpodobnost, že něco přehlídneš a nebo zapomeneš nějký odkaz přidat..)

když si ty stránky definuješ do pole např.:
// náznak dalšího řešení
$stranky = array(
  'uvod' => 'Úvodní stránka',
  'novinky' => 'Novinky'
  );

if(isset($stranky[$_GET['page']]))
  {
    include ($_GET['page'] . '.php');
  } else 
    {
      include('404.php');
    }
  


a menu se ti bude generovat:
function menu()
  {
    global $stranky;
    $out = '';
    foreach ($stranky as $key => $val)
      {
        $out .= '<a href="?page='.$key.'">'.$val.'</a>';
      }
    
    return $out;
   }
 
echo menu();


záleží jen na tobě, jaký způsob si zvolíš a jaký ti bude vyhovovat (hlavně by ses měl v něm vyznat)
Supel
Profil *
Tohle řešení je na mě složité. To nebudu realizovat. Musel bych vás více otravovat a to nechci.

Vyzkouším teda tu #11, ta se mi zdá nejschůdnější.
Supel
Profil *
To title mi nějak nefunguje.
Nemá to být nějak podobvně:

<title><?php echo "$title"; ?></title>
Supel
Profil *
Supel:
Pardon, už vím kde je chyba. První musím načíst hodnoty, pak je mohu vypsat:-D

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