Autor Zpráva
icka
Profil *
Je toto bezpečný zápis include?

odkaz?strana=1
odkaz?strana=2...

PHP:
switch ($_GET["strana"]) {
case 1:
$page="stranka1.php";
break;
case 2:
$page="stranka2.php";
break;
default:
page="index.php";
}

if (file_exists($page)) {
include $page;
} else {
echo "Stránka nebyla nalezena";
}
Dero
Profil
Proč ne?

(jen u default větve Ti chybí $ u proměnné ...)
icka
Profil *
Já to psal narychlo... bez kontroly :-)
Charlie
Profil
Trošku bych to pozměnil:

$stranky = array(1=>"stranka1.php","stranka2.php");
$stranka = $stranky[$_GET['stranka']];
if (empty($stranka)) {
$stranka = "index.php";
}
if (file_exists($stranka)) {
@ include($stranka);
} else {
echo "Stránka nebyla nalezena";
}
icka
Profil *
Charlie
Je tento zápis bezpečnější? A volba toho zavináče u include se mi líbí.
Kaifman
Profil
Charlie kdyz nebude _GET['stranka'] hodi ti to error takze if(empty($stranka)) by melo by nekde jinde a trochu jinak
Kaifman
Profil

if (isset($_GET['stranka']) and $_GET['stranka']){
$stranky = array(1=>"stranka1.php","stranka2.php");
$stranka = $stranky[$_GET['stranka']];
} else
$stranka = "index.php";
if (file_exists($stranka))
@include($stranka);
else
echo "Stránka nebyla nalezena";


takhle to bude lepsi
Charlie
Profil
Kaifman, když nebude $_GET['stránka'], tak to vyhodí pouze notice a tento notice je v PHP implicitně vypnutý. Ten script je dost bezpečný.
Kaifman
Profil
Charlie

implicitne vypnuty je maximalne na freehostingu a u tebe na locale ;o)

Na vetsich webech je vetsinou zapnuto E_ALL bez vyjimky a vse se loguje pres vlastni error_handler do souboru.
S takovymhle laxnim programatorskym pristupem by meli logy za chvili stovky MB a pritom ulpne zbytecne

A pokud vim tak implicitni nastaveni php ma do nejake bezpecnosti hodne daleko, pokud si dobre pamatuju tak primo na zacatku konfiguraku php.ini je napsano ze toto defaultni nastaveni slouzi jen pro dev. ucely nebo tak nejak
Charlie
Profil
Nemyslím si, že programuji laxně, jedniné co vynechávám je právě tohle - kontrola existence proměnné.
Charlie
Profil
Mimochodem dalo by se to zapsat třeba takhle:-)
<?php include($_GET['stranka']); ?>
Kaifman
Profil
<?php include($_GET['stranka']); ?>
tak to je jednoznacne nejlepsi zapis ;o)
icka
Profil *
Ta poslední verze je super... co si lámat hlavu s kódem že...?
Ale ještě malý dotaz co se týče includu.
Když includuji nějaký soubor, který obsahuje PHP scripty a ten soubor obsahuje jen pole (měl by). Soubor je přenosný mezi dvěma pc, kde je aplikace a těma polema si ty aplikace aktualizuji - doplňuji do DBA. Ale co když si ten soubor pošlu mejlem a nějakej dobrák mi do toho inc souboru frkne nějakej báječnej skriptík, kterej mi při nejlepším smaže roční práci...?
Dá se tomu includovanému souboru zabránit např. dočasně zakázat spouštět skript a nejdřív jej nějak ověřit, zda nebyl nijak víc modifikovaný? Třeba na základě atributů vytvoření souboru a změna souborů a pod... Snad víte o co mi jde... Díky
Kaifman
Profil
tak to sem teda vubec nepochopil.... :(

ale)

>na vymenu dat bych pouzil xml,nebo csv a ne skripty, xml (csv) ti nikdo neublizi protoze si ho parsujes sam

>jak by to tam do toho inc souboru dostal uz jsem vubec neztih :D

>zalohuj >]
Icka
Profil *
No mám jedoduše funkci, která mi ukládá do inc souboru $pole[] (jako sloupec tabulky z DBA) a pak mám funkci, která mi zas ten soubor includuje, načte pole a postupně je ukládá do DBA... Jedno po druhém pomocí cyklu foreach.
S xml moc zkušeností nemám :-( Teda vůbec. A chctěl jsem aby přenosný soubor měl co nejmenší velikost, tak jsem zvolil pouze takto jednoduše textovou metodu...
Kaifman
Profil
xml i csv je jenom text


xml je podobny jako html koukni na www.kosek.cz

csv jsou jen hodnoty oddelene carkam takze to je jeste mensi nez ty tvoje pole na kazdym radku si das jeden radek tabulky stejne jako v db

hodnota1,hodnota2,hodnota3
hodnota1,hodnota2,hodnota3
hodnota1,hodnota2,hodnota3

pak si to jen nactes



if ($f = file('ten.soubor.txt'))
foreach ($f as $radek){
$hodnoty = explode (','$radek);
echo $hodnoty[0], atd
}
Icka
Profil *
No ale co když mám víc tabulek a mění se mi jen číslo roku, pač v těch tabulkách je mnoho údajů (každý týden 50 - 60 nových) tak mám strukturu DBA rozdělenou na roky seznam_2004, seznam_2005, seznam_2006 no a tam bylo potřeba zvolit vícerozměrné $pole[04][] = "hodnota"; $pole[04][] = "hodnota"; $pole[05][] .......
Kaifman
Profil
uz ty tabulky kazda na jinej rok je blbost, mel by si mit proste jednu tabulku treba se jmenen data ve ktere bude

rok,hodnota1, hodnota2, hodnota3, atd

a pak si akorat v selectu v podmince das co chces za rok

kdybys potom chtel delat treba nejaky statistiky nebo tak neco pres vsechny roky nebo treba jen pres dva musel by si delat pro kazdej rok novej dotaz coz je dost zbytecny

neni o dost jednodusi napsat

select hodnota1 form data where rok > '2002' and rok < '2005'

a tokovouhle tabulku bez problemu ulozis do csv

50 - 60 radku tydne rozhodne neni velka tabulka to se neboj ... vetsi tabulka je treba stotisic a vic ;]
Icka
Profil *
Dobře, beru si to k srdci. Díky za pomoc. To XML není špatné, ale teď asi zvolím csv a DBA přepracuji :-)
Toto téma je uzamčeno. Odpověď nelze zaslat.