Autor | Zpráva | ||
---|---|---|---|
paradox Profil |
#1 · Zasláno: 16. 11. 2013, 07:28:56
Zdravím, v knihe bol tento kód:
<?php $text=htmlspecialchars(strip_tags($_GET['text'])); if($text==''){ $text='titulka'; } if (file_exists($text.'.php')) { require $text.'.php'; } else { require 'error404.php'; } ?> Na webe sa mi vždy zobrazí, že táto časť kódu je zle: $text=htmlspecialchars(strip_tags($_GET['text'])); prečo? Trochu som skúmal internet a vyskúšal takúto vec: <?php $text=htmlspecialchars(strip_tags(!empty($_GET['text']))); if($text==''){ $text='titulka'; } else { $text= $_GET['text']; } if (file_exists($text.'.php')) { require $text.'.php'; } else { require 'error404.php'; } ?> - Teraz web funguje ako hodinky, ale vôbec nechápem čo mi pomohla táto úprava. Vysvetlí mi to niekto? Hlavne čo znamená to že som pridal !empty do kódu skúšal som aj empty bez ! ale vtedy to nefungovalo tak ako som chcel. Ďakujem za rady |
||
Alphard Profil |
#2 · Zasláno: 16. 11. 2013, 09:15:10
Nic moc překvapivého, viz Nejčastější potíže s PHP (FAQ) » Nefungují proměnné z formuláře nebo z URL (vypnuté register globals).
Vyřešil jste to dobře s přidáním else podmínky na 8. řádku, ale blbě na druhém řádku. Výraz empty($_GET['text']) dejte do podmínky na 4. řádku (místo testování == '' ) a dané funkce (které také nejsou voleny moc dobře) začleňte na 8. řádek.
Kniha je buď stará, nebo napsaná blbě v současnosti, zahodit, sehnat lepší :-) |
||
paradox Profil |
#3 · Zasláno: 16. 11. 2013, 11:39:24
Skúsil som to. Toto ste mali namysli?
<?php if(htmlspecialchars(strip_tags(empty($_GET['text'])))){ $text='titulka'; } else { $text= htmlspecialchars(strip_tags($_GET['text'])); } if (file_exists($text.'.php')) { require $text.'.php'; } else { require 'error404.php'; } ?> Ďakujem |
||
juriad Profil |
#4 · Zasláno: 16. 11. 2013, 11:57:34
Celý kód mi přijde divný. Co tam dělá htmlspecialchars a strip_tags?
Napsal bych to nějak takto: // byl uvedeny parametr, ma nenulovou delku a neobsahuje lomitko (zabrani utokum typu: ../config) // nepouzivam empty, protoze to znemoznuje soubor pojmenovany 0.php if (isset($_GET['text']) && strlen($_GET['text']) > 0 && strpos($_GET['text'], '/') === FALSE) { $file = $_GET['text'] . '.php'; } else { $file = 'titulka.php'; } if(file_exists($file)) { require $file; } else { header("HTTP/1.0 404 Not Found"); require 'error404.php'; } |
||
Tori Profil |
#5 · Zasláno: 16. 11. 2013, 20:21:26
paradox:
„v knihe bol tento kód“ Která kniha to je? (Ptám se, abych věděla, co nedoporučit.) |
||
Jan Tvrdík Profil |
#6 · Zasláno: 16. 11. 2013, 20:35:00
juriad:
Ještě by to chtělo zkontrolovat, že $_GET['text'] je řetězec, jinak to bude házet warning, když se tam objeví pole.
if (isset($_GET['text']) && is_string($_GET['text']) && strlen($_GET['text']) > 0 && strpos($_GET['text'], '/') === FALSE) ... |
||
Kubo2 Profil |
#7 · Zasláno: 16. 11. 2013, 21:51:33
Ja by som chcel iba dodať, že kontrolovanie nenulovej dĺžky GET parametru text je úplne zbytočné, pretože ak parameter existuje a je nulovej dĺžky, ide o prázdny reťazec, čili
"".'.php' (po vyhodnotení ".php" ) a takisto ako v iných prípadoch ide iba o neexistujúci názov súboru, čo sa overí funkciou file_exists() .
|
||
Časová prodleva: 22 dní
|
|||
Kubo2 Profil |
#8 · Zasláno: 8. 12. 2013, 19:32:51 · Upravil/a: Kubo2
Náhodou som na portále BIRDZ.sk, kde tiež pôsobím, v sekcii fór narazil na úplne identický dotaz.
Stavím sa, že keby som hľadal, tak na nete nájdem viacero ekvivalentov, ale moc sa mi do toho nechce. |
||
Časová prodleva: 10 let
|
0