Využij akce až 30 % zdarma při nákupu e-learningu. Více informací. Zároveň je tento týden sleva až 80 % na e-learning týkající se C# .NET
Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.

array_intersect_key - Český PHP manuál

Funkce vrátí pole, jehož klíče jsou průnikem klíčů dvou polí. Možná to zní trochu matematicky, ale funkce je velmi dobře použitelná např. pro bezpečné zkopírování dat z $_POST.

Parametry

V obou parametrech jsou očekávána pole, z jejichž klíčů se udělá průnik.

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

V prvním poli se ponechají jen ty klíče, které jsou přítomné i v poli druhém. Druhé pole tedy můžeme chápat jako vzorové. Hodnoty z 2. pole se do výsledku nikdy nedostanou.

Návratová hodnota

Pole s průnikem klíčů obou polí.

Příklad

Ukažme si, jak lze funkci využít pro bezpečné vyfiltrování pole, které nám odeslal uživatel (např. hodnoty v $_POST).

<?php
// $pole by bylo ve skutečnosti $_POST
$pole = array(
        'jmeno' => 'Jan',
        'prijmeni' => 'Novák',
        'hodnoceni' => 'Nejlepší programátor na světě'
);
$povolene = array('jmeno', 'prijmeni');
$pole = array_intersect_key($pole, array_flip($povolene));

print_r($pole);

Obsah $pole je tedy nyní pouze:

Array
(
    [jmeno] => Jan
    [prijmeni] => Novák
)

Pomocí array_flip si vytvoříme pole s klíči bez hodnot a těmito klíči profiltrujeme vstupní pole.

Kód výše by mohl být někde ve správě uživatelů, kde si uživatel chtěl změnit spolu se jménem a příjmením ještě jeho hodnocení. To jednoduše odeslal v $_POST třeba tak, že si přidal do formuláře pomocí Developer Tools další políčko. I kdyby takový sloupec v databázi opravdu existoval, do dotazu se nedostane.


 

Všechny články v sekci
Pole - Český PHP manuál
Článek pro vás napsal David Čápka
Avatar
David je zakladatelem ITnetwork a programování se profesionálně věnuje 13 let. Má rád Nirvanu, sushi a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity

 

 

Komentáře

Avatar
Otvorený Zdroj
Super redaktor
Avatar
Otvorený Zdroj:28.5.2019 1:20
if ($_POST)
                {

// Funkcia  array_intersect_key v skratke ošetruje to, ktoré klíče sa majú posielať (ktoré sú želané).

// Najprv KLÍČE zapíšeme ako HODNOTY  do poľa  $klice.

//  Následne tieto HODNOTY prevedieme na KLICE funkciou array_flip($klice).

// Potom funkciou array_intersect_key hladame zhodu medzi klíčmi poslanými z $_POST a našimi očakavanými klíčmi, z funkcie array_flip($klice).

// Nakoniec do poľa $clanek dostaneme len tie klíče, ktoré sa zhodujú a k nim sa priradia hodnoty.

$klice = array('titulek', 'obsah', 'url', 'popisek', 'klicova_slova');
$clanek = array_intersect_key($_POST, array_flip($klice));

}

Dúfam že som to pochopil správne :-). Je to iba ďalšie vysvetlenie funkcie array_intersect_key :-)

Oříznout $_POST musíme vždy, jinak se vystavujeme útoku mass assignment, uživatel by si do formuláře mohl přidat nějaká pole a ta by se vložila do databázového dotazu.

Odpovědět
28.5.2019 1:20
Ak existuje voľná energia, tak autorské právo sú dve smiešne slová..
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 1 zpráv z 1.