【问题标题】:How to validate that user inputs only one comment for one file? MYSQL PHP如何验证用户只为一个文件输入一条评论? MYSQL PHP
【发布时间】:2014-04-09 21:53:34
【问题描述】:

我有三个表,分别是书籍、用户评论和用户。表books 保存book id 和book 的详细信息,表users 保存user_id、username 和其他用户详细信息。 user_comment 旁边包含他/她评论过的用户名、评论和 book_id。

这背后的问题是,我希望用户每本书只能发表一条评论(有点像限制!)

我正在寻找可以协作所有这三个表的 if 语句。

comment.php

$_COOKIE['username']; 

INSERT INTO user_comment (book_id, username, comment) VALUES ($_POST['book_id'], $_POST['book_id'], $_POST['book_id']))

【问题讨论】:

    标签: php html mysql validation if-statement


    【解决方案1】:

    首先你必须创建一个SELECT 来检查usernamebook_id 是否存在,如果存在则创建INSERT,如果不存在则发送文本或者您想向用户展示的内容...

    $query = mysql_query("SELECT ...");
    $total = mysql_num_rows($query);
    if($total == 0){
      ...insert here...
    }
    

    注意:我使用的是旧版本的php查询,如果你使用的是新版本,你可能需要更改为mysqli。

    【讨论】:

    • 它说调用未定义函数 mysql_row_count()
    • 我的错...函数是 mysql_num_rows link
    【解决方案2】:

    听起来您想在 (username, book_id) 元组上添加一个UNIQUE CONSTRAINT。一种添加方式:

    CREATE UNIQUE INDEX user_comment_UX1 ON user_comment (username, book_id);
    

    每当尝试插入或更新 user_comment 表中的行,这将违反 (username,book_id) 元组的唯一性,MySQL 将抛出错误,而不是完成操作。

    如果您已经有违反此唯一性的行,那么 MySQL 将无法创建索引。

    识别不唯一的行:

    SELECT book_id
         , username
         , COUNT(1)
      FROM user_comment
     GROUP BY book_id, username
    HAVING COUNT(1) > 1
    

    【讨论】:

      【解决方案3】:

      您需要在此处将列 (user_id, book_id) 设置为唯一的。

      转到 phpMyAdmin 或您正在使用的任何其他 mysql 客户端并执行以下查询

      ALTER TABLE user_comments ADD UNIQUE (user_id, book_id);
      

      添加唯一索引确保表中最多可以存在一个 book_id, user_id 对。因此,即使您尝试再次插入同一对,它也不会插入到表中。这解决了每本书只允许一个用户发表评论的问题。

      【讨论】:

      • 或保留现有的主键并添加唯一索引
      • @sanketh,是的 user_id 和 book_id 已经是唯一键。但它不起作用
      • “它不起作用”是什么意思? .你能在表中插入重复的行吗?
      • @user3517015,您的表中是否已经有重复的行。如果是这样,请尝试删除它们,然后添加约束。
      猜你喜欢
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 2020-01-09
      相关资源
      最近更新 更多