Ahojte potrebujem poradiť

Richard17
Člen | 16
+
0
-

Ahojte potrebujem poradiť, neviem preniesť dáta konkrétne zo šablóny
<td><input hidden="" value=„{$m->id}“ n:name=text>{$var = $m->id}</td>

<form n:name="buymatchForm" role="form" class="form-horizontal">
                <table class="table table-striped table-hover table-bordered">

	{foreach $match as $m}

           <tr>
               <td><input value="{$m->id}" hidden="" n:name=text>{$m->id}</td>  <!-- tuto hodnotu chcem vložiť do databázy -->
		<td>{$m->name_sports}</td>
               <td class="date">{$m->date_match|date:'F j, Y'}</td>
		<td >{$m->a_team}</td>
               <td>{$m->b_team}</td>
               <td>{$m->betnumber}</td>
               <td>{$m->a_team}</td>
               <td><input id="{$m->id}" n:name=send type="submit" value="Kupiť Zápas" /></td>
           <!--    <button name="send"  type="button" class="btn btn-info">Kupiť</button> -->
	</tr>
       {/foreach}

                                   </table>
        </form>
protected function createComponentBuymatchForm(): Form
	{
                $matches = $this->database->table('bettable');

                $form = new Form;
                $form->addText('text');  /* tu chcem uložiť danú hodnotu */
                $form->addSubmit('send');
		$form->onSuccess[] = [$this, 'buymatchFormSucceeded'];
		return $form;

	}

Editoval Richard17 (26. 5. 2021 14:18)

Polki
Člen | 553
+
0
-

Od zpracování formulářů slouží ta metoda buymatchFormSucceeded.

Ukládej to do databáze v ní.

Editoval Polki (26. 5. 2021 23:57)

Richard17
Člen | 16
+
0
-

Polki napsal(a):

Od zpracování formulářů slouží ta metoda buymatchFormSucceeded.

Ukládej to do databáze v ní.

Ano, lenže vždycky mi predá prázdny reťazec. Nakoľko tu hodnotu nezadáva užívateľ, ale vkladám si ju cez foreach..

<td><input name="sel[]" value="{$m->id}">{$m->id}</td>

ani cez value neviem predať hodnotu..

Richard17
Člen | 16
+
0
-

Polki napsal(a):

Od zpracování formulářů slouží ta metoda buymatchFormSucceeded.

Ukládej to do databáze v ní.

už som vyriešil

{foreach $match as $m}
<form n:name="buymatchForm" role="form" class="form-horizontal">

foreach som mal pod form :-D

Kamil Valenta
Člen | 762
+
0
-

Pro form v cyklu použij Multiplier.

Polki
Člen | 553
+
0
-

Kamil Valenta napsal(a):

Pro form v cyklu použij Multiplier.

Pravda, ale pokud chce jen jeden form, který bude mít mnoho stejných inputů, tak mu multiplier nepomůže.

<td><input name="sel[]" value="{$m->id}">{$m->id}</td>

Tohle neumí ve výchozím stavu Nette zpracovat normálně, čili nehodí ti to do values. Musíš zavolat:

$values = $form->getHttpData($form::DATA_TEXT, 'sel[]');

viz dokumentace

Navíc, jestli je to hidden prvek, který nepoužíváš, tak nemá moc smysl si ho předávat na klienta a z něj zase posílat zpět. Když jsi dokázal ten prvek vygenerovat, aby jsi vykreslil formulář, tak jsi schopen ho vygenerovat i při odeslání formuláře a nemusíš si ho posílat v hidden inputu, jelikož na serveru ho už znáš.

Toto se hodí maximálně na nějaké spam ochrany, kde když ti hodnota v hidden inputu přijde změněná, tak víš, že do toho někdo vrtal. Pro klasické předávání proměnných to moc význam nemá, jelikož stejně si nemůžeš být jistý, jestli někdo na tu hodnotu nezměnil a tedy v onsuccess musíš checkovat, jestli to, co tam přišlo se rovná tomu, co jsi poslal. A když umíš kontrolovat toto, tak ty hodnoty dávno už máš a je zbytečné je posílat.