Osetreni duplicity pri insertu do db (MySQL err#1062)

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

Ahoj,
mam-li v databazi napr. v tabulce users nad sloupcem username unique index a uzivatel se pokusi zaregistrovat pod jmenem, ktere jiz tam existuje, vyhodi se vyjimka Dibiexception, tu muzu odchytnout a vypsat uzivateli ze username uz existuje, ale hodnoty formulare se mi mezitim smazou. Jak toto vyresit, aby zustal vyplneny?

Mám to nějak takto…

<?php
	$model = new UsersModel();
	try
	{
		$model->insertUser($values);
        }
        catch (DibiDriverException $e)
        {
        	if ($e->getCode() == 1062)
                {
                        $this->flashMessage('Uživatelské jméno již existuje!');
                }
...
?>
redhead
Člen | 1313
+
0
-

Normálně to funguje, jenom nesmíš redirectovat, pokud nastala chyba (čili redirect dej do try {} blocku, pokud ho máš někde jinde)

Ondřej Mirtes
Člen | 1536
+
0
-

Místo $this->flashMessage('Uživatelské jméno již existuje!'); dej $form->addError('Uživatelské jméno již existuje!');

A po té metodě insertUser musíš volat $this->redirect('this'); (klidně někam jinam), protože se jedná o změnu stavu serveru.

Editoval Ondřej Mirtes (3. 3. 2010 21:30)

suxik
Člen | 62
+
0
-

dík Ondro za addError, o tom jsem nevedel, ten redirect tam samozrejme mam, jen jsem ho sem nepsal. Takze vyreseno – v catch bloku zadny redirect a jede to jak ma (diky redhead)