用户报告库

时间:2009-09-02 20:46:21

标签: php reporting

我想建立(或找到)一个php报告库,我可以用它来允许我的用户报告任何类型的内容都是坏的。实际上,如果他们能够将内容报告为好(我认为这意味着评级系统)会更好。所以,如果有人知道这样的图书馆,我很乐意听到它。

无论如何,这就是我想象数据库工作的方式,我想知道这听起来是否正确。

  1. ID - 行ID
  2. USER_ID - 用户投票/报告的ID
  3. ITEM_ID - 报告项目的唯一表格行ID(帖子,其他用户,链接等)
  4. TYPE - 与其相关的表的名称(帖子,用户,链接等)
  5. DATE - 报告的日期时间
  6. VALUE - 我想这可能是UP投票或DOWN投票
  7. 通过包含[TYPE]列,我可以在我网站上的所有内容类型中使用此投票系统,而不仅仅是一个(如论坛帖子)。通过存储user_id,我可以确保每个用户每个项目只能投一个投票/报告。

1 个答案:

答案 0 :(得分:1)

好吧,我继续像我说的那样建造它。弗兰克是对的,这不是太难。以下是其他人想要在支持AR样式的DB调用(如CodeIgniter或MicroMVC)的MVC上使用它的代码:

/*
 * Multi-table user voting model
 */
class votes extends model {

    public static $table = 'votes';


    function cast( $user_id = NULL, $item_id = NULL, $type = NULL, $vote = TRUE) {

        $where = array(
            'user_id'   => $user_id,
            'item_id'   => $item_id,
            'type'      => $type
        );

        //Try to fetch this row
        $row = $this->db->get_where(self::$table, $where );

        //Look for an existing vote row
        if( $row && ! empty($row[0]) ) {

            //Fetch row
            $row = $row[0];

            //If they already voted this way... then we're done!
            if( $row->vote == $vote) {
                return;
            }

            //Else update the row to the new vote
            $row->vote = $vote;
            $row->date = convert_time(time());

            $this->db->update( self::$table, $row, array('id' => $row->id) );

            return;
        }

        //Else create a new vote for this item
        $row = array(
            'user_id'   => $user_id,
            'item_id'   => $item_id,
            'type'      => $type,
            'date'      => convert_time(time()),
            'vote'      => $vote,
        );

        $this->db->insert( self::$table, $row);
    }
}