Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP/MYSQL permitindo apenas um voto por membro?


Você pode adicionar uma restrição UNIQUE à sua tabela. Esta é uma operação única - você não precisa fazer isso toda vez que seu script for executado, é uma mudança na estrutura da tabela. Execute isso em sua ferramenta de administração do MySQL (por exemplo, phpMyAdmin, Navicat, HeidiSQL, o que você tem):
ALTER TABLE awards_2009_votes ADD UNIQUE (member_id);

Após essa alteração, não será possível adicionar um segundo voto com o mesmo ID de membro - o INSERT (ou UPDATE) falhará.

A vantagem aqui é que a verificação é feita automaticamente no banco de dados, então você não precisa se preocupar com 1) verificar duplicatas com seu código ou 2) pessoas adicionando vários votos manualmente.

Como @middaparka diz, você deve usar INSERT IGNORE para evitar um erro de "chave duplicada":
$sql_query = mysql_query("INSERT IGNORE INTO awards_2009_votes (`member_id`, `region`, `coach`, `official`, `volunteer`, `young_volunteer`) VALUES ('$memberid', '$region', '$coach', '$official', '$volunteer', '$young_volunteer')") or die (mysql_error());
if (mysql_insert_id()) {
    // row was inserted - vote added
} else {
    // row was not inserted - already voted
}