Po odoslaní formuláru sa stiahne súbor

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.

manwe
Člen | 44
+
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. 2019 14:13)

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 :-(

manwe
Člen | 44
+
0
-

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

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');
		}
	}
Milo
Nette Core | 1283
+
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.

David Matějka
Moderator | 6445
+
+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
bodhy
Člen | 4
+
0
-

vďaka za rady. vyskúšam