Chyba v insertu do DB, která se nezobrazí
- cs_paladin
- Člen | 7
Zdravím, musím otravovat znova
Mám jednoduchý presenter napojený na ještě jednodušší šablonu.
use Nette\Application\UI\Form;
class registerPresenter extends BasePresenter {
private $uzivatelRepository;
private $mestoRepository;
/* * v
* Sign-in form factory.
* @return Nette\Application\UI\Form
*/
protected function startup() {
parent::startup();
$this->uzivatelRepository = $this->context->uzivatelRepository;
/*$this->mestoRepository = $this->context->mestoRepository;*/
}
protected function createComponentNovyUzivatel() {
$form = new Form();
$form->addText("jmeno", "Jméno:", 40, 100)->addRule(Form::FILLED, "Je nutné vyplnit jméno uživatele");
$form->addPassword("heslo", "Heslo:", 40, 40)->addRule(Form::MIN_LENGTH, "Heslo by mělo mít alespoň %d znaků.", 6);
$form->addPassword("heslo_2", "Opakujte heslo:", 40, 40)->addRule(Form::FILLED, "Heslo musíte zadata ještě jednou")->addRule(Form::EQUAL, "Hesla se musí schodovat", $form["heslo"]);
$form->addText("email", "Email:", 40, 100)->addRule(Form::EMAIL, "Musíte zadat email")->addRule(Form::FILLED, "Musíte zadat email");
$form->addSubmit('registrovat', "Registrovat se");
$form->onSuccess[] = $this->novyUzivatelSubmitted;
return($form);
}
public function novyUzivatelSubmitted(Form $form) {
try {
$this->uzivatelRepository->createRegistration2($form->values->jmeno, $form->values->heslo, $form->values->email);
$this->flashMessage('Registrace se povedla můžete se přihlásit', 'success');
$this->redirect('sign:in');
} catch (\PdoException $e) {
if (is_array($e->errorInfo) && $e->errorInfo[1] == 1062) {
$form->addError("Tento uživatel nebo email byl již registrován");
} else {
}
}
}
}
presenter využívá ještě menší repository
namespace WebGame;
use Nette;
/**
* Tabulka user
*/
class UzivatelRepository extends Repository {
public function findByName($username) {
return $this->findAll()->where('jmeno', $username)->fetch();
}
public function setPassword($id, $password) {
$this->getTable()->where(array('id' => $id))->update(array('heslo' => \Authenticator::calculateHash($password)));
}
public function createRegistration($jmeno, $heslo, $email) {
return $this->getTable()->insert(array(
'jmeno' => $jmeno,
'heslo' => \Authenticator::calculateHash($heslo),
'email' => $email,
'role' => "uzivatel"
));
}
}
A problém je, že místo aby se vložil řádek s registrací do
adresáře, tak zůstane akorát zobrazený registrační formulář, prázdný.
Pokud ale odstraním insert a dám tam třeba echo „AHOJ“; tak se zobrazí
„AHOJ“, provede se redirect a flashMessage. Ale s insertem ve formuláři
zůstane email a jméno.
Do DB se nevloží nic.
Díky za každou radu
Editoval cs_paladin (24. 9. 2013 15:59)
- cs_paladin
- Člen | 7
voda napsal(a):
Asi ti to skočí do else části u zachytávání PdoException, přidej si tam nastavení chyby formuláři.
} catch (\PdoException $e) { if (is_array($e->errorInfo) && $e->errorInfo[1] == 1062) { $form->addError("Tento uživatel nebo email byl již registrován"); } else { // tady } }
Ještě, že jsou tu chytří lidé, moc děkuji, to je přesně to místo a už mám i chybu
ERROR 1467 (HY000): Failed to read auto-increment value from storage
engine.
A tu už jsem snadno vyřešil nastavením AUTOINCERMENT na
další číslo.
Díky moc
Editoval cs_paladin (24. 9. 2013 16:26)