Ako testovať vrátené hodnoty z DB
- Čamo
- Člen | 798
Zdravím,
robím akurát registračný formulár a narazil som na problém.
Neviem ako otestovať hodnotu vrátenú z DB.
Mám registračný formulár. Po odoslaní chcem zistiť, či v DB už existuje
niekto s rovnakým menom(kôli duplicitám).
Ako sa to v Nette píše? Mám toto:
public function registFormSucceeded($form)
{
$values = $form->getValues();
$username = $this->database->table('users')->where('username = ?', $values['username']);
if($username['username']) <- ?????????
{
$this->flashMessage('Zadané meno je už obsadené iným užívateľom. Vyberte si prosím iné.', 'success');
$this->redirect('this');
}
$this->database->table('users')->insert(array('username' => $values['username'],
'password' => sha1($values['password'])));
$this->flashMessage('Boli ste úspešne zaregistrovaný.', 'success');
$this->flashMessage('Teraz sa môžete prihlásiť.', 'success');
$this->redirect("Sign:in");
}
}
Editoval Čamo (2. 6. 2014 17:54)
- David Matějka
- Moderator | 6445
v $username
mas selection, za where pridej
->fetch()
, coz ti vrati radek, viz treba https://forum.nette.org/…object-given
a nepouzivej sha1, ale treba Nette\Security\Passwords (v nette od 2.2)
Editoval matej21 (2. 6. 2014 18:05)
- JDC
- Člen | 19
Takhle bych to neřešil. Lepší je ten sloupec dát jako UNIQUE a pak to testovat v nette pomocí try {} catch {}, kde si odchytíš PDOException a pak přes $e->errorInfo (vrací array!) si ověříš přímo chybový kód, který hlásí MySQL. Krásně je to popsané tady Tímto krásně ušetříš ten SELECT dotaz navíc :)