0

一部のコンテンツに投票機能を使用する Web サイトがあります。すべてのコンテンツ エントリを格納する MySQL データベースがあり、各ユーザーはログイン時に INT ID を持っています。 特定のユーザーが投票したかどうかを確認できるように、可変量のデータをデータベースに格納するにはどうすればよいですか?すでに二重投票を防ぐために。私はこれを試しましたが、それが正しく機能しているかどうかはわかりません。

ユーザーが投票フォームを送信すると、データベースに保存されている既存の文字列がフォームとともに送信されます。$_POST['voted']次に、投票したばかりの人の ID を json 文字列に追加し、それを mysql データベースに保存する必要があります。ユーザーIDを保持し、mysql$_SESSION['ID']のフィールドタイプはVotedTEXT

$json = array();
$json = var_dump(json_decode($_POST['voted']));
$json[] = $_SESSION['ID'];
$Voted = json_encode($json);
4

2 に答える 2

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 を持っているかどうかを確認し、そこにない場合は、配列にデータを入力して続行しますワークフロー。

于 2013-03-02T16:31:34.773 に答える
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;
于 2013-03-02T16:31:25.453 に答える