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
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn university Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity (1)

 

 

Komentáře

Avatar
Alma Mater
Člen
Avatar
Alma Mater: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
Kopírovanie je jednoduchá forma zdieľania informácii, aby sa šírili tam kde chýbajú..Autorské právo je demonštrácia m...
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.