Neodesílání formulářů v produkci
- karfi
- Člen | 21
Ahoj,
používám Nette 2.4 (bez nejnovějšího updatu), v lokální verzi webu vše
funguje perfektně, jedu na PHP 7.0.14. Pro produkci využívám Wedos, PHP
7.0.8 a objevují se tam 2 problémy, které nedokážu trackovat.
Pro úpravu textu na stránce využívám CKEditor. Při vkládání delší tabulky do textu (kopirovani z google docs) se formulář neodešle, ale zřejmě se nedostane ani do stavu Submitted. Chyba se žádná nevypisuje, v logu nic neni, prostě jen problikne stránka a ta vkládaná tabulka z textu zmizí. Na localhostu to funguje bez problémů. Vůbec netušim, kde může být chyba.
Presenter:
public function createComponentEditPageForm ()
{
$form = new Form ();
$form->addProtection();
$form -> addTextArea ( 'editor', 'Obsah stránky' )
-> setDefaultValue ( $this -> content [ 0 ] [ 'content' ] )
/*-> setAttribute ( 'class', 'ckeditor' )*/;
$form -> addSubmit ( 'submit', 'Potvrdit' );
$form -> onSuccess[] = [$this, 'editPageFormSubmitted'];
return $form;
}
Sablona:
{block content}
{form editPageForm}
<div class="form-group">
<div class="col-sm-12">
<textarea class="form-control" n:name="editor" placeholder="Vše co chcete o osobě sdělit." rows=20>{$form->getValues()['editor']}</textarea>
</div>
<script>
// Replace the <textarea id="editor1"> with a CKEditor
// instance, using default configuration.
CKEDITOR.replace( 'editor',{
} );
</script>
</div>
<ul class="errors" n:if="$form->hasErrors()">
<li n:foreach="$form->errors as $error">{$error}</li>
</ul>
<div class="form-group">
<div class="col-sm-10">
<input type="submit" class="btn btn-success" n:name="submit">
</div>
</div>
{/form}
{/block}
Druhý problém je při uploadu souborů. Na localhostu opět bez problémů, na produkci se formulář uploadu neodešle s chybou „An error occurred during file upload.“, z čehož mi není vůbec jasný, co se mohlo stát. Chová se to stejně, i když dám práva na onen adresář na 777.
public function createComponentUploadFileForm ()
{
$form = new Form();
$form->addProtection();
$form -> addGroup ( 'Nahrát nový soubor' );
$form -> addText ( 'fileName', 'Zobrazovaný název souboru' )
-> addRule ( Form::FILLED, 'Musí být vyplněn název souboru.' );
$form -> addUpload ( 'newFile', 'Nahrát soubor:' )
->setRequired(TRUE);
$form -> addCheckbox( 'resultsFile', 'Toto je výsledkový soubor (po zaškrnutí se bude zobrazovat v kategorii výsledky)');
$form -> addSubmit ( 'upload', 'Nahrát' );
$form -> onSuccess[] = [$this, 'uploadFileFormSubmitted'];
return $form;
}
public function uploadFileFormSubmitted ( Form $form )
{
//if ( $form -> values -> newFile -> isOk () )
//{
if ( $this -> repository -> uploadFile ( $form -> values -> newFile, $form -> values -> fileName, $form -> values -> resultsFile, $this -> getUser () -> getIdentity () -> data [ 'username' ] ) != FALSE )
{
$this -> flashMessage ( "Soubor byl úspěšně nahrán.", "success" );
}
else
{
$this -> flashMessage ( "Soubor se nepodařilo nahrát.", "error" );
}
/*}
else
{
$this -> flashMessage ( "Chybí přiložený soubor.", "success" );
}*/
$this -> redirect ( "Files:default" );
}
Neví někdo, jak aspoň detekovat, co přesně se pokazilo? Tracy mi nic nehlásí, na lokální stanici vše v pohodě, requirements checker splňuje vše.
Editoval karfi (9. 1. 2017 23:30)
- nettak2
- Člen | 19
Dobry vecer,
mam podobny problem, ziadna chyba sa nevypisuje, iba sa preblikne stranka a nekomunikuje s DB a neviem v com by mohol byt problem. Dakujem za vsetky rady!
MODEL:
<?php
namespace App\Model;
use Nette;
/**
* Users management.
*/
class ReservationModel extends Nette\Object {
private $db = null;
public function __construct($db) {
$this->db = $db;
}
public function newReser($values) {
/*try{
$this->db->query("INSERT INTO rezervacia ", $values);
} catch (\PDOException $e) {
if ($e->getCode() != 23000) { ///vyjimka na SQ [23000]
throw $e;
}
}*/
$this->db->query("INSERT INTO rezervacia2 ", $values);
}
}
PRESENTER:
<?php
namespace App\Presenters;
use Nette;
use App\Model;
use Nette\Application\UI;
use Nette\Application\UI\Form as Form;
/**
* Reservation presenter.
*/
class ReservationPresenter extends BasePresenter {
private $model = null;
private $data = null;
private function getModel() {
if ($this->model == null) {
$this->model = new Model\ReservationModel($this->context->getService("database"));
}
return $this->model;
}
/*public function renderDefault() {
$this->template->anyVariable = 'any value';
}*/
protected function createComponentNewReservationForm() {
$form = new UI\Form;
$form->addText("prichod", "Príchod*:")
->setRequired("Datum je povinný údaj!")
->setAttribute("class", "dtpicker")
->setAttribute("placeholder", "dd.mm.rrrr")
->addRule($form::PATTERN, "Datum musí byt vo formáte dd.mm.rrrr");
$form->addText("odchod", "Odchod*:")
->setRequired("Datum je povinný údaj!")
->setAttribute("class", "dtpicker")
->setAttribute("placeholder", "dd.mm.rrrr")
->addRule($form::PATTERN, "Datum musi byt vo formáte dd.mm.rrrr");
$room = array(
'izbaS' => 'Dvojlôžková izba so sprchou',
'izbaBez' => 'Dvojlôžková izba bez sprchy',
'apartman' => 'Apartmán s prísteľkom',
);
$form->addRadioList('typ_izby', 'Vyberte si typ izby:', $room)
->getSeparatorPrototype()->setName(NULL);
$form->addText('email', 'E-mail*:')
->addCondition(Form::FILLED)
->addRule(Form::EMAIL, 'prosím zadejte korektní e-mailovou adresu');
/*$form->addText('tel', 'Telefon:')
->addCondition(Form::FILLED) //pokud je telefon vyplněn
->addRule(Form::PATTERN, 'prosím zadejte korektní telefon', '^[+(]{0,2}[0-9 ().-]{9,}'); // pak musí odpovídat regularnímu výrazu
*/
$form->addText('meno', 'Vaše meno:')
->setRequired("Vaše meno je povinný údaj");
$form->addText('priezvisko', 'Vaše priezvisko:')
->setRequired("Vaše priezvisko je povinný údaj");
$form->addTextArea('odkaz', 'Odkaz pre nás:');
/*$form->addCheckbox('agree', 'Suhlasím s podmienkami')
->setRequired('Je potreba suhlasit s podmienkami');*/
print_r("dahsjdhka");
$form->addSubmit('rezervujsa', 'Rezervufdssdj');
$form->onSuccess[] = array($this, 'newReservationFormSubmitted');
print_r("hohoh");
return $form;
}
public function newReservationFormSubmitted(UI\Form $form, $values) {
print_r("dahsjdhka");
$this->getModel()->newReser($values);
$this->flashMessage('Rezervácia je úspešná.');
$this->redirect('Reservation:vyberIzby');
}
}
SABLONA:
{* Latte template *}
{block content}
<div class="col-sm-offset-4">
<h1 n:block=title>Rezervácia:</h1>
</div>
<form n:name="newReservationForm" class="form-horizontal">
<div class="form-group">
<label class="col-sm-4 control-label">Príchod:</label>
<div class="col-sm-4">
<input type="date" n:name="prichod" class="form-control" placeholder="dd.mm.rrrr">
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">Odchod:</label>
<div class="col-sm-4">
<input type="date" n:name="odchod" class="form-control" placeholder="dd.mm.rrrr">
</div>
</div>
<div class="form-group">
<label n:name="typ_izby" class="col-sm-4 control-label">Vyberte si typ izby:</label>
{foreach $form[typ_izby]->items as $room => $label}
<div class="col-sm-1">
<label n:name="typ_izby:$room">
<div class="col-sm-4">
<input n:name="typ_izby:$room"> {$label}
</div>
</label>
</div>
{/foreach}
</div>
<div class="form-group">
<label class="col-sm-4 control-label">Email:</label>
<div class="col-sm-4">
<input type="email" n:name="email" class="form-control" placeholder="Email">
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">Meno:</label>
<div class="col-sm-4">
<input type="text" n:name="meno" class="form-control" placeholder="Meno">
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">Priezvisko:</label>
<div class="col-sm-4">
<input type="text" n:name="priezvisko" class="form-control" placeholder="Priezvisko">
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">Odkaz pre nás:</label>
<div class="col-sm-4">
<textarea n:name="odkaz" class="form-control" placeholder="Správa"></textarea>
</div>
</div>
<div class="col-sm-offset-4 col-sm-4">
<button type="submit" n:name='rezervujsa' class="btn btn-primary">Rezerfffvovať</button>
</div>
</form>
- GEpic
- Člen | 566
nettak2 napsal(a):
@CZechBoY diky uz som nasiel chybu.. robilo mi to neplechu s
->addRule($form::PATTERN, "Datum musi byt vo formáte dd.mm.rrrr");
type=„date“ mi robil iny format ako som pozadoval.
type=„date“ nepoužívat – používat stále type=„text“ na všechno a hlídat si vstupy – důvod – Firefox ani IE to nepodporují
PS:
->addRule($form::PATTERN, "Datum musi byt vo formáte dd.mm.rrrr");
… ti nemohlo fungovat, protože ti chybí třetí parametr, a to ten Pattern, viz. dokumentace
A doporučení na závěr, pokud už používáte bootstrap, a jde vám o user experience, používejte nějaký datepicker – je pravidlem že lidé neumí formuláře vyplňovat… PRAVIDLEM :) … setup je easy – bootstrap datepicker
Editoval GEpic (17. 1. 2017 3:38)