Odeslání ručně vykresleného formuláře
- Payne
- Člen | 14
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ěď
- Milo
- Nette Core | 1283
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
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
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
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
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
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