Autor Zpráva
paradox
Profil
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
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
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
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
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
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
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().
Kubo2
Profil
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.

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