Zabránění opětovné registrace
- elza
- Člen | 7
Zdravím pánové,
potřebovala bych jako začátečník radu.
Jak nejlépe si poradit s tím, aby uživatel který se již někdy dávno registroval ale snaží se zaregistrovat znovu tím stejným emailem, po odeslání registračního formuláře, neproběhlo ukládání stejných dat do databáze a zobrazila se chybová hláška že email byl již zaregistrován?
Děkuji
- Petr Parolek
- Člen | 455
Ahoj, např. takto: https://github.com/…rManager.php#L74 a v databázi mít mít unikátní klíč na e-mail.
- Kamil Valenta
- Člen | 822
Jedna možnost je zachytávat výjimku unikátního klíče, jak bylo již uvedeno.
Druhá možnost je před insertem udělat select, zda email již v tabulce není. Druhé řešení sice stojí režii selectu a locku, ale zase nevyžírá ID z autoincrementu.
- elza
- Člen | 7
Kamil Valenta napsal(a):
Jedna možnost je zachytávat výjimku unikátního klíče, jak bylo již uvedeno.
Druhá možnost je před insertem udělat select, zda email již v tabulce není. Druhé řešení sice stojí režii selectu a locku, ale zase nevyžírá ID z autoincrementu.
jak by takový select s podmínkou měl vypadat ?
děkuju
- elza
- Člen | 7
elza napsal(a):
Kamil Valenta napsal(a):
Jedna možnost je zachytávat výjimku unikátního klíče, jak bylo již uvedeno.
Druhá možnost je před insertem udělat select, zda email již v tabulce není. Druhé řešení sice stojí režii selectu a locku, ale zase nevyžírá ID z autoincrementu.
jak by takový select s podmínkou měl vypadat ?
děkuju
respektive Select mám jen netuším jak mám formulovat podmínku.
$this->connection->query(‚SELECT email FROM users WHERE email = ?‘, $values);
- Kamil Valenta
- Člen | 822
elza napsal(a):
$this->connection->query(‚SELECT email FROM users WHERE email = ?‘, $values);
Předpokládám, že email nebude ve $values jako takové, ale že $values je
ArrayHash z Form.
Tedy
$this->connection->query('SELECT email FROM users WHERE email = ?', $values->email);
Select a insert by měl probíhat pod zámkem, aby mezi selectem a insertem
neproběhl z jiného vlákna insert požadovaného emailu.
https://www.mysqltutorial.org/…ble-locking/
Nebo nezamykat a po selectu zachytávat výjimku na duplicitní email (což neeliminuje „vyžířání“ ID, ale hodně sníží šanci, že k němu dojde).