formulář select odesíla null misto hodnot

1. před 10 měsíci

Domki
Nette guru
Registrovaný: 10. 7. 2012
Příspěvky: 208

formulář select odesíla null misto hodnot

Nevíte někdo čím to je že když mam metodu na vytvoreni formulare

protected function createComponentZboziDetailDoKosikuForm()
    {
        $form = new Form();
        $form->addHidden('idZb', $this->detailZbozi["id"]);
        $form->addSelect('varianta', 'Varianta', $this->nastavVarianty($this->detailZbozi["varianty"]))->setDefaultValue($this->varianta);
$form->addText('pocet', 'Počet', 5, 3)->addRule(Form::INTEGER, 'Počet zboží musí být číslo od 1 do 100.')->addRule(Form::RANGE, 'Počet zboží musí být číslo od %d do %d.', array(1, 100));
........

metoda nastavVarianty nastavi hodnoty kdyz tuto metodu dumpnu vypise to sprvavne:

array(6) {
   34 => "34 cm" (5)
   40 => "40 cm" (5)
   44 => "44 cm" (5)
   48 => "48 cm" (5)
   52 => "52 cm" (5)
   56 => "56 cm" (5)
}

Když ale pak v metode po odeslani formulare zboziDetailDoKosikuFormSubmited(Form $form)..
provedu takto dump
dump($form->values);
die;
Vypíše to

Nette\ArrayHash(3) {
   idZb => "71" (2)
   varianta => NULL
   pocet => "1"
}

Jak to že promena varianta je null když do ni predavam tamto pole, a i v kodu kdyz se podivam tak je select s option tagy normalne vypsany?
Díky

Edit: ted jsem zjistil ze kdyz misto volani metody tam dam pole array(„34“=>„34“, „40“=>„40“…);
Tak to funguje tak asi je problem v tom kdyz to dela metoda ale kde?

public function nastavVarianty($varianty)
    {
        $jednotliveVar=explode(",", $varianty);
        $i=0;
        $poleVar = array();
        while( isset($jednotliveVar[$i]))
        {
            if( is_numeric(substr($jednotliveVar[$i], 0, 1)) )// kdyz je prvni znak cislo ( 15, 35, 16.5)
            {
              if($jednotliveVar[$i] < 32)  //na palce
                $znak="\"";
              else                //na cm
                $znak=" cm";
            }
            else                  //nic - pismena
              $znak="";

            $poleVar[$jednotliveVar[$i]] = $jednotliveVar[$i].$znak;
            $i++;
        }
        return $poleVar;
    }

Editoval Domki (31. 7. 2012 10:41)

 

2. před 10 měsíci

Domki
Nette guru
Registrovaný: 10. 7. 2012
Příspěvky: 208

Re: formulář select odesíla null misto hodnot

Co opravdu nikdo nevíte proč to vrací NULL, když ostatní položky z formuláře se odesílají normálně, a kdyz sem vložim sam pole tak se to odešle taky dobře. Přitom když tam davam položky z dtb tak to do formuláře vkláda stejny položky ale už to odesíla null
? Díky za každou radu

 

3. před 10 měsíci

tatyalien
Člen
Registrovaný: 20. 8. 2010
Příspěvky: 199

Re: formulář select odesíla null misto hodnot

Nejspíš data do selectboxu dodáváš pozdě. Proto to hodí null, protože data přijdou až po odeslání.


Předem se omlouvám za chyby v češtině, jsem dislektik a disgrafik v jednom.
A ohledně programování: lama samouk, učení pouze z knih a webu.

 

4. před 10 měsíci

ViPEr*CZ*
Nette guru
Registrovaný: 4. 10. 2010
Příspěvky: 604

Re: formulář select odesíla null misto hodnot

Tak to do té metody asi nevleze… nebo isset($jednotliveVar[$i]) po odeslání formuláře neplatí… těžko říct.

 

5. před 10 měsíci

Domki
Nette guru
Registrovaný: 10. 7. 2012
Příspěvky: 208

Re: formulář select odesíla null misto hodnot

Jako ze je tam dam pozde?
Dyt v dokumentaci je ze do selectu se data jako vyber dava jako pole jako třetí parametr.
A ten selectbox se i dobre vypíse, ale kdyz ho vyberu a odeslu tak dostanu null.

 

6. před 10 měsíci

tatyalien
Člen
Registrovaný: 20. 8. 2010
Příspěvky: 199

Re: formulář select odesíla null misto hodnot

No jestli dáváš data v render metodě, action, handlu… někde se ti vytvoří componenta, ale data v ní ještě nemusejí být.


Předem se omlouvám za chyby v češtině, jsem dislektik a disgrafik v jednom.
A ohledně programování: lama samouk, učení pouze z knih a webu.

 

7. před 10 měsíci

ViPEr*CZ*
Nette guru
Registrovaný: 4. 10. 2010
Příspěvky: 604

Re: formulář select odesíla null misto hodnot

Funguje to tak, že pokud je v selectu něco vidět… a submitne (odešle) se formulář, pak to ještě neznamená, že nette Vám ve $form->values něco vrátí… pozor na to… $form->values se nerovná klasickému získání dat z POST. Protože když si před $form->values ještě dumpnete hodnotu $_POST, pak se vsadím, že tam data budou. Takže ještě než se to celé dostane do metody pro zpracování odeslání formuláře, tak musí existovat onen odeslaný selectbox a musí být naplněn daty, která očekávate ze submitu.

 

8. před 10 měsíci

Domki
Nette guru
Registrovaný: 10. 7. 2012
Příspěvky: 208

Re: formulář select odesíla null misto hodnot

tak ted sem to orezal a zustal tam jen form a hlidac na odeslani
asi takto:

<?php
use Nette\Application\UI\Form;
use Nette\Database\Connection;
use Nette\Image;

/**
 * Presenter na výpis detailu zboží
 *
 * @author     Petr Domkař
 *
 *
 */
class DetailZboziPresenter extends BasePresenter
{

    protected function createComponentZboziDetailDoKosikuForm()
    {
        $id = 74;
        dump($id);
        $varianty = $this->context->createZbozi()->where('id', $id)->fetch();


        $jednotliveVar = explode(",", $varianty["varianty"]);


        $form = new Form();

        $form->addSelect('varianta', 'Varianta', $jednotliveVar);
        $form->addText('pocet', 'Počet');
        $form->addSubmit('doKosiku', 'Do košíku');
        $form->onSuccess[] = callback($this, 'zboziDetailDoKosikuFormSubmited');
        return $form;
    }

    public function zboziDetailDoKosikuFormSubmited(Form $form)
    {

            dump($form->values);

    }


}

Takto to funguje ale kdyz získaní id delam pomoci metody $id = $this->getParameter(‚id‘);
Tak uz to tam haze null

Jak tedy mám získat parametr z url?

Jinak odkaz na toto url je:
<a n:href=„DetailZbozi:detailzbozi id ⇒ $polozkaZb->id“>{$polozkaZb->nazev}</a>
a to url pak vypada takto:
http://localhost/…tailzbozi/74

Editoval Domki (31. 7. 2012 21:56)

 

9. před 10 měsíci

Domki
Nette guru
Registrovaný: 10. 7. 2012
Příspěvky: 208

Re: formulář select odesíla null misto hodnot

Aha a jak to mám udelat aby to slo
Zde tento kod na tímto
kdyz dam misto $id = 74;
daám toto: $id = $this->getParameter(‚id‘);
Tak to nejde

 

10. před 10 měsíci

Domki
Nette guru
Registrovaný: 10. 7. 2012
Příspěvky: 208

Re: formulář select odesíla null misto hodnot

viper a jinak ano mas pravdu kdyz dumpu POST tak to vypise dobre
i stímto radkem

Co tedy mam udelat aby to bylo v tom $form->values

 

11. před 10 měsíci

Domki
Nette guru
Registrovaný: 10. 7. 2012
Příspěvky: 208

Re: formulář select odesíla null misto hodnot

No Tak uz to de
Stacilo ten parametr priradit do promeny a tu oznacit jako /** @persistent */ – tim se sama prenasi na dalsi stranku pri odeslani formulare?

A jestli teda dobre chapu to co psal viper
Tak on se odesle formular ale aby se hodnoty zobrazily v $form->values tak musí byt dostupny i to id pomoci ktery se udela dotaz a vypisou se formulare, i kdyz stejne po odeslani formulare na konci metody presmeruju jinam?

 

12. před 10 měsíci

ViPEr*CZ*
Nette guru
Registrovaný: 4. 10. 2010
Příspěvky: 604

Re: formulář select odesíla null misto hodnot

Ahoj… ano… pokud plníte hodnoty do formuláře z databáze, pak se vytáhnou… naplní se formulář… porovnají se hodnoty a vyplní se výstupní pole (zjednodušeně řečeno). Pak si uděláte nějakou vlastní akci v metodě zpracování formuláře.
O persistentních parametrech se píše v dokumentaci. Samozřejmě pokud jste plnil data na základě výběru podle nějakého ID z databáze, pak toto ID se již nepřeneslo z URL při odeslání formuláře a tudíž se do formuláře nic nevyplnilo.

 

Zápatí