Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHP/MYSQL n'autorisant qu'un seul vote par membre ?

Vous pouvez ajouter une contrainte UNIQUE à votre table. Il s'agit d'une opération unique - vous n'avez pas besoin de le faire à chaque exécution de votre script, il s'agit d'une modification de la structure de la table. Exécutez ceci dans votre outil d'administration MySQL (par exemple, phpMyAdmin, Navicat, HeidiSQL, what-have-you) :

ALTER TABLE awards_2009_votes ADD UNIQUE (member_id);

Après ce changement, il ne sera plus possible d'ajouter un deuxième vote avec le même identifiant de membre - l'INSERT (ou UPDATE) échouera.

L'avantage ici est que la vérification est effectuée automatiquement dans la base de données, vous n'avez donc pas à vous soucier de 1) vérifier les doublons avec votre code ou 2) les personnes qui ajoutent plusieurs votes manuellement.

Comme @middaparka dit, vous devez utiliser INSERT IGNORE pour éviter une erreur "clé en double":

$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
}