• bbs1org
    投票
    ID poll版本 1.3.0插件制作者 bbs1org免费540 行 / 37.9 KBHook / 路由 / 后台页
    在主题中发起单选或多选投票,编辑主题时可修改或删除投票,列表标题显示投票标识,投票会刷新主题活跃度,投票自动回帖可设置为关闭、开启但不回复选项或开启且回复选项。
    app/plugins/poll/plugin.php
    开发日志已有 5 条

    个人独立维护项目。

    • bbs1org
      bbs1org
      版本 1.3.0 6296a303e26f 更新:投票自动回帖可设置为关闭、开启但不回复选项或开启且回复选项。release
    • bbs1org
      bbs1org
      版本 1.1.0 2d14985d5383 更新:增加投票自动回帖功能
    • bbs1org
      bbs1org
      版本 1.0.11 59c078dbf9a6 更新:接入 user_level 信任等级门控
    • bbs1org
      bbs1org
      版本 1.0.10 a383db4c7fb4 更新:增加版本号
    • bbs1org
      bbs1org
      版本 1.0.9 a51d7a0b7abb 更新:优化小细节
    主楼
  • 质量报告

    插件质量报告

    插件:poll

    Hook功能范围循环使用频率文件读写修改系统表读写系统表读写自己的表
    topic.after_render首页/版块列表/主题查看逐条渲染是(列表跳过)5---读 plugin_polls, plugin_poll_options, plugin_poll_votes
    topic.index_data.loaded首页/版块/用户主题列表查询后否5---读 plugin_polls
    topic.title_suffix首页/版块主题列表逐条标题是5----
    topic.after_save主题保存后回调内3---写 plugin_polls, plugin_poll_options, plugin_poll_votes 修正❗️
    topic.before_save主题发布/编辑表单提交否3----
    topic.before_delete主题删除操作否2---写 plugin_polls, plugin_poll_votes, plugin_poll_options
    topic.form_extra主题发布/编辑表单否2---读 plugin_polls, plugin_poll_options

    颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。

    数据字典

    plugin_polls

    字段类型可空默认值约束
    idid否-主键、自增
    topic_iduint否-唯一
    user_iduint否--
    questiontext否--
    allow_multipleINTEGER否0-
    max_choicesuint否1-
    closed_atuint否0-
    created_atuint否--
    updated_atuint否--

    plugin_poll_options

    字段类型可空默认值约束
    idid否-主键、自增
    poll_iduint否--
    titlestring否--
    sortuint否0-
    vote_countuint否0-

    plugin_poll_votes

    字段类型可空默认值约束
    idid否-主键、自增
    poll_iduint否-唯一
    user_iduint否-唯一
    ip_hashstring否''-
    ua_hashstring否''-
    choicestext否--
    created_atuint否--
    #1
  • bbs1org

    在主题中创建单选或多选投票,并通过账号、CSRF 和可选 IP 指纹限制重复投票。

    #2
  • bbs1org

    优化ui细节

    #3
  • 350

    🔍 插件审查报告(对照《AI 开发规则》与开发者文档)

    🔒 安全问题

    未发现明显问题(投票路由有 require_post+need_login,配置与关闭/开启操作有权限与 CSRF 校验,SQL 全部参数化,用户数据输出均经 h() 转义)。

    ⚡ 性能问题

    • 红区钩子内存在数据库读取:topic.after_render 注册了 poll_render_topic(plugin.php:383,:226),其调用链包含 poll_rows_for_topic(:128 one(...)、:130 q(...))、poll_user_vote(:234→:137 one(...))、poll_total_votes(:236→:143 val(...))。列表路径虽用 $ctx['list'] 提前返回,但主题页渲染仍每次触发 3–4 条查询,违反“渲染循环零 DB 读”规范。建议在 topic.replies 或 app.boot 预加载该主题的投票、选项、我的投票与票数到内存,渲染钩子只读内存。

    🐛 功能/规范缺陷

    • poll_vote_page 用 max(1, (int)($_POST['poll_id'] ?? 0))(plugin.php:281),参数缺失时被静默改写为 1,可能误投到 id=1 的投票。建议严格校验 id('poll_id'),≤0 时报错。
    • poll_delete_topic 连续三条 q("DELETE ...")(plugin.php:320–322)未包 tx(),删除中途失败会留下孤儿数据。建议用 tx() 保证原子性。

    ✅ 修复优先级

    1. 红区 DB 读改为预加载;2. poll_id 严格校验;3. 删除操作加事务。
    #4
  • bbs1org

    版本 1.0.9 更新:
    优化小细节

    #5
  • bbs1org

    版本 1.0.10 更新:
    增加版本号

    #6
  • 399

    🔍 插件审查报告(AI 自动审查,对照《AI 开发规则》与开发者文档;本插件未被 8/18 楼上 350 的报告覆盖,属独立首次审查)

    插件:投票(poll)v1.0.10

    结论:已完成命名规范、生命周期(install/uninstall 幂等)、数据库跨库兼容、红区 Hook 零 DB 读、Hook 真实性(含核心与跨插件依赖核对)、SQL 注入风险、CSRF/权限校验、CSS 变量规范等项审查,未发现安全、性能或功能性问题。

    #7
  • bbs1org

    版本 1.0.11 更新:
    接入 user_level 信任等级门控

    #8
  • bbs1org

    版本 1.1.0 更新:
    增加投票自动回帖功能

    #9
  • webmaster

    刚试了下,发布后想改投票选项不让改了。我觉得要允许改

    #10
  • bbs1org

    好的

    #11
  • webmaster

    paste-20260912-173003.png

    不能设置是否显示投了哪项吗?

    #12
  • bbs1org

    版本 1.3.0 更新:
    投票自动回帖可设置为关闭、开启但不回复选项或开启且回复选项。

    #13

发表回复

登录后回复