Form::isSubmitted() zhavaruje nezávisle na REQUEST_METHOD
- neo.taa
- Člen | 14
Zdravím. Už nějakou dobu to řeším.
Nefunguje mi triviální věc : příjmout data z odeslaného formuláře.
Formulář se vykreslí, validace funguje. Po odeslání formuláře ale :
- zhavaruje běh php při volání Form::isSubmitted()
- nenahlásí to přitom žádnou chybu ( ani Laděnka, ani error_reporting (E_ALL); )
- přitom proměnná formuláře (např. $_REQUEST[‚name‘]) obsahuje zadané data z formuláře
Používám PHP 5.2.5, Nette 0.8 rev. 297. Příklad kódu, který jsem zkoušel z http://zdrojak.root.cz/…roduktivitu/ :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<body>
<?php
ini_set('display_errors', TRUE );
error_reporting (E_ALL);
require "Nette/loader.php" ;
Debug::enable();
$form = new Form ;
$form->addText('name', 'Jméno:')
->addRule(Form::FILLED, 'Zadejte prosím své jméno');
$form->addSubmit('send', 'Odeslat');
echo "<br/>Req.name: ". $_REQUEST['name'] ;
if ($form->isSubmitted()) {
//echo "něco " ;
// a jestliže jsou všechny položky vyplněny správně
if ($form->isValid()) {
echo '<h1>Formulář byl odeslán</h1>';
$values = $form->getValues();
Debug::dump($values);
exit;
}
else
echo "No formulář nebyl celý v pořádku." ;
}
else {
echo "<br/>Nový formulář" ;
// a jestliže nebyl odeslán, nastavíme výchozí hodnoty
$form->setDefaults(array( 'promo' => true, "name" => "zadej jméno" ));
// každý si přeje, abychom mu zaplevelili e-mailovou schránku
}
echo $form;
- neo.taa
- Člen | 14
jasir napsal(a):
Mě ten kód beze změny funguje správně, zvláštní…
No tak to asi bude něco ve spojitosti s nastavením mého lokálního Apach-e, protože jsem to testnul na free webu a tam mi to taky jede.
Takže zůstává otázka jak to, že formulář po odeslání obsahuje data
v poli $_REQUEST
, ale volání fce
$form->isSubmitted()
zhavaruje? Co v Apache nastavit, aby to
nezhavarovalo a co tu havárii způsobuje?
Stejně ten příklad nevypíše ani na free webu žádné načtené hodnoty
z formuláře (fce Debug::dump($values);
– nic nevypíše).
Přitom data v proměnné $values příkaz print_r ( $values ) ;
vypíše.
Na free webu mi, ale aspoň proběhne po odeslání formuláře dobře ta
funkce $form->isSubmitted()
a fce
$form->isValid()
.
- neo.taa
- Člen | 14
Stejně ten příklad nevypíše ani na free webu žádné načtené hodnoty z formuláře (fce
Debug::dump($values);
– nic nevypíše).
Přitom data v proměnné $values příkazprint_r ( $values ) ;
vypíše.
No tak to už funguje, pochopil jsem z kódu, že stačí zadat :
Debug::enable(Debug::DEVELOPMENT);
a už
Debug::dump($values)
píše obsah proměnných.
Editoval neo.taa (4. 5. 2009 13:47)
- PetrP
- Člen | 587
neo.taa napsal(a):
- přitom proměnná formuláře (např. $_REQUEST[‚name‘]) obsahuje zadané data z formuláře
$_REQUEST nepoužívat, to už mužem skoro rovnou zapnout register_globals ;] viz Jakubův článek
neo.taa napsal(a):
No tak to už funguje, pochopil jsem z kódu, že stačí zadat :
Debug::enable(Debug::DEVELOPMENT);
a užDebug::dump($values)
píše obsah proměnných.
Debug::enable(Debug::DEVELOPMENT);
by se na produkční server
dát nemělo, raději použít autodetekce a něco podobného.
if ($_SERVER['REMOTE_ADDR']=='1.2.3.4') // ip adresa kde potrebuju debugovat
{
Environment::setMode('production',false);
}
Popřípadě jinak dle aktuální potřeby.