我有一个网站,其中包含某些内容的投票功能。我有一个MySQL数据库,存储所有内容条目,每个用户登录时都有一个INT ID。如何在数据库中存储可变数量的数据,以便我可以检查特定用户是否已投票已经防止双重投票。我试过这个,我不确定它是否正常工作。
当用户提交投票表单时,保存在数据库中的现有字符串将通过邮件$_POST['voted']
与表单一起发送然后我需要添加刚投票给json字符串的人员的ID并保存回来到mysql数据库。 $_SESSION['ID']
保存用户ID,mysql中Voted
的字段类型为TEXT
$json = array();
$json = var_dump(json_decode($_POST['voted']));
$json[] = $_SESSION['ID'];
$Voted = json_encode($json);
答案 0 :(得分:1)
您将json解码为数组
$json = json_decode($your_data_from_mysql_query, true); //When TRUE, returned objects will be converted into associative arrays.
然后你检查用户是否已经使用此函数http://php.net/manual/en/function.in-array.php在数组中使用了他的id,如果它不在那里,那么你填充数组并继续你的工作流程。
答案 1 :(得分:0)
不要使用会话。而是添加一个连接用户和投票主题的新表。当用户对某个主题进行投票时,请将用户ID和主题ID添加到此表中。在允许用户投票之前,请检查此表。
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`users`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`users` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(45) NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`vote_topics`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`vote_topics` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(45) NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`users_has_vote_topics`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`users_has_vote_topics` (
`users_id` INT NOT NULL ,
`vote_topics_id` INT NOT NULL ,
PRIMARY KEY (`users_id`, `vote_topics_id`) ,
INDEX `fk_users_has_vote_topics_vote_topics1_idx` (`vote_topics_id` ASC) ,
INDEX `fk_users_has_vote_topics_users_idx` (`users_id` ASC) ,
CONSTRAINT `fk_users_has_vote_topics_users`
FOREIGN KEY (`users_id` )
REFERENCES `mydb`.`users` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_users_has_vote_topics_vote_topics1`
FOREIGN KEY (`vote_topics_id` )
REFERENCES `mydb`.`vote_topics` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;