Autor Zpráva
TheKronnY
Profil
Zdravím,
mám následující problém - dělám registrační skript a pomocí tohoto dostávám proměnné z toho co uživatel vyplnil:
foreach ($_POST as $key=>$value) {
    $$key = $value;
}
Co bych chtěl udělat je ještě ke každé proměnné vytvořit proměnnou o stejném základu + "_error" k tomu. Myslím to následovně:
$$key + "_error"
Jen se potýkám s problémem, že nevím jak na to, chci se vyhnout kilometrové stránce celou z IF statementů kde budu ručně vše vytvářet.

Předem díky za pomoc,
TheKronnY
Radek9
Profil
TheKronnY:
${$key . "_error"}

Je to ale celkem humus. Brání ti něco použít pole?
TheKronnY
Profil
Nejsem zase tak zběhlý, jaké pole? A proč by to měl být humus?
DJ Miky
Profil
PHP má datový typ pole: http://www.php.net/manual/en/language.types.array.php

Nicméně samotné přesypání proměnných z $_POST bývá zbytečné, proč nepracuješ přímo s $_POST?

Hlavní praktická nevýhoda těchto konstrukcí proměnné v proměnné ($$key) je nepřehlednost. Když budeš mít uprostřed kódu použitu proměnnou $abc_error, tak nepoznáš, kde se vzala a co v ní vůbec je, aniž bys detailně prošel celý kód od začátku. Když tam místo toho bude $_POST['abc'], tak ti bude jasné, že je to obsah formulářového pole abc vyplněný uživatelem.
Tori
Profil
TheKronnY:
A proč by to měl být humus?
Proměnné proměnné jsou málokdy optimálním řešením, většinou se podobné věci řeší pomocí polí. Co když budete mít někde dřív definovanou nějakou proměnnou, kterou za tím foreach potřebujete, a náhodou si ji takhle přepíšete? Z toho vznikají dost těžko dohledatelné chyby.
Navíc čtete data z formuláře. Pravidlem je považovat veškerá data z vnějších vstupů za nedůvěryhodná (= z hlediska aplikace; ne toho, jestli uživatel zadal reálné jméno nebo ne) a potenciálně nebezpečná. Proto se např. před vložením do databáze vždy mají převést na nějaký bezpečný formát (pole, kde očekávám číslo, přetypuju na číslo, takže už nemůže obsahovat nic jiného). No a tady na základě dat zvenku nastavujete/přepisujete nějaké proměnné - takže pokud budete mít proměnnou $abc a z formuláře přijde $_POST['abc'], můžete si původní proměnnou tímhle způsobem přepsat. Nemusí se rozbít nic kritického, ale třeba někdy bude (např. u výpisu zboží) fungovat stránkování a někdy ne anebo nějak divně a vy nebudete vědět proč.

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: