Autor Zpráva
Monkeys
Profil *
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
V skratke: dá.
Monkeys
Profil *
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
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();
Ale když řádky 4-8 změníte takto:
if (isset($_POST['parameter']) && is_array($_POST['parameter'])) {
    foreach($_POST['parameter'] as $val){
        $check[(string) $val] = true;
    }
}
, tak pak můžete řádky 18-22 nahradit tímto:

$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>';
Výhoda je v tom, že in_array musí v každé iteraci projít celé pole $check, kdežto isset ne.

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 *
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> ...
vygenerovalo mi to prazdny zoznam co bola chyba lebo ostatne zoznamy, ktore mi odskocili na zaklade stylov v CSS.
preto som to dal do podmienky.

ale mozno som spravil v niecom chybu
Vidim ze musim castejsie pouzivat terarne operatory :)


M.
Tori
Profil
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 *
Tori:
ano máte pravdu chýbala

M.

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:

0