Stránka 1 z 2
Dynamické stránky vs SQL vs require
Napsal: čtv 28. kvě 2009, 11:00
od Balin.Tomas
Zdravím a prosím o pomoc.Podle tohoto článku zde na webu:
http://pctforum.tyden.cz/viewtopic.php?f=53&t=140263
jsem udělal vkládání stránek.Vše je jak má.Problém je: adresa např.:index.php?strana=problem
Pokud je adtesa v databázi a soubor existuje tak bez problému, pokud ale pouze je v databázi a neexistuje soubor vyhodí to hlašku "failed to open stream: No such file or directory in" atd.
Jak a kam a jaký kod, pokud to půjde, by se měl doplnit do toho scriptu aby to i v tomto případě přesměrovalo na stranku 404.php
Mockrát děkuji za vaše rady.
Tady je ten kod:
Kód: Vybrat vše
<?
$kod = "xxxx"; // Napíšeme bezpečnostní kód
if(IsSet($_GET['strana'])): // Ověříme, jestlie existuje proměnná $strana
MySQL_Connect("xxx", "xxx", "xxx"); // Připojíme se k databázi
MySQL_Select_DB("xxx"); // Vybereme databázi
$vysledek = MySQL_Query("SELECT url FROM strany WHERE id = '$_GET[strana]'"); // Napíšeme SQL příkaz
if(MySQL_NumRows($vysledek) == 1):
$url = MySQL_Result($vysledek, 0, "url"); // Adresu z databáze zapíšeme do proměnné $url
else:
$url = "404.php"; // Pokuď záznam nebyl nalezený, tak do proměnné $url vložíme jinou stránku, např. upozornění na chybu
endif;
else:
$url = "uvod.php"; // V případě, ze neexistuje poměnná $strana, vložíme do $url hlavní stránku
endif; // Ukončíme první podmínku
require $url; // Vygenerujeme stránku
?>
Re: Dynamické stránky vs SQL vs require
Napsal: čtv 28. kvě 2009, 18:35
od arxeiss
Jako když ta stránka v SQL je zapsaná, ty ji dáš jako require, jako že by se měla vypsat, ale neexistuje tak ti to napíše tu chybu, tak zkus pak jěště dát if(!file_exists("stranka")){ include "error404.php"; }
Re: Dynamické stránky vs SQL vs require
Napsal: čtv 28. kvě 2009, 18:45
od OndraSter
Kód: Vybrat vše
...
if(MySQL_NumRows($vysledek) == 1):
$url = MySQL_Result($vysledek, 0, "url"); // Adresu z databáze zapíšeme do proměnné $url
if (!file_exists($url)) $url = '404.php';
else $url = $url;
else:
...
(Proč tam je "else $url = $url;"? Protože tam jsou použity to totálně dementní ": else: endif;" otevírací a zavírací, mohlo by se to pak splést a vyelsovat se to dřív, což by zavinilo chybu skriptu.)
Re: Dynamické stránky vs SQL vs require
Napsal: čtv 28. kvě 2009, 19:36
od snouman.net
Dobrá prasečinka...

Re: Dynamické stránky vs SQL vs require
Napsal: čtv 28. kvě 2009, 19:52
od arxeiss
snouman.net píše:Dobrá prasečinka...

Teď myslíš celkově kód, jako jeho psaní? Mi to připadá totálně nepřehledně, já i když dávám podmínku na jeden řádek, stejně použiju { }. Endif používám jenom pokdu je mezi tím hodně dlouhý kód.
Re: Dynamické stránky vs SQL vs require
Napsal: čtv 28. kvě 2009, 20:00
od snouman.net
Všechno, struktura kódu. Endif, ten se v PHP nepoužívá.
http://cz.php.net/manual/en/control-structures.if.php
Re: Dynamické stránky vs SQL vs require
Napsal: čtv 28. kvě 2009, 20:06
od OndraSter
Nechtělo se mi to jeho kompletně upravovat, tak jsem se jen podřídil, svojí funkci to plní a pokud se na to nebude dále šahat, tak to je jedno, jak to vypadá, ne?
Jinak endif atd funguje.
Re: Dynamické stránky vs SQL vs require
Napsal: čtv 28. kvě 2009, 20:21
od snouman.net
Jasný to není tvoje vina

Ten kód je celej špatně koncipovanej. No, pokud na ty stránky vleze deset lidní denně, tak to jedno je. Ale už jen pro dobrý pocit bych to přepsal o výkonnosti nemluvě. Endif samozžejmě funguje, kvůli "kompatabilitě" s jinými jazyky...
Re: Dynamické stránky vs SQL vs require
Napsal: čtv 28. kvě 2009, 21:18
od l_iNu$
snouman.net píše:Endif samozžejmě funguje, kvůli "kompatabilitě" s jinými jazyky...
Endif samozřejmě nefunguje kvůli kompatibilitě s jinými jazyky ale hodí se třeba do šablon kde se hodí psát:
Kód: Vybrat vše
<?php foreach (…): ?>
<b>…</b>
<?php endforeach ?>
namísto v nepříliš jasnýho (hlavně pokud je vnitřek bloku nabitější)
Kód: Vybrat vše
<?php foreach (…) { ?>
<b>…</b>
<?php } ?>
Re: Dynamické stránky vs SQL vs require
Napsal: čtv 28. kvě 2009, 21:38
od snouman.net
endif != endforeach
To co řikáš je samozřejmě pravda...
Re: Dynamické stránky vs SQL vs require
Napsal: pát 29. kvě 2009, 01:16
od Balin.Tomas
snouman.net píše:Jasný to není tvoje vina

Ten kód je celej špatně koncipovanej. No, pokud na ty stránky vleze deset lidní denně, tak to jedno je. Ale už jen pro dobrý pocit bych to přepsal o výkonnosti nemluvě. Endif samozžejmě funguje, kvůli "kompatabilitě" s jinými jazyky...
Tak koukám že jsem se měl s tímto kodem .....
Jak jsem ale psal je to převzato odtud z webu a tam nikdo nic proti nenapsal, ba naopak.
Mohli by jste mi poradit jak pomoci databáze includovat stranky nebo odkaz kde bych se něco dozvěděl (ale prosím aby to bylo psané pro blbečky

) Vše se teprve sám učím a příklad je nejlepší učitel.
Děkuji
Re: Dynamické stránky vs SQL vs require
Napsal: pát 29. kvě 2009, 14:02
od Balin.Tomas
Mám otázečku,asi to nepatří pod tento nadpis příspěvku co jsem uvedl, ale co tento kod bez databáze?
Kód: Vybrat vše
<?php
if (isset($_GET['page'])){
$soubor=$_GET['page'];
$soubor2= dirname($_SERVER['SCRIPT_FILENAME'])."/".$soubor.".php";
if(file_exists($soubor2)){
if(substr_count($soubor,"../")>0){
echo "<h3>Upozornění</h3>Nelze nahrát soubor v nadřazeném adresáři!";
}elseif($soubor=="index" or $soubor=="/index"){
echo "<h3>Upozornění</h3>Index nemůže načíst sám sebe!";
}else{
include $soubor2;
}
}else{
include "inc/error404.php";
}
}else{
include "uvod.php";
}
?>
Re: Dynamické stránky vs SQL vs require
Napsal: pát 29. kvě 2009, 14:48
od arxeiss
Tento kód používám já, a je OK. Ale jak kontroluješ jestli to není index nebo /index tak tam dopiš ./index takto
Kód: Vybrat vše
...
}elseif($soubor=="index" or $soubor=="/index" or $soubor=="./index"){
...
ale jinak je OK

Re: Dynamické stránky vs SQL vs require
Napsal: pát 29. kvě 2009, 18:29
od Balin.Tomas
arxeiss píše:Tento kód používám já, a je OK. Ale jak kontroluješ jestli to není index nebo /index tak tam dopiš ./index takto
Kód: Vybrat vše
...
}elseif($soubor=="index" or $soubor=="/index" or $soubor=="./index"){
...
ale jinak je OK

Díky, tak ja použiji tento.Ale co když mám soubory třeba ve třech adresářích?Dá se to napsat nějak v tom kodu a nebo musím ty soubory volat index.php?page=adresar/soubor1, index.php?page=adresar2/soubor2 to by mi moc nevyhovovalo.
Děkuji
Re: Dynamické stránky vs SQL vs require
Napsal: pát 29. kvě 2009, 19:19
od arxeiss
Tak třeba předpokládám že ty adresáře tam nemáš jen tak že? Např v adresar1 jsou stránky v adresar2 je administrace a v adresar3 je fotogalerie. Tak třeba udělej že adresar1 bude ?p=stranka adresar 2 bude ?a=administrace a ?g=galerie
Nebo si to rozšiř že uděláš podmínku a nejdříve to zčekne adresar1 a pokud to tam nepujde tak to zkontroluje adresar2 a pak adresar3 ale to sebou nese nevyhodu ze se ti 2 soubory nesmí jmenovat stejně, tak si z toho něco vybereš.
Re: Dynamické stránky vs SQL vs require
Napsal: pát 29. kvě 2009, 19:42
od Balin.Tomas
Teď jsem se do toho zamotal
Prosim tě jak by měl ten kod tedy vypadat při tom prvním způsobu (?p=stranka atd.)
Díky moc za tvou pomoc.
Re: Dynamické stránky vs SQL vs require
Napsal: pát 29. kvě 2009, 19:53
od arxeiss
Kód: Vybrat vše
if (isset($_GET['page'])){
$soubor=$_GET['page'];
$soubor2= dirname($_SERVER['SCRIPT_FILENAME'])."/page/".$soubor.".php";
}elseif (isset($_GET['admin'])){
$soubor=$_GET['admin'];
$soubor2= dirname($_SERVER['SCRIPT_FILENAME'])."/admin/".$soubor.".php";
}elseif (isset($_GET['galery'])){
$soubor=$_GET['galery'];
$soubor2= dirname($_SERVER['SCRIPT_FILENAME'])."/galery/".$soubor.".php";
}
Snad chápeš že tam musíš mít ty kontroly atd... a pak jěště na konci to else inlcude uvod atd...
Jinak raději používej ?p= místo ?page= nebo ?a= místo ?admin= atd... Čím delší tím se více spleteš, mluvím z vlastní zkušenosti
Re: Dynamické stránky vs SQL vs require
Napsal: pát 29. kvě 2009, 20:38
od Balin.Tomas
Tak už to konečně chápu.Děkuji za pomoc a použiji to tak. Aještě k tý tadabázi, co je na tom špatně tedy když se nekouká na přehlednost.Já abych věděl čeho a kdy se vyvarovat.Ještě toto, jestli includování stránek (tento příklad) chápu dobře Tak pomocí tohoto kodu se stranky vypíšou v idexu, ale když potřebuji naincludovat nastavení, třeba připojení k databázi tak se musí použít to klasické include nebo require: require ("neco.php"); ?nebo se může použít index.php?neco=neco
Já jsem to zkoušel a občas mi to vzalo a občas hodilo chybu.Vše se sám učím a pokud nevidím nějaký příklad, kterému nerozumím tak to nechápu.Dík
Re: Dynamické stránky vs SQL vs require
Napsal: pát 29. kvě 2009, 20:55
od arxeiss
Teď nevím co by na tom mělo být špatně, až na to že tam chyběla podmínka jestli vůbec stránka existuje, a že pokud přidáš stránku tak to musíš zapsat i do DB tak myslím že tam nic nebylo
Edit:\\ Tak to teď nechápu jak to myslíš, jako že budeš chtít třeba do jiné části stránky vložit něco jiného? Nebo jako jěště z jiného adresáře? Zkus popsat příklad
Re: Dynamické stránky vs SQL vs require
Napsal: pát 29. kvě 2009, 21:15
od Balin.Tomas
Omlouvám se poslední dotaz beru zpět.Ale dik