Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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:

[http://pc.poradna.net/file/view/14938-rozliseni-pn g]

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

[http://pc.poradna.net/file/view/14939-roz2-png]

Dává výsledek:

[http://pc.poradna.net/file/view/14940-roz3-png]

Máte nějaký nápad?

Předmět Autor Datum
Především je nesmysl name="Rozliseni[]" . Jména musí být unikátní. Jestli tomu dobře rozumím, potře…
hynajs 29.07.2013 13:50
hynajs
Tak předně děkuji za reakci. :-) Trochu si to rozeberme, ať se k něčemu dobereme. Jestli tomu dobře…
Flash_Gordon 29.07.2013 14:02
Flash_Gordon
Ovšem já zpětně znám pouze jména zatržených inputů a jejich hodnoty. Právě na serveru mám seznam… poslední
hynajs 29.07.2013 14:43
hynajs

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.

Jestli tomu dobře rozumím, potřebuješ odeslat i jména nezatržených položek

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 musí být unikátní.

Jména ano, ale jen když je to samostatné jméno.
Řetězení položek name="pole[]" je správný zápis.

Ovšem já zpětně znám pouze jména zatržených inputů a jejich hodnoty.

Právě na serveru mám seznam všech položek a ty porovnávám.

Ří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.

Zpět do poradny Odpovědět na původní otázku Nahoru