Autor | Zpráva | ||
---|---|---|---|
Monkeys Profil * |
#1 · Zasláno: 24. 1. 2013, 19:29:41
Da sa tento kod zapisat jednoduchsie ?
V tom kode ide o to ze ak sa vyskytne chyba a su oznacene neake checkboxy tak aby ostali oznacene. public function form(){ $check = array(); $content=""; if(isset($_POST['parameter'])){ // parameter su checkboxy foreach($_POST['parameter'] as $val){ $check[] = $val; } } $i=1; $data = $this->modelInstance()->volitelnePolia(); $limit = $data->num_rows; // kolko inputov existuje while($row = $data->fetch_assoc()){ if($i%$limit==1){ $content .= '<ul>'; }elseif($i%4==1){ $content .= "</ul><ul>"; } if(in_array($row['pole'], $check)){ $content .= '<li><input name="parameter[]" type="checkbox" value="'.$row['pole'].'" checked="checked" id="vol'.$i.'"/><label for="vol'.$i.'"><p>'.$row['pole'].'</p></label></li>'; }else{ $content .= '<li><input name="parameter[]" type="checkbox" value="'.$row['pole'].'" id="vol'.$i.'"/><label for="vol'.$i.'"><p>'.$row['pole'].'</p></label></li>'; } $i++; } $content .= '</ul>'; return $content; } M. |
||
tiso Profil |
#2 · Zasláno: 24. 1. 2013, 20:04:10
V skratke: dá.
|
||
Monkeys Profil * |
#3 · Zasláno: 24. 1. 2013, 21:57:38
tiso:
naprikald |
||
peta Profil |
Napriklad je veta oznamovaci, na tu nemusi nikdo reagovat.
Da?, je otazka, na kterou se odpovida Ano/Ne. Chtelo by to zvazit spravnou otazku :) $content .= '<li><input name="parameter[]" type="checkbox" value="'.$row['pole'].'" id="vol'.$i.'"/><label for="vol'.$i.'"><p>'.$row['pole'].'</p></label></li>'; $str = '<li><input name="parameter[]" type="checkbox" value="%1$s" id="vol%2$s"%3$s/><label for="vol%2$s"><p>%1$s</p></label></li>'; $ch = ' checked="checked"'; ... $content .= sprintf($str,$row['pole'], $i, in_array($row['pole'], $check) ? $ch : ''); |
||
Tori Profil |
#5 · Zasláno: 25. 1. 2013, 12:20:40
Co do čitelnosti kódu by to šlo zlepšit určitě. Některé věci děláte zbytečně:
1) pokud nijak neošetřujete/nekontrolujete vstupní data, tak rovnou můžete řádky 2 + 4-8 zapsat takto: $check = isset($_POST['parameter']) && is_array($_POST['parameter']) ? $_POST['parameter'] : array(); if (isset($_POST['parameter']) && is_array($_POST['parameter'])) { foreach($_POST['parameter'] as $val){ $check[(string) $val] = true; } } $content .= '<li><input name="parameter[]" type="checkbox" value="'.$row['pole'].'" id="vol'.$i.'"' .(isset($check[$row['pole']]) ? ' checked="checked"' : '') .'/><label for="vol'.$i.'"><p>'.$row['pole'].'</p></label></li>'; 2) podmínka na řádku 13 je totéž jako if ($i == 1) a kromě toho řádek 14 můžete dát ještě před cyklus. Např.:
$i = 1; $data = $this->modelInstance()->volitelnePolia(); $limit = $data->num_rows; // kolko inputov existuje $content .= '<ul>'; while($row = $data->fetch_assoc()) { if ($i % 4 == 1 && $i != 1) $content .= "</ul><ul>"; $content .= '<li><input .... atd. '; } A data z $_POST by bylo asi čistější předávat metodě jako parametr. |
||
Monkeys Profil * |
#6 · Zasláno: 25. 1. 2013, 18:35:10
Tori:
dakujem za ukazku skusim sa stym pohrat ale mam vyhrady voci tomu dynamickemu zoznamu. zacinat zoznam este pred cyklom som skusal aj ja ale vysledok bol vzdy zvlastny a to v takom zmysle ze pri spusteni mi to vypisalo <ul></ul><ul><li> ... preto som to dal do podmienky. ale mozno som spravil v niecom chybu Vidim ze musim castejsie pouzivat terarne operatory :) M. |
||
Tori Profil |
#7 · Zasláno: 25. 1. 2013, 18:47:34
Monkeys:
„vygenerovalo mi to prazdny zoznam“ A nechyběla vám ta druhá polovina podmínky? Ta by tomuhle právě měla zabránit: if ($i % 4 == 1 && $i != 1) echo '</ul><ul>';
Ternární operátor jsem tam dala jen proto, že mi přišlo zbytečné psát ty tři řádky dvakrát, když se liší jedním atributem. |
||
Monkeys Profil * |
#8 · Zasláno: 25. 1. 2013, 23:24:27
Tori:
ano máte pravdu chýbala M. |
||
Časová prodleva: 11 let
|
0