Odeslání formuláře s propojenými selectboxy

- kashpi
 - Člen | 48
 
Zdravím, narazil jsem na problém. Konečně se mi podařilo rozchodit
propojení selectboxů, ale hned potom přišel zádrhel, když jsem potřeboval
data uložit do databáze.
Vstupní formulář:
<?php
public function createComponentEditCalcForm($name) {
  ...
  $form = new AppForm($this, $name);
  ...
  $form->addSelect('energie_typ_id', 'Typ odběru', $typOdb)->setDefaultValue($row->energie_typ_id)->skipFirst('Vyberte typ odběru');
  $form->addSelect('sazba_id', 'Sazba za distribuci', $sazba)->setDefaultValue($row->sazba_id)->skipFirst('Vyberte sazbu');
  $form->addSubmit('send', 'Uložit');
  $form->onSubmit[] = callback($this, 'editCalcFormSubmitted');
  return $form;
}
?>
Při výběru prvního selectboxu se z databáze natáhnou data podle toho co se vybere, to funguje jak má.
V šabloně je:
<script>
$(function() {
  $('#frmeditCalcForm-energie_typ_id').change(function () {
    loadData($(this).val());
  });
  function loadData(value) {
    jQuery.get({link loadSazby!}, {"value": value}, function(data) {
      jQuery('#frmeditCalcForm-sazba_id').replaceWith(data);
    }, "html");
  }
});
</script>
A nakonec asi kámen úrazu je tato funkce která se stará o načítání závislého selectboxu
<?php
public function handleLoadSazby() {
  $form = $this->getComponent('editCalcForm');
  $sazba_id = $this->getParam('value');
  $data = \dibi::query("SELECT id, name FROM [energie_sazba] WHERE typ_id=%i", $sazba_id)->fetchPairs("id", "name");
  $form['sazba_id']->setItems($data)->skipFirst('Vyberte sazbu');
  echo $form['sazba_id']->getControl();
  $this->terminate();
}
?>
V šabloně se data naplní jak mají, hodnoty selectboxu mají např
data
<option value=„10“>C01d</option>
ale problém je asi v <?php $form[‚sazba_id‘] ?> protože při
odeslíná formuláře vrací prázdnou hodnotu. Pokud se nenačte pomocí
JavaScriptu tak se vše uloží jak má, ale pokud se změní první selectbox,
tak i když vyberu hodnotu „10“, tak do databáze posílá
[sazba_id] = >
Nevítete někdo prosím proč to dělá? Předem děkuji za
jakoukoli radu.

- Honza Kuchař
 - Člen | 1662
 
O to prave jde. ;) Je to bezpecnostni osetreni vstupu, ktere dependent selecbox jiste resi.