NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: preg_match

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Libor Šikula:12.7.2017 20:49

Zdravím, potřeboval bych poradit, jak udělat pomocí preg_match, aby podporoval jen a-z,A-Z,0-9 a podtržítko _
Zatím mám tento kód
if (!preg_match("/^[a-zA-Z]+$/",$nickname)) {
$error = true;
$name_error = "Nick může obsahovat pouze písmena, čísla a _";
}

 
Odpovědět
12.7.2017 20:49
Avatar
Odpovídá na Libor Šikula
Uživatel sítě :12.7.2017 21:15

Ahoj, můžeš použít buď [a-zA-Z0-9_] nebo přímo předefinovanou skupinu \w.

Nahoru Odpovědět
12.7.2017 21:15
Chybami se člověk učí, běžte se učit jinam!
Avatar
Libor Šikula:13.7.2017 11:50

Díky, funguje to :)

 
Nahoru Odpovědět
13.7.2017 11:50
Avatar
Torhan Michal:5.4.2018 19:22

Zdravím potřeboval bych poradit..
Mám tento kód, který dynamický načítá obsah z podstránek.
if (isset($_GET['p­age']))
$page = $_GET['page'];
else
$page = 'home';
if (preg_match('/^[a-z0-9]+$/', $page))
{
$vlozeno = include('podstran­ky/' . $page . '.php');
if (!$vlozeno)
echo('Page not found');
}
else
echo('Invalid parameter');
Můj problém je ten, že chci mít název url adresy např. fitness-produkty a ne fitnessprodukty (spojená slova dohromady), aby se mi stránka načetla. Jelikož jsem začátečník, nechtěl bych tam mít v kódu bezpečnostní trhlinu. Rád bych upravil preg_match tak, aby mi to fungovalo. Budu rád za každou radu. díky

 
Nahoru Odpovědět
5.4.2018 19:22
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Torhan Michal
Jindřich Máca:5.4.2018 21:43

Zdravím,

celá pointa je v tom, že musíš rozumět regulárním výrazům a správně si upravit ten výraz ve funkci preg_match(). Existuje na to i online nástroj, kde jsem připravil výraz, který nejspíše chceš, ale můžeš si to ještě upravit dle potřeby - http://www.phpliveregex.com/p/nzz

Dále, co se týče bezpečnosti, tak pokud jsi začátečník, doporučuji poctivě nastudovat třeba zdejší sekci Bezpečnost webových aplikací v PHP.

Nakonec ten zdroják by se dal udělat trochu lépe, např. bych si nejdříve kontroloval existenci daného souboru, než se ho snažit načíst a pak teprve kontroloval, jak to vlastně dopadlo. Mohlo by to vypadat třeba nějak takto:

$page = isset($_GET['page']) ? $_GET['page'] : 'home';
if (preg_match('/^\w+-?\w+$/', $page) && file_exists($file = "podstranky/$page.php"))
        include($file);
else echo('Page not found');

Kdyby jsi měl nějaké další dotazy, klidně se ptej. ;)

 
Nahoru Odpovědět
5.4.2018 21:43
Avatar
Torhan Michal:6.4.2018 19:42

Děkuji. Moc jsi mi pomohl. Kód jsem upravil podle tebe a článek si určitě nastuduji díky za tip:). Měl bych ještě poslední dotaz.
Podle kódu výše načítám obsah z podstránek do indexu, kde mám celý layout. Chci se zeptat, jak docílit při načtení obsahu z podstránky, aby se mi zároveň měnil i titulek a meta značky jako je description a keywords? Jde to i jinou formou než databázi? Myslíš, že existuje i jiné řešení? Děkuji za odpověď.

 
Nahoru Odpovědět
6.4.2018 19:42
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Torhan Michal
Jindřich Máca:8.4.2018 0:43

Není zač, rád jsem pomohl. Co se týče změny titulku apod. musíš si příslušnou podstránku vyřešit hned na začátku souboru a potom podle toho vložit i daný titulek atd. Jestli to pak budeš načítat z databáze nebo třeba ze souboru je asi čistě na Tobě.

Ano, existuje jiné, skoro jistě i lepší řešení a to bude nejspíše součástí nějakého frameworku. Opět velice doporučuji podívat se např. na zdejší seriál o tvorbě redakčního systému v PHP. Řeší se tam defakto všechno, o co se pokoušíš a ještě mnohem víc, na profesionálnější úrovni, včetně třeba důrazu na bezpečnost. :-`

 
Nahoru Odpovědět
8.4.2018 0:43
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.