Form::isSubmitted() zhavaruje nezávisle na REQUEST_METHOD

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
neo.taa
Člen | 14
+
0
-

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;

jasir
Člen | 746
+
0
-

Mě ten kód beze změny funguje správně, zvláštní…

neo.taa
Člen | 14
+
0
-

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
+
0
-

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.

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
+
0
-

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.