PHP - jaký algoritmus? Kam dál? pomoc
Ahoj.
Mám takovou dynamickou úlohu. Jde o filtry, které se mají uživateli uložit(zobrazit jeho poslední volby).
Graficky to vypadá takto:
Uživatel zatrhne nějaké položky a já po odeslání formuláře potřebuji, aby se mu zobrazilo, co měl předtím zatrhlé.
Zatím to vypadá na piece of cake .
Ovšem já zpětně znám pouze jména zatržených inputů a jejich hodnoty.
Přičemž NAPROSTO VŠE je dynamické. Tedy od názvů až po hodnoty.
Zdroják vypadá takto:
<input type="checkbox" name="Rozliseni[]" value="1280x1024" />Rozliseni - 1280x1024<br><input type="checkbox" name="Rozliseni[]" value="1680x1050" />Rozliseni - 1680x1050<br>input type="checkbox" name="Rozliseni[]" value="1920x1080" />Rozliseni - 1920x1080
A kód ke kterému jsem se dopracoval takto:
if(isset($_POST[$zakaznik["additional_name"]])){
if (is_array($_POST[$zakaznik["additional_name"]])) {
foreach($_POST[$zakaznik["additional_name"]] as $value){
if ( $value == $zakaznik['min( additional_value )'] ) {
echo '<input type="checkbox" name="'. $zakaznik["additional_name"] .'[]" value="'. $zakaznik['min( additional_value )'] .'" checked />'. $zakaznik["additional_name"].' - '. $zakaznik["val"] .'nahore<br>';
$posledni_filtr_ma_hodnotu = $zakaznik['min( additional_value )'];
}else
{
echo '<input type="checkbox" name="'. $zakaznik["additional_name"] .'[]" value="'. $zakaznik['min( additional_value )'] .'" />'. $zakaznik["additional_name"].' - '. $zakaznik["val"] .'uprostred<br>';
$posledni_filtr_ma_hodnotu = $value;
}
}
} else {
// echo '<input type="checkbox" name="'. $zakaznik["additional_name"] .'[]" value="'. $zakaznik['min( additional_value )'] .'" />'. $zakaznik["additional_name"].' - '. $zakaznik["val"] .'<br>';
}
}else {
echo '<input type="checkbox" name="'. $zakaznik["additional_name"] .'[]" value="'. $zakaznik['min( additional_value )'] .'" />'. $zakaznik["additional_name"].' - '. $zakaznik["val"] .'dole<br>';
//echo '<input type="checkbox" name="'. $zakaznik["additional_name"] .'[]" value="'. $zakaznik['min( additional_value )'] .'" />'. $zakaznik["additional_name"].' - '. $zakaznik["val"] .'<br>';
$posledni_filtr_ma_hodnotu = $zakaznik['min( additional_value )'];
$checked = '';
}
Uvedený kód funguje bezvadně pro jednu zatrženou položku.
Jakmile je jich více dojde k nežádoucí duplikaci.
Například: PRO
Dává výsledek:
Máte nějaký nápad?
Především je nesmysl name="Rozliseni[]" .
Jména musí být unikátní.
Jestli tomu dobře rozumím, potřebuješ odeslat i jména nezatržených položek. Můžeš to udělat tak, že ke každému checkboxu vygeneruješ <input type="hidden" ... , přičemž jméno svážeš nějak se jménem příslušného checkboxu.
Pak dáš do checkboxu onclick , kterým do příslušného hidden inputu zapíšeš hodnotu např. 1 nebo 0 podle zatržení.
Pak POST odešle všechny hidden, které pak přečteš foreach ($_POST ...
Samozřejmě musíš mít nějaký systém ve jménech těch položek, abys je z arraye $_POST rozeznal.
Tak předně děkuji za reakci.
Trochu si to rozeberme, ať se k něčemu dobereme.
Nepotřebuji. Právě na serveru mám seznam všech položek a ty porovnávám.
Jde jen o to, zobrazit ty které zatrhl, jako zatrhlé+zbytek.
Jména ano, ale jen když je to samostatné jméno.
Řetězení položek name="pole[]" je správný zápis.
Řídil jsem se prvním tvrzením.
Asi fakt úloze nerozumím (resp. ji neznám celou), protože pokud platí druhé, pak bych opravdu negeneroval jména dynamicky a jenom bych vše testoval isset ...
Anebo teda dynamicky, ale určitě bych ten výpis checkboxů nedělal foreach ($_POST ..., nýbrž podle citovaného seznamu.