Ověření, jestli uživatel již neexistuje, jak na to?
- Zuben45
- Člen | 268
Dobrý den,
potřeboval bych poradit, ať to řeším jak chci, stále se mi ukazuje pouze
stránka s chybou 500.
můj kód:
protected function createComponentRegisterForm() {
$form = new Form;
$form->addText('username', 'Jméno:', 35)
->addRule(callback($this, 'isNickAvailable'), 'Zadané uživatelské jméno již existuje');
$form->addText('email', 'E-mail: *', 35)
->setEmptyValue('@')
->addRule(Form::FILLED, 'Vyplňte Váš email')
->addCondition(Form::FILLED)
->addRule(Form::EMAIL, 'Neplatná emailová adresa');
$form->addPassword('password', 'Heslo: *', 35)
->addRule(Form::FILLED, 'Vyplňte Vaše heslo');
$form->addPassword('password2', 'Heslo znovu: *', 35)
->addConditionOn($form['password'], Form::VALID)
->addRule(Form::FILLED, 'Heslo znovu')
->addRule(Form::EQUAL, 'Hesla se neshodují.', $form['password']);
$form->addCheckbox('mcregister', 'Zaregistrovat na MC')
->setDefaultValue(FALSE);
$form->addCheckbox('agree', 'Souhlasím s podmínkami')
->addRule(Form::EQUAL, 'Je potřeba souhlasit s podmínkami', TRUE);
$form->addSubmit('send', 'Registrovat');
$form->onSuccess[] = callback($this, 'registerFormSubmitted');
return $form;
}
public function registerFormSubmitted(UI\Form $form) {
$values = $form->getValues();
$exist = count($this->users->findShow()->where('username = ?',$this->username)->limit(1)->fetch());
if($exist > 0)
{
$this->redirect('Homepage:default');
}
else
{
$new_user_id = $this->users->register($values);
if($new_user_id){
$this->redirect('Homepage:default');
$mail = new Message;
$mail->setFrom('Informace <info@gcore.cz')
->addTo($values->email)
->setSubject('Registrace')
->setHTMLBody('<h1>Registrace úspěšná</h1> <p>Dobrý den,<br>Vaše registrace na portále <a href="http://gcore.cz">GCore.cz</a> byla úspěšná.</p><p>Již se můžete přihlásit a využívat našich služeb.</p><p>S pozdravem<br>redakce GCore.cz</p>');
$mailer = new SendmailMailer;
$mailer->send($mail);
}
}
}
public function isNickAvailable( $username)
{
echo $username->getValue();
$username = $this->users()->where(array(
'username' => $username->getValue()))->limit(1)->fetch();
if ($result !== FALSE && !$result->username)
{
return true;
}
else
{
return false;
}
}
Já už opravdu nevím :(, potřeboval bych aby mi to neodeslalo, když je uživatel již existuje.
- David Matějka
- Moderator | 6445
stránka s chybou 500
lepsi popis chyby nemas, jo?
@dobby: pro zjisteni hodnoty controlu se pouziva getValue, takze to ma spravne..
Editoval matej21 (24. 12. 2013 22:49)
- Zuben45
- Člen | 268
díky za odpovědi, ale už jsem to vyřešil následujícím způsobem :)
public function registerFormSubmitted(UI\Form $form) {
$values = $form->getValues();
$exists = $this->users->findShow();
foreach($exists as $exist)
{
if($exist->username == $values->username)
{
$ok = FALSE;
}
else
{
$ok = TRUE;
if($exist->email == $values->email)
{
$mailok = FALSE;
}
else
{
$mailok = TRUE;
}
}
}
//$mail_exist = count($this->users->findShow()->where('email = ?',$values->email)->limit(1)->fetch());
if($ok == FALSE)
{
$form->addError('Uživatelské jméno se již používá.');
}
else
{
if($mailok == FALSE)
{
$form->addError('Email se již používá.');
}
else
{
$new_user_id = $this->users->register($values);
if($new_user_id)
{
$this->redirect('Homepage:default');
$mail = new Message;
$mail->setFrom('Informace <info@gcore.cz')
->addTo($values->email)
->setSubject('Registrace')
->setHTMLBody('<h1>Registrace úspěšná</h1> <p>Dobrý den,<br>Vaše registrace na portále <a href="http://gcore.cz">GCore.cz</a> byla úspěšná.</p><p>Již se můžete přihlásit a využívat našich služeb.</p><p>S pozdravem<br>redakce GCore.cz</p>');
$mailer = new SendmailMailer;
$mailer->send($mail);
}
}
}
}
- David Matějka
- Moderator | 6445
chtel jsem k tomu napsat neco vic, ale tohle bude stacit: ouuuuuuch!!
- David Matějka
- Moderator | 6445
spis co by tam nemelo byt – to prolezani vsech uzivatelu, abys zjistil, jestli tam nekdo neni s tim jmenem a emailem..
dej zpet tu kontrolu pres rule a rekni, co ti to pise za chybu
- mdjimy
- Člen | 9
Hmm moc hezká funkce todle to
$values = $form->getValues();
$exists = $this->users->findShow();
foreach($exists as $exist) {
if($exist->username == $values->username) {
$ok = FALSE;
} else {
$ok = TRUE;
if($exist->email == $values->email) {
$mailok = FALSE;
} else {
$mailok = TRUE;
}
}
}
Nejen ze uděláš práci za DB, ale ještě k tomu dojdeš ke špatnému výsledku…
Pokud budeš hledat FrantaNovak s emailem franta.novak@seznam.cz
A budeš iterovat přes tyto uživatele v tomto pořadí
FrantaNovak – franta.novak@seznam.cz
PepaZDepa – pepa.z.depa@centrum.cz
:
:
Tak budeš mít v proměnné $ok = TRUE, $mailok = TRUE …
+
Určitě by neuškodilo brát login „Honza“ a „honza“ za stejné… stejně pak u mailu…
Editoval mdjimy (23. 4. 2014 23:03)