Kontaktni formular – chyba „Email address is not valid“

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

Ahoj,

neovladam php (az na par drobnosti), ovsem rad bych nette na nejake veci vyuzil (tvorba statickych webu).

Pri tvorbe velmi jednoducheho kontaktniho formulare jsem se ovsem zasekl a nenasel jsem odpoved na internetu. Budu tedy rad za kazdou radu a posunuti vpred.

PHP Version 5.3.5–1ubuntu7.2

NetteFramework-2.0beta-PHP5.3

Mnou stvoreny kod je tento:

use Nette\Forms\Form;

use Nette\Mail\Message;

$form = new Form;

$form->addText('name', 'Jméno a příjmení:');
$form->addText('email', 'Email:')
	->setEmptyValue('@')
    ->addRule(Form::FILLED, 'Vyplňte váš e-mail')
    ->addRule(Form::EMAIL, 'E-mail má nesprávný tvar');
$form->addText('predmet', 'Předmět:');
$form->addTextarea('text', 'Text:');
$form->addSubmit('send', 'Odeslat');

$values = $form->getValues();

$mail = new Message;
$mail->setFrom($values['name'], $values['email']);
$mail->addTo('muj@email.cezet')
    ->setSubject($values['predmet'])
    ->setBody($values['text'])
    ->send();

Vzdy mi ale vyskoci tato chyba:

Nette\InvalidArgumentException

Email address '' is not valid.

Cervene oznaceny radek s chybou:

$mail->setFrom($values['name'], $values['email']);

Pokud ovsem setFrom nahradim emailovou adresou ve spravem tvaru, chyba zmizi a nacte se html formular, tak jak by mel.

Jak tedy zaridit, aby se vyplnila emailova adresa a jmeno zadane ve formulari do inputu, ale vyhnout se teto chybe?

Dekuji mockrat,
hezky vecer vsem

Tomas

Jan Endel
Člen | 1016
+
0
-

Formulář se tvoří dvakrát, jednou před vykreslením a jednou po odeslání takže stačí když blok s mail dáš do podmínky:

if ($form->isSubmitted() && $form->isValid()) {
	$mail = new Message;
	...
}
bojovyletoun
Člen | 667
+
0
-

Prostě ty se snažíš vytvořit mail, i když nebyl formulář odeslán,. Buď použij řešení nahoře a nebo pomocí událostí:

$form->addSubmit('send', 'Odeslat')->onClick[]=function($actualButton) /* use ($form) */ {
	$theform=$actualButton->form;  //1
	//formulář získáme buď z tlačítka (1)
	// nebo v proměnné $form - zpřístupněno přes use() ($form===$theForm)
	$values=$theForm->values;
 	new Message...
};

Jelikož nepoužíváš UI\Form → je nutné ručně „oživit“ formulář:$form->fireEvents() – zavoláš, až bude formulář sestavený. „postará se o zavolání příslušných metod včetně kontroly“, zdy byl form odeslán.

Editoval bojovyletoun (26. 9. 2011 0:34)