Odeslání ručně vykresleného formuláře

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Payne
Člen | 14
+
0
-

Dobrý den,
již jsem sem tento dotaz psal ale nikdo mi neodpověděl tak, aby se to dalo použít.
Manuálně jsem vykreslil formulář. Bohužel mi zde nefunguje odesílání, resp. při použití onClick[] nebo onSuccess[] (téměř stejné) mi to kód odešle již při načtení formuláře. Při využití $form->onSuccess() v podmínce se kód vůbec neprovede.
Kód celé třídy zde:

class Confirm {
		private $year;
		function __construct($rok) {
			$this->year = $rok;
		}
		public function show() {
			$form = new NForm();
			if($form->isSuccess()) {
				echo "ago";
			}
			for($i=0; $i < $this->pocetZaznamu(); $i++) {
				$sub[$i] = $form->addContainer($i);
				$sub[$i]->addRadioList('schvaleno', '', array(1 => 'Ano', 0 => 'Ne'))
				->addRule(NForm::FILLED, 'Je potřeba formulář vyplňit', TRUE)
				->setDefaultValue(1)
				->getSeparatorPrototype()
				->setName(NULL);
			}
			$form->addSubmit('submit', 'Odeslat');
			//->onClick($this->sql());
			$prom = dibi::query('SELECT p.Id, p.Jmeno, z.Zadanii FROM Prace p JOIN Zadani z ON p.Zadani_Id = z.Id WHERE Rok =', $this->year, 'ORDER BY Jmeno');
			$txt = "<table border='1'>";
			$pole = array();
			foreach ($prom as $n => $row) {
				$txt .= "<tr><td>".$row['Jmeno']."</td><td>".$row['Zadanii']."</td><td>".$form[$n]['schvaleno']->getControl()."</td></tr>";
				$pole[] = $row['Id'];
			}
			$txt .= "</table>".$form['submit']->getControl();
			return $txt;
		}
		private function pocetZaznamu() {
			$req = dibi::query('SELECT Count(*) AS Pocet FROM Prace WHERE ', array('Rok' => $this->year));
			$pocet = $req->fetchAll();
			return $pocet[0]['Pocet'];
		}
		public function sql() {
			//dibi::query('INSERT INTO ObecneZadani Id = 100000, Rok = 2020, Obor = aaa, Zadani = bbb');
			if($_POST['success'] = true)
				echo "aaaa";
		}
	}

Nějaké nápady, alespoň příčina? Co používáte Vy?
Děkuji za odpověď

Ot@s
Backer | 476
+
0
-

Prubni $form->isSuccess() použít až za $form->addSubmit.

Editoval Ot@s (14. 3. 2012 10:30)

Payne
Člen | 14
+
0
-

No vzykoušel jsem, ale neúspěšně.
Zajímavé je, že se stránka vůbec neobnoví. Možná v tom je jádro pudla.

Milo
Nette Core | 1283
+
0
-

Pochopil jsem správně, že formuláře používáš mimo Nette MVC? Verze Nette 2.0?

// Nastav callback, který se při úspěšném odeslání zavolá
class Confirm
{
	public function show()
	{
		$form = new NForm;
		$form->addText(........);
		$form->onSuccess[] = array($this, 'formSubmitted');
	}

	public function formSubmitted(NForm $form)
	{
		echo "Fourmulář odeslaný";
	}
}
Ot@s
Backer | 476
+
0
-

Payne napsal(a):

Zajímavé je, že se stránka vůbec neobnoví. Možná v tom je jádro pudla.

Zkontroluj si HTML formuláře, jestli je vyplněný action (měl by být vyplněný na aktuální URL + přidaný parametr se signálem). Každopádně takové starosti, co máš, jsem nikdy neřešil. Bude to nějaká banalita…

David Růžička
Člen | 43
+
0
-

Setkal jsem se u formulářů s problémem při validaci. U složitějších validačních podmínek to při kontrole na straně klienta zabránilo odeslání formuláře, ale nezobrazila se chybová hláška, což by odpovídalo tomu, co popisuješ, i když tam žádné složité podmínky nemáš. Zkus vypnout validaci na straně klienta , jestli to něčemu pomůže.

Payne
Člen | 14
+
0
-

Milo napsal(a):

Pochopil jsem správně, že formuláře používáš mimo Nette MVC? Verze Nette 2.0?

// Nastav callback, který se při úspěšném odeslání zavolá
class Confirm
{
	public function show()
	{
		$form = new NForm;
		$form->addText(........);
		$form->onSuccess[] = array($this, 'formSubmitted');
	}

	public function formSubmitted(NForm $form)
	{
		echo "Fourmulář odeslaný";
	}
}

Vyzkoušel jsem již před tím. Bohužel bez výsledku

Payne
Člen | 14
+
0
-

Ot@s napsal(a):

Payne napsal(a):

Zajímavé je, že se stránka vůbec neobnoví. Možná v tom je jádro pudla.

Zkontroluj si HTML formuláře, jestli je vyplněný action (měl by být vyplněný na aktuální URL + přidaný parametr se signálem). Každopádně takové starosti, co máš, jsem nikdy neřešil. Bude to nějaká banalita…

Vypadá to tak, že jsi mě zachránil! opravdu form mi tam chyběl. Nyní to refreshuje a to je krok vpřed. Ještě ten kód dodělám, zkusím a napíšu závěr ale opravdu dobrý nápad a myslím si že zabere. Ještě jednou děkuji.

Payne
Člen | 14
+
0
-

Tak tedy vše funguje jak má. Jediné, co bylo třeba bylo, abych na začátek html kódu formuláře dopsal <form action='' method=‚post‘ id=‚frm-‘> a na konci uzavřel (to jsem zkopíroval z jiného formuláře).
Ještě jednou děkuji Vám všem, kteří se na řešení problému podíleli, a především uživateli Ot@s, který mě navedl správnou cestou.
Třeba někdy pomohu já Vám :)
S pozdravem
Payne