Po odoslaní formuláru sa stiahne súbor

před měsícem

bodhy
Člen | 4
+
0
-

Zdarvím.

Mám nasledovný problém s formulárom – užívateľ vyplní formulár a keď ho dá odoslať, priehliadač Google Chrome namiesto odoslania začne sťahovať súbor. Čiastočne pomáha vypnutie cachovania v prihliadači, ale nie vždy. Niektoré formuláre som vyriešil ukončením funkcie niecoFormSucceeded() php funkciou die(), čo ale nie je podľa mňa východisko. Na servery mám PHP7.0 a používam verziu Nette 2.4.

Problém so sťahovaním môže ešte spôsobovať použitý redirect na Presenter:default.

Ďakujem za rady.

před měsícem

manwe
Člen | 38
+
0
-

Jaky soubor zacne stahovat? To je uplne divne, musis tam mit nejaky problem v tom zpracovani, atd.

Jak to zpracovavas? Posli kod nebo neco, takhle ti asi sotva nekdo poradi.

Editoval raddy668 (12. 2. 14:13)

před měsícem

bodhy
Člen | 4
+
0
-

Vždy, keď to sťahuje, tak je to prázdny súbor a názvom z url za posledným lomítkom.

Uznávam, že niekde nejaký problém je, ale netuším kde. Mne na mojom PC to ani raz neurobilo, ale problém to robí iba u niektorých ľudí. A aj to nepravideľne :-(

před měsícem

manwe
Člen | 38
+
0
-

Ja fakt nevim jak ti nekdo muze pomoct kdyz tu nedas ani kousek kodu…

před měsícem

bodhy
Člen | 4
+
0
-

action:

public function actionHelpTexts() {
    $this->template->items = $this->database->table('doc_texts')->select('*')->where('id_user = ?', $this->id_user)->order('caption');
    $this->template->helpTextsForm = $this->createComponentHelpTextsForm();
}

componentForm:

protected function createComponentHelpTextsForm() {
    $form = new UI\Form($this, 'htextsForm');

    $renderer = $form->getRenderer();
    $renderer->wrappers['controls']['container'] = NULL;
    $renderer->wrappers['pair']['container'] = 'div';
    $renderer->wrappers['label']['container'] = NULL;
    $renderer->wrappers['control']['container'] = NULL;
    $form->getElementPrototype()->action = $this->link($this->template->p.':'.$this->template->m, array('lang' => $this->lng)).'?do=htextsForm-submit';
    $form->getElementPrototype()->class = 'dialogForm';

    $this->template->frm_return = '';

    $form->addHidden('id_text');
    $form->addText('caption', $this->translator->translate('Názov/popis textu'))
        ->setAttribute('class', 'mdl-textfield__input');
    $form->addTextArea('content', $this->translator->translate('Text'))
        ->setAttribute('rows', '10')
        ->setAttribute('cols', '50')
        ->setAttribute('data-height', '275')
        ->setAttribute('class', 'mdl-textfield__input html-editor');

    $form->addSubmit('submit', $this->translator->translate('Uložiť'));
    $form->onSuccess[] = [$this, 'HelpTextsFormSucceeded'];

    return $form;
}

Success:

public function HelpTextsFormSucceeded($form) {
    $values = $form->getValues();
    $values['id_user'] = $this->id_user;

    try {
        if ((int)$values['id_text'] <= 0) {
            $ret = $this->database->table('doc_texts')->insert($values);
        } else {
            $ret = $this->database->table('doc_texts')->where('id_text = ? AND id_user = ?', $values['id_text'], $values['id_user'])->update($values);
        }
        if ($ret !== false) {
            $this->flashMessage($this->translator->translate('Záznam bol úspešne uložený.'), 'success');
        } else {
            $this->flashMessage($this->translator->translate('Počas ukladania záznamu vznikol problem.'), 'danger');
        }
        $this->redirect('Setup:helpTexts', array('lang' => $this->template->lng));
    } catch (\Exception $e) {
        if ( $e->getMessage() != '' ) $this->flashMessage($this->translator->translate('Počas ukladania záznamu vznikol problem. (' . $e->getMessage() . ')'), 'danger');
    }
}

před měsícem

Milo
Nette Core | 1127
+
0
-

Nevím, jestli to pomůže, ale neodchytávej tam obecnou \Exception, ale nějakou konkrétní. Redirect totiž v důsledku vyhazuje výjimku.

před měsícem

David Matějka
Moderator | 5811
+
+3
-

a to chytani vyjimky je velmi nestastne. nekolik tipu:

  • nezobrazuj uzivateli text vyjimky. ten je urceny pro programatora. v lepsim pripade tomu uzivatel nebude rozumet, v horsim pripade tam uniknou treba nejake citlive udaje
  • kdyz uz chybu chytas, tak ji nezapomen zalogovat – treba pomoci Tracy\Debugger::log($e). jak to mas ted ty, tak sice uzivatel bude mit „hezkou“ hlasku, ale jako programator se nic o chybe nedozvis
  • jak uz zminil Milo, nechytej obecnou exception, ale tu, kterou ocekavas, ze muze nastat
  • a nejdulezitejsi rada: proste se na to chytani chyb vykasli. stejne neodchytis vsechny mista, kde k tomu muze dojit. a kdyz se na to vykasles, nette chybu zachyti, zaloguje a ty zobrazis obecnou 500 stranku

před měsícem

bodhy
Člen | 4
+
0
-

vďaka za rady. vyskúšam