From d75163b2b44f4a1436bc0ed905a31ad73e7b3876 Mon Sep 17 00:00:00 2001 From: Snowz <372492339@qq.com> Date: Mon, 26 May 2025 15:23:18 +0800 Subject: [PATCH] first commit --- .htaccess | 83 ++++ DEPLOY.md | 304 +++++++++++++++ LICENSE | 21 ++ README.md | 261 +++++++++++++ admin/arial.ttf | Bin 0 -> 296712 bytes admin/captcha.php | 60 +++ admin/index.php | 750 +++++++++++++++++++++++++++++++++++++ admin/login.php | 280 ++++++++++++++ admin/logout.php | 22 ++ api/fetch_website_info.php | 35 ++ assets/css/style.css | 524 ++++++++++++++++++++++++++ assets/js/main.js | 612 ++++++++++++++++++++++++++++++ cleanup.php | 231 ++++++++++++ config/database.php | 147 ++++++++ includes/utils.php | 266 +++++++++++++ index.php | 580 ++++++++++++++++++++++++++++ install.php | 478 +++++++++++++++++++++++ 需求说明.md | 31 ++ 18 files changed, 4685 insertions(+) create mode 100644 .htaccess create mode 100644 DEPLOY.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 admin/arial.ttf create mode 100644 admin/captcha.php create mode 100644 admin/index.php create mode 100644 admin/login.php create mode 100644 admin/logout.php create mode 100644 api/fetch_website_info.php create mode 100644 assets/css/style.css create mode 100644 assets/js/main.js create mode 100644 cleanup.php create mode 100644 config/database.php create mode 100644 includes/utils.php create mode 100644 index.php create mode 100644 install.php create mode 100644 需求说明.md diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..6c0c02d --- /dev/null +++ b/.htaccess @@ -0,0 +1,83 @@ +# Apache配置文件 +# 用于URL重写和安全设置 + +# 启用重写引擎 +RewriteEngine On + +# URL重写规则 +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule ^(.*)$ index.php [QSA,L] + +# 安全设置 - 禁止访问敏感目录 + + Order Allow,Deny + Deny from all + + + + Order Allow,Deny + Deny from all + + + + Order Allow,Deny + Deny from all + + +# 禁止访问敏感文件 + + Order Allow,Deny + Deny from all + + +# 禁止访问隐藏文件 + + Order Allow,Deny + Deny from all + + +# 禁止访问安装文件(安装完成后) + + Order Allow,Deny + Deny from all + + +# 设置默认字符集 +AddDefaultCharset UTF-8 + +# 启用GZIP压缩 + + AddOutputFilterByType DEFLATE text/plain + AddOutputFilterByType DEFLATE text/html + AddOutputFilterByType DEFLATE text/xml + AddOutputFilterByType DEFLATE text/css + AddOutputFilterByType DEFLATE application/xml + AddOutputFilterByType DEFLATE application/xhtml+xml + AddOutputFilterByType DEFLATE application/rss+xml + AddOutputFilterByType DEFLATE application/javascript + AddOutputFilterByType DEFLATE application/x-javascript + + +# 设置缓存策略 + + ExpiresActive On + ExpiresByType text/css "access plus 1 month" + ExpiresByType application/javascript "access plus 1 month" + ExpiresByType image/png "access plus 1 month" + ExpiresByType image/jpg "access plus 1 month" + ExpiresByType image/jpeg "access plus 1 month" + ExpiresByType image/gif "access plus 1 month" + ExpiresByType image/ico "access plus 1 month" + ExpiresByType image/icon "access plus 1 month" + ExpiresByType text/plain "access plus 1 month" + ExpiresByType application/pdf "access plus 1 month" + + +# 安全头设置 + + Header always set X-Content-Type-Options nosniff + Header always set X-Frame-Options DENY + Header always set X-XSS-Protection "1; mode=block" + Header always set Referrer-Policy "strict-origin-when-cross-origin" + \ No newline at end of file diff --git a/DEPLOY.md b/DEPLOY.md new file mode 100644 index 0000000..691f50a --- /dev/null +++ b/DEPLOY.md @@ -0,0 +1,304 @@ +# 宝塔面板部署指南 + +本文档详细介绍如何在宝塔面板中部署内容投稿系统。 + +## 📋 部署前准备 + +### 服务器要求 +- 操作系统:Linux(推荐CentOS 7+/Ubuntu 18+) +- 内存:至少512MB(推荐1GB+) +- 硬盘:至少1GB可用空间 +- 网络:稳定的互联网连接 + +### 宝塔面板要求 +- 宝塔面板版本:7.0+ +- PHP版本:7.4+ +- Web服务器:Apache或Nginx +- 数据库:MySQL 5.7+(可选,也可使用SQLite) + +## 🚀 详细部署步骤 + +### 第一步:安装宝塔面板 + +如果还未安装宝塔面板,请先安装: + +```bash +# CentOS安装命令 +yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh + +# Ubuntu安装命令 +wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh +``` + +### 第二步:配置服务器环境 + +1. **登录宝塔面板** + - 访问 `http://服务器IP:8888` + - 使用安装时显示的用户名和密码登录 + +2. **安装LNMP/LAMP环境** + - 选择"软件商店" → "一键部署" + - 推荐安装:Nginx 1.20+ + MySQL 5.7+ + PHP 7.4+ + - 等待安装完成(约10-30分钟) + +3. **安装PHP扩展** + - 进入"软件商店" → "已安装" + - 找到PHP,点击"设置" + - 在"安装扩展"中安装以下扩展: + - `pdo_mysql`(MySQL支持) + - `pdo_sqlite`(SQLite支持) + - `gd`(图像处理) + - `curl`(网络请求) + - `fileinfo`(文件信息) + +### 第三步:创建网站 + +1. **添加站点** + - 点击"网站" → "添加站点" + - 域名:填入你的域名(如:example.com) + - 根目录:默认即可 + - PHP版本:选择7.4或更高版本 + - 数据库:选择MySQL(可选) + - 点击"提交" + +2. **配置域名解析** + - 在域名服务商处添加A记录 + - 将域名指向服务器IP地址 + +### 第四步:上传项目文件 + +1. **下载项目** + - 方式一:直接上传压缩包 + - 将项目打包为zip文件 + - 在宝塔面板"文件"中上传到网站根目录 + - 解压文件 + + - 方式二:使用Git(推荐) + - 在"终端"中执行: + ```bash + cd /www/wwwroot/your-domain.com + git clone https://github.com/your-repo/submission-system.git . + ``` + +2. **设置文件权限** + - 在"文件"管理中,选择网站根目录 + - 右键选择"权限",设置为755 + - 特别设置以下目录权限为777: + - `config/` + - `data/` + +### 第五步:配置数据库(MySQL方式) + +1. **创建数据库** + - 点击"数据库" → "添加数据库" + - 数据库名:`submission_system` + - 用户名:自定义 + - 密码:自动生成或自定义 + - 记录数据库信息 + +2. **配置数据库连接** + - 编辑 `config/database.php` + - 填入正确的数据库信息 + +### 第六步:运行安装向导 + +1. **访问安装页面** + - 浏览器访问:`http://your-domain.com/install.php` + +2. **环境检查** + - 系统会自动检查服务器环境 + - 确保所有检查项都通过 + +3. **数据库配置** + - 选择数据库类型(MySQL或SQLite) + - 填入数据库连接信息 + - 测试连接 + +4. **初始化数据库** + - 点击"初始化数据库" + - 等待数据表创建完成 + +5. **完成安装** + - 记录默认管理员账户信息 + - 删除或重命名 `install.php` 文件 + +### 第七步:安全配置 + +1. **SSL证书配置** + - 在"网站"中找到你的站点 + - 点击"设置" → "SSL" + - 申请Let's Encrypt免费证书 + - 开启"强制HTTPS" + +2. **防火墙设置** + - 在"安全"中配置防火墙 + - 开放80、443端口 + - 关闭不必要的端口 + +3. **文件安全** + - 删除 `install.php` + - 检查敏感文件权限 + - 定期备份数据 + +## 🔧 高级配置 + +### Nginx配置优化 + +在网站设置中添加以下Nginx配置: + +```nginx +# 安全设置 +location ~ ^/(config|includes|data)/ { + deny all; +} + +# 禁止访问敏感文件 +location ~* \.(sql|log|md|txt|conf)$ { + deny all; +} + +# 隐藏文件 +location ~ /\. { + deny all; +} + +# PHP配置 +location ~ \.php$ { + fastcgi_pass unix:/tmp/php-cgi-74.sock; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; +} + +# 静态文件缓存 +location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ { + expires 30d; + add_header Cache-Control "public, immutable"; +} +``` + +### PHP配置优化 + +在PHP设置中调整以下参数: + +```ini +; 上传限制 +upload_max_filesize = 10M +post_max_size = 10M + +; 执行时间 +max_execution_time = 60 + +; 内存限制 +memory_limit = 256M + +; 错误报告 +display_errors = Off +log_errors = On + +; 会话配置 +session.cookie_httponly = On +session.cookie_secure = On +``` + +### 定时任务配置 + +可以设置定时任务来清理过期数据: + +```bash +# 每天凌晨2点清理7天前的IP记录 +0 2 * * * /usr/bin/php /www/wwwroot/your-domain.com/cleanup.php +``` + +## 📊 性能优化 + +### 数据库优化 + +1. **索引优化** + ```sql + -- 为常用查询字段添加索引 + ALTER TABLE website_submissions ADD INDEX idx_status (status); + ALTER TABLE website_submissions ADD INDEX idx_created (created_at); + ALTER TABLE app_submissions ADD INDEX idx_status (status); + ALTER TABLE app_submissions ADD INDEX idx_created (created_at); + ``` + +2. **定期清理** + - 定期清理过期的IP限制记录 + - 归档或删除过旧的投稿记录 + +### 缓存配置 + +1. **开启OPcache** + - 在PHP设置中开启OPcache扩展 + - 提高PHP执行效率 + +2. **静态文件CDN** + - 将CSS、JS等静态文件上传到CDN + - 加速页面加载速度 + +## 🔍 故障排除 + +### 常见问题解决 + +1. **500错误** + - 检查PHP错误日志 + - 确认文件权限设置 + - 检查.htaccess配置 + +2. **数据库连接失败** + - 验证数据库配置信息 + - 检查数据库服务状态 + - 确认防火墙设置 + +3. **验证码不显示** + - 检查GD扩展是否安装 + - 确认PHP图像处理功能 + +4. **无法获取网站信息** + - 检查cURL扩展 + - 确认服务器网络连接 + - 检查目标网站可访问性 + +### 日志查看 + +- **PHP错误日志**:`/www/wwwroot/your-domain.com/php_errors.log` +- **Nginx访问日志**:`/www/wwwroot/your-domain.com/log/access.log` +- **Nginx错误日志**:`/www/wwwroot/your-domain.com/log/error.log` + +## 📈 监控与维护 + +### 定期维护任务 + +1. **系统更新** + - 定期更新宝塔面板 + - 更新PHP、MySQL版本 + - 更新系统安全补丁 + +2. **数据备份** + - 设置自动数据库备份 + - 定期下载备份文件 + - 测试备份恢复流程 + +3. **安全检查** + - 检查异常访问日志 + - 更新管理员密码 + - 检查文件完整性 + +### 性能监控 + +- 使用宝塔面板的监控功能 +- 关注CPU、内存、磁盘使用率 +- 监控网站访问速度 + +## 📞 技术支持 + +如果在部署过程中遇到问题: + +1. 查看本文档的故障排除部分 +2. 检查项目的GitHub Issues +3. 联系技术支持 + +--- + +**祝您部署顺利!如有问题,欢迎反馈。** \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f16f3ea --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Content Submission System + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..51f380a --- /dev/null +++ b/README.md @@ -0,0 +1,261 @@ +# 内容投稿系统 + +一个轻量级、易部署的内容投稿管理系统,支持网址和APP/软件投稿,具有完善的后台审核功能。 + +## ✨ 功能特性 + +### 前端功能 +- 🌐 **网址投稿**:自动获取网站TDK信息(标题、描述、关键词) +- 📱 **APP/软件投稿**:支持多平台应用投稿 +- 🎯 **多平台收录**:支持自媒体维基、zTab、SOSO平台选择 +- 🔒 **IP限制**:每IP每日最多提交3次 +- 🚫 **重复检测**:智能检测重复内容 +- 📱 **响应式设计**:完美适配移动端和桌面端 + +### 后端功能 +- 👨‍💼 **管理后台**:完善的内容审核管理 +- 🔐 **安全登录**:验证码保护,防暴力破解 +- 📊 **数据统计**:实时查看投稿统计数据 +- ✅ **状态管理**:待处理、已通过、已拒绝状态管理 +- 👤 **账户管理**:支持修改管理员用户名和密码 +- 🗂️ **分类管理**:网址和APP投稿分开管理 + +### 技术特性 +- 🗄️ **双数据库支持**:MySQL和SQLite可选 +- 🚀 **轻量化设计**:纯PHP开发,无复杂依赖 +- 🎨 **现代化UI**:参考大厂设计风格 +- 📦 **易于部署**:支持宝塔面板一键部署 +- 🔧 **安装向导**:图形化安装配置 + +## 🛠️ 环境要求 + +- PHP >= 7.4 +- PDO扩展 +- PDO MySQL扩展(必须使用MySQL或MariaDB) +- GD扩展(验证码功能) +- cURL扩展(网站信息抓取) + +## 📦 安装部署 + +### 方式一:宝塔面板部署(推荐) + +1. **下载源码** + ```bash + # 在宝塔面板文件管理中,进入网站根目录 + # 上传项目文件或使用Git克隆 + git clone https://github.com/your-repo/submission-system.git + ``` + +2. **设置网站** + - 在宝塔面板中创建新网站 + - 设置运行目录为项目根目录 + - PHP版本选择7.4或以上 + +3. **配置数据库** + - 在宝塔面板中创建MySQL数据库 + - 记录数据库名、用户名、密码 + +4. **设置文件权限** + ```bash + chmod 755 -R /www/wwwroot/your-domain/ + chmod 777 /www/wwwroot/your-domain/config/ + chmod 777 /www/wwwroot/your-domain/data/ + ``` + +5. **运行安装向导** + - 访问 `http://your-domain/install.php` + - 按照向导完成安装配置 + +6. **安全设置** + - 安装完成后删除或重命名 `install.php` + - 登录后台修改默认密码 + +### 方式二:手动部署 + +1. **上传文件** + - 将所有文件上传到Web服务器根目录 + +2. **配置Web服务器** + + **Apache配置**(.htaccess): + ```apache + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^(.*)$ index.php [QSA,L] + + # 安全设置 + + Order Allow,Deny + Deny from all + + ``` + + **Nginx配置**: + ```nginx + server { + listen 80; + server_name your-domain.com; + root /path/to/submission-system; + index index.php; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location ~ \.php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + } + + # 安全设置 + location ~ ^/config/ { + deny all; + } + } + ``` + +3. **设置权限** + ```bash + chmod 755 -R /path/to/submission-system/ + chmod 777 /path/to/submission-system/config/ + chmod 777 /path/to/submission-system/data/ + ``` + +4. **运行安装** + - 访问安装向导完成配置 + +## 🎯 使用说明 + +### 前台投稿 + +1. **网址投稿** + - 输入网址URL(支持http/https) + - 点击"获取信息"自动填充网站信息 + - 选择收录平台 + - 填写联系方式(可选) + - 提交投稿 + +2. **APP投稿** + - 切换到"APP/软件投稿"标签 + - 填写应用名称、平台、版本等信息 + - 提供图标地址、下载链接、官网地址 + - 选择收录平台并提交 + +### 后台管理 + +1. **登录后台** + - 访问 `/admin/login.php` + - 默认账户:admin/admin + - 输入验证码登录 + +2. **内容审核** + - 查看待处理的投稿内容 + - 切换查看网址投稿和APP投稿 + - 批量或单个审核通过/拒绝 + - 添加审核备注 + +3. **账户管理** + - 点击"账户设置"修改用户名和密码 + - 建议首次登录后立即修改默认密码 + +## 🔧 配置说明 + +### 数据库配置 + +编辑 `config/database.php`: + +```php +// MySQL配置 +private $host = 'localhost'; +private $db_name = 'submission_system'; +private $username = 'root'; +private $password = ''; +``` + +### 功能配置 + +- **IP限制**:在 `includes/utils.php` 中修改每日提交次数限制 +- **验证码**:可在 `admin/captcha.php` 中自定义验证码样式 +- **平台选项**:在前端页面中修改收录平台选项 + +## 📁 目录结构 + +``` +submission-system/ +├── admin/ # 后台管理 +│ ├── index.php # 管理主页 +│ ├── login.php # 登录页面 +│ ├── logout.php # 退出登录 +│ └── captcha.php # 验证码生成 +├── api/ # API接口 +│ └── fetch_website_info.php # 获取网站信息 +├── config/ # 配置文件 +│ └── database.php # 数据库配置 +├── includes/ # 核心文件 +│ └── utils.php # 工具类 +├── data/ # 数据目录(SQLite) +├── index.php # 前台主页 +├── install.php # 安装向导 +├── README.md # 说明文档 +└── LICENSE # 开源协议 +``` + +## 🔒 安全建议 + +1. **修改默认密码**:首次登录后立即修改admin账户密码 +2. **删除安装文件**:安装完成后删除 `install.php` +3. **设置文件权限**:确保配置文件不可通过Web访问 +4. **定期备份**:定期备份数据库和配置文件 +5. **更新维护**:及时更新PHP版本和扩展 + +## 🐛 常见问题 + +### Q: 无法获取网站信息? +A: 检查服务器是否支持cURL扩展,确保目标网站可访问。 + +### Q: 验证码不显示? +A: 检查GD扩展是否安装,确保PHP支持图像处理。 + +### Q: 数据库连接失败? +A: 检查数据库配置信息,确保数据库服务正常运行。 + +### Q: 文件上传权限错误? +A: 检查目录权限设置,确保Web服务器有写入权限。 + +### Q: 页面样式异常? +A: 检查CDN资源是否正常加载,可考虑本地化CSS/JS文件。 + +## 🤝 贡献指南 + +欢迎提交Issue和Pull Request来改进项目! + +1. Fork 项目 +2. 创建功能分支 (`git checkout -b feature/AmazingFeature`) +3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) +4. 推送到分支 (`git push origin feature/AmazingFeature`) +5. 开启 Pull Request + +## 📄 开源协议 + +本项目采用 MIT 协议开源,详见 [LICENSE](LICENSE) 文件。 + +## 🙏 致谢 + +- 感谢所有为开源社区做出贡献的开发者 +- 特别感谢提供设计灵感的各大互联网公司 +- 感谢使用本系统的每一位用户 + +## 📞 联系方式 + +如有问题或建议,欢迎通过以下方式联系: + +- 提交 Issue +- 发送邮件 +- 加入讨论群 + +--- + +**⭐ 如果这个项目对你有帮助,请给个Star支持一下!** \ No newline at end of file diff --git a/admin/arial.ttf b/admin/arial.ttf new file mode 100644 index 0000000000000000000000000000000000000000..12cc15c8d871b54a7d6af9d1d2f656975a3b0913 GIT binary patch literal 296712 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

X5OC*Wrb;A>V_xb(jrxM!H5oDe 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 literal 0 HcmV?d00001 diff --git a/admin/captcha.php b/admin/captcha.php new file mode 100644 index 0000000..b4780a3 --- /dev/null +++ b/admin/captcha.php @@ -0,0 +1,60 @@ + \ No newline at end of file diff --git a/admin/index.php b/admin/index.php new file mode 100644 index 0000000..9051119 --- /dev/null +++ b/admin/index.php @@ -0,0 +1,750 @@ +getConnection(); + +$message = ''; +$message_type = ''; + +// 处理操作 +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $action = $_POST['action'] ?? ''; + + if ($action === 'update_status') { + $type = $_POST['type'] ?? ''; + $id = $_POST['id'] ?? ''; + $status = $_POST['status'] ?? ''; + $note = $_POST['note'] ?? ''; + + if ($type === 'website') { + $stmt = $db->prepare("UPDATE website_submissions SET status = ?, admin_note = ? WHERE id = ?"); + } else { + $stmt = $db->prepare("UPDATE app_submissions SET status = ?, admin_note = ? WHERE id = ?"); + } + + if ($stmt->execute([$status, $note, $id])) { + $message = '状态更新成功'; + $message_type = 'success'; + } else { + $message = '状态更新失败'; + $message_type = 'error'; + } + } elseif ($action === 'update_account') { + $new_username = trim($_POST['new_username'] ?? ''); + $new_password = $_POST['new_password'] ?? ''; + $confirm_password = $_POST['confirm_password'] ?? ''; + + if (empty($new_username)) { + $message = '用户名不能为空'; + $message_type = 'error'; + } elseif (!empty($new_password) && $new_password !== $confirm_password) { + $message = '两次输入的密码不一致'; + $message_type = 'error'; + } else { + $admin_id = $_SESSION['admin_id']; + + if (!empty($new_password)) { + $hashed_password = password_hash($new_password, PASSWORD_DEFAULT); + $stmt = $db->prepare("UPDATE admins SET username = ?, password = ? WHERE id = ?"); + $stmt->execute([$new_username, $hashed_password, $admin_id]); + } else { + $stmt = $db->prepare("UPDATE admins SET username = ? WHERE id = ?"); + $stmt->execute([$new_username, $admin_id]); + } + + $_SESSION['admin_username'] = $new_username; + $message = '账户信息更新成功'; + $message_type = 'success'; + } + } +} + +// 获取统计数据 +$stats = [ + 'website_pending' => 0, + 'website_approved' => 0, + 'website_rejected' => 0, + 'app_pending' => 0, + 'app_approved' => 0, + 'app_rejected' => 0 +]; + +$stmt = $db->prepare("SELECT status, COUNT(*) as count FROM website_submissions GROUP BY status"); +$stmt->execute(); +while ($row = $stmt->fetch()) { + $stats['website_' . $row['status']] = $row['count']; +} + +$stmt = $db->prepare("SELECT status, COUNT(*) as count FROM app_submissions GROUP BY status"); +$stmt->execute(); +while ($row = $stmt->fetch()) { + $stats['app_' . $row['status']] = $row['count']; +} + +// 获取列表数据 +$filter = $_GET['filter'] ?? 'pending'; +$type = $_GET['type'] ?? 'website'; +$page = max(1, intval($_GET['page'] ?? 1)); +$limit = 10; +$offset = ($page - 1) * $limit; + +// 强制转换为整数 +$limit = (int)$limit; +$offset = (int)$offset; + +if ($type === 'website') { + $count_stmt = $db->prepare("SELECT COUNT(*) FROM website_submissions WHERE status = ?"); + $count_stmt->execute([$filter]); + $total = $count_stmt->fetchColumn(); + + $stmt = $db->prepare(" + SELECT id, url, title, description, platforms, contact, status, admin_note, created_at + FROM website_submissions + WHERE status = ? + ORDER BY created_at DESC + LIMIT ?, ? + "); + $stmt->bindValue(1, $filter, PDO::PARAM_STR); + $stmt->bindValue(2, $offset, PDO::PARAM_INT); + $stmt->bindValue(3, $limit, PDO::PARAM_INT); + $stmt->execute(); +} else { + $count_stmt = $db->prepare("SELECT COUNT(*) FROM app_submissions WHERE status = ?"); + $count_stmt->execute([$filter]); + $total = $count_stmt->fetchColumn(); + + $stmt = $db->prepare(" + SELECT id, name, platform, version, icon_url, download_url, website_url, description, platforms, contact, status, admin_note, created_at + FROM app_submissions + WHERE status = ? + ORDER BY created_at DESC + LIMIT ?, ? + "); + $stmt->bindValue(1, $filter, PDO::PARAM_STR); + $stmt->bindValue(2, $offset, PDO::PARAM_INT); + $stmt->bindValue(3, $limit, PDO::PARAM_INT); + $stmt->execute(); +} + +$submissions = $stmt->fetchAll(); +$total_pages = ceil($total / $limit); +?> + + + + + + + 管理后台 - 内容投稿系统 + + + + +

+
+

管理后台

+
+ 欢迎, + + + 前台 + + + 退出 + +
+
+
+ +
+ +
+ +
+ + + + + + +
+
+

+

网址待审核

+
+
+

+

网址已通过

+
+
+

+

应用待审核

+
+
+

+

应用已通过

+
+
+ + +
+ + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID网址标题应用名称平台版本收录平台联系方式状态提交时间操作
+ + 30 ? '...' : ''); ?> + + + + '待处理', + 'approved' => '已通过', + 'rejected' => '已拒绝' + ]; + echo $status_text[$submission['status']]; + ?> + + +
+ + + + + +
+
+
+ + + 1): ?> + + +
+ + + + + + + \ No newline at end of file diff --git a/admin/login.php b/admin/login.php new file mode 100644 index 0000000..3d72219 --- /dev/null +++ b/admin/login.php @@ -0,0 +1,280 @@ +getConnection(); + + $stmt = $db->prepare("SELECT id, username, password FROM admins WHERE username = ?"); + $stmt->execute([$username]); + $admin = $stmt->fetch(); + + if ($admin && password_verify($password, $admin['password'])) { + $_SESSION['admin_logged_in'] = true; + $_SESSION['admin_id'] = $admin['id']; + $_SESSION['admin_username'] = $admin['username']; + header('Location: index.php'); + exit; + } else { + $error = '用户名或密码错误'; + } + } +} +?> + + + + + + + 管理后台登录 + + + + + + + + + \ No newline at end of file diff --git a/admin/logout.php b/admin/logout.php new file mode 100644 index 0000000..e0dea78 --- /dev/null +++ b/admin/logout.php @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/api/fetch_website_info.php b/api/fetch_website_info.php new file mode 100644 index 0000000..a08d2d1 --- /dev/null +++ b/api/fetch_website_info.php @@ -0,0 +1,35 @@ + false, 'message' => 'Method not allowed']); + exit; +} + +$input = json_decode(file_get_contents('php://input'), true); +$url = $input['url'] ?? ''; + +if (empty($url)) { + echo json_encode(['success' => false, 'message' => 'URL is required']); + exit; +} + +$database = new Database(); +$db = $database->getConnection(); +$utils = new Utils($db); + +$result = $utils->getWebsiteInfo($url); + +echo json_encode($result); +?> \ No newline at end of file diff --git a/assets/css/style.css b/assets/css/style.css new file mode 100644 index 0000000..fd11113 --- /dev/null +++ b/assets/css/style.css @@ -0,0 +1,524 @@ +/* 投稿系统样式文件 */ +/* 现代化设计,参考互联网大厂设计思路 */ + +/* 全局样式重置 */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +/* CSS变量定义 - 统一配色方案 */ +:root { + /* 主色调 - 现代蓝紫渐变 */ + --primary-color: #667eea; + --primary-dark: #5a67d8; + --primary-light: #7c3aed; + --primary-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + + /* 辅助色 */ + --secondary-color: #f093fb; + --accent-color: #4facfe; + + /* 状态色 */ + --success-color: #10b981; + --warning-color: #f59e0b; + --error-color: #ef4444; + --info-color: #3b82f6; + + /* 中性色 */ + --text-primary: #1f2937; + --text-secondary: #6b7280; + --text-light: #9ca3af; + --border-color: #e5e7eb; + --bg-primary: #ffffff; + --bg-secondary: #f9fafb; + --bg-dark: #111827; + + /* 阴影 */ + --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); + --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); + --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); + --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); + + /* 圆角 */ + --radius-sm: 0.375rem; + --radius-md: 0.5rem; + --radius-lg: 0.75rem; + --radius-xl: 1rem; + + /* 间距 */ + --spacing-xs: 0.25rem; + --spacing-sm: 0.5rem; + --spacing-md: 1rem; + --spacing-lg: 1.5rem; + --spacing-xl: 2rem; + --spacing-2xl: 3rem; +} + +/* 基础样式 */ +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + line-height: 1.6; + color: var(--text-primary); + background: var(--bg-secondary); + font-size: 16px; +} + +/* 容器样式 */ +.container { + max-width: 1200px; + margin: 0 auto; + padding: 0 var(--spacing-md); +} + +.container-sm { + max-width: 600px; + margin: 0 auto; + padding: 0 var(--spacing-md); +} + +/* 卡片样式 */ +.card { + background: var(--bg-primary); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-md); + padding: var(--spacing-xl); + margin-bottom: var(--spacing-lg); + border: 1px solid var(--border-color); + transition: all 0.3s ease; +} + +.card:hover { + box-shadow: var(--shadow-lg); + transform: translateY(-2px); +} + +.card-header { + margin-bottom: var(--spacing-lg); + padding-bottom: var(--spacing-md); + border-bottom: 2px solid var(--border-color); +} + +.card-title { + font-size: 1.5rem; + font-weight: 600; + color: var(--text-primary); + margin-bottom: var(--spacing-sm); +} + +.card-subtitle { + color: var(--text-secondary); + font-size: 0.875rem; +} + +/* 按钮样式 */ +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0.75rem 1.5rem; + font-size: 0.875rem; + font-weight: 500; + border-radius: var(--radius-md); + border: none; + cursor: pointer; + text-decoration: none; + transition: all 0.2s ease; + min-height: 44px; + gap: var(--spacing-sm); +} + +.btn-primary { + background: var(--primary-gradient); + color: white; + box-shadow: var(--shadow-sm); +} + +.btn-primary:hover { + transform: translateY(-1px); + box-shadow: var(--shadow-md); + filter: brightness(1.05); +} + +.btn-secondary { + background: var(--bg-primary); + color: var(--text-primary); + border: 1px solid var(--border-color); +} + +.btn-secondary:hover { + background: var(--bg-secondary); + border-color: var(--primary-color); +} + +.btn-success { + background: var(--success-color); + color: white; +} + +.btn-warning { + background: var(--warning-color); + color: white; +} + +.btn-danger { + background: var(--error-color); + color: white; +} + +.btn-sm { + padding: 0.5rem 1rem; + font-size: 0.75rem; + min-height: 36px; +} + +.btn-lg { + padding: 1rem 2rem; + font-size: 1rem; + min-height: 52px; +} + +.btn:disabled { + opacity: 0.6; + cursor: not-allowed; + transform: none; +} + +/* 表单样式 */ +.form-group { + margin-bottom: var(--spacing-lg); +} + +.form-label { + display: block; + font-weight: 500; + color: var(--text-primary); + margin-bottom: var(--spacing-sm); + font-size: 0.875rem; +} + +.form-label.required::after { + content: ' *'; + color: var(--error-color); +} + +.form-control { + width: 100%; + padding: 0.75rem; + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + font-size: 0.875rem; + transition: all 0.2s ease; + background: var(--bg-primary); + min-height: 44px; +} + +.form-control:focus { + outline: none; + border-color: var(--primary-color); + box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1); +} + +.form-control:invalid { + border-color: var(--error-color); +} + +textarea.form-control { + resize: vertical; + min-height: 100px; +} + +select.form-control { + cursor: pointer; +} + +/* 复选框样式 */ +.checkbox-group { + display: flex; + flex-direction: column; + gap: var(--spacing-sm); +} + +.checkbox-item { + display: flex; + align-items: center; + gap: var(--spacing-sm); + padding: var(--spacing-sm); + border-radius: var(--radius-sm); + transition: background-color 0.2s ease; +} + +.checkbox-item:hover { + background: var(--bg-secondary); +} + +.checkbox-item input[type="checkbox"] { + width: 18px; + height: 18px; + accent-color: var(--primary-color); +} + +.checkbox-item label { + font-size: 0.875rem; + cursor: pointer; + flex: 1; +} + +/* 警告提示样式 */ +.platform-warning { + background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); + border: 1px solid #f59e0b; + border-radius: var(--radius-md); + padding: var(--spacing-md); + margin-top: var(--spacing-sm); + font-size: 0.75rem; + color: #92400e; + display: none; +} + +.platform-warning.show { + display: block; + animation: slideDown 0.3s ease; +} + +/* 切换按钮样式 */ +.tab-container { + display: flex; + background: var(--bg-secondary); + border-radius: var(--radius-lg); + padding: var(--spacing-xs); + margin-bottom: var(--spacing-xl); + border: 1px solid var(--border-color); +} + +.tab-btn { + flex: 1; + padding: var(--spacing-md); + background: transparent; + border: none; + border-radius: var(--radius-md); + font-weight: 500; + cursor: pointer; + transition: all 0.2s ease; + color: var(--text-secondary); +} + +.tab-btn.active { + background: var(--bg-primary); + color: var(--primary-color); + box-shadow: var(--shadow-sm); +} + +/* 表单内容区域 */ +.form-content { + display: none; +} + +.form-content.active { + display: block; + animation: fadeIn 0.3s ease; +} + +/* 消息提示样式 */ +.alert { + padding: var(--spacing-md); + border-radius: var(--radius-md); + margin-bottom: var(--spacing-lg); + border: 1px solid transparent; + font-size: 0.875rem; +} + +.alert-success { + background: #ecfdf5; + border-color: #10b981; + color: #065f46; +} + +.alert-error { + background: #fef2f2; + border-color: #ef4444; + color: #991b1b; +} + +.alert-warning { + background: #fffbeb; + border-color: #f59e0b; + color: #92400e; +} + +.alert-info { + background: #eff6ff; + border-color: #3b82f6; + color: #1e40af; +} + +/* 加载状态 */ +.loading { + display: inline-flex; + align-items: center; + gap: var(--spacing-sm); +} + +.spinner { + width: 16px; + height: 16px; + border: 2px solid transparent; + border-top: 2px solid currentColor; + border-radius: 50%; + animation: spin 1s linear infinite; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .container { + padding: 0 var(--spacing-sm); + } + + .card { + padding: var(--spacing-lg); + margin-bottom: var(--spacing-md); + } + + .btn { + width: 100%; + justify-content: center; + } + + .tab-container { + flex-direction: column; + } + + .tab-btn { + text-align: center; + } +} + +/* 动画效果 */ +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes slideDown { + from { + opacity: 0; + max-height: 0; + transform: translateY(-10px); + } + to { + opacity: 1; + max-height: 100px; + transform: translateY(0); + } +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +/* 页面头部样式 */ +.page-header { + background: var(--primary-gradient); + color: white; + padding: var(--spacing-2xl) 0; + margin-bottom: var(--spacing-xl); + text-align: center; +} + +.page-title { + font-size: 2.5rem; + font-weight: 700; + margin-bottom: var(--spacing-sm); +} + +.page-subtitle { + font-size: 1.125rem; + opacity: 0.9; + font-weight: 400; +} + +/* 页脚样式 */ +.page-footer { + background: var(--bg-dark); + color: white; + padding: var(--spacing-xl) 0; + margin-top: var(--spacing-2xl); + text-align: center; +} + +.page-footer p { + margin-bottom: var(--spacing-sm); + opacity: 0.8; +} + +/* 工具类 */ +.text-center { text-align: center; } +.text-left { text-align: left; } +.text-right { text-align: right; } + +.mt-0 { margin-top: 0; } +.mt-1 { margin-top: var(--spacing-xs); } +.mt-2 { margin-top: var(--spacing-sm); } +.mt-3 { margin-top: var(--spacing-md); } +.mt-4 { margin-top: var(--spacing-lg); } +.mt-5 { margin-top: var(--spacing-xl); } + +.mb-0 { margin-bottom: 0; } +.mb-1 { margin-bottom: var(--spacing-xs); } +.mb-2 { margin-bottom: var(--spacing-sm); } +.mb-3 { margin-bottom: var(--spacing-md); } +.mb-4 { margin-bottom: var(--spacing-lg); } +.mb-5 { margin-bottom: var(--spacing-xl); } + +.hidden { display: none; } +.block { display: block; } +.inline-block { display: inline-block; } +.flex { display: flex; } +.inline-flex { display: inline-flex; } + +.justify-center { justify-content: center; } +.justify-between { justify-content: space-between; } +.items-center { align-items: center; } + +.w-full { width: 100%; } +.h-full { height: 100%; } + +.opacity-50 { opacity: 0.5; } +.opacity-75 { opacity: 0.75; } + +/* 深色模式支持 */ +@media (prefers-color-scheme: dark) { + :root { + --text-primary: #f9fafb; + --text-secondary: #d1d5db; + --text-light: #9ca3af; + --border-color: #374151; + --bg-primary: #1f2937; + --bg-secondary: #111827; + } + + .card { + border-color: var(--border-color); + } + + .form-control { + background: var(--bg-primary); + border-color: var(--border-color); + color: var(--text-primary); + } + + .btn-secondary { + background: var(--bg-primary); + color: var(--text-primary); + border-color: var(--border-color); + } +} \ No newline at end of file diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100644 index 0000000..3967f38 --- /dev/null +++ b/assets/js/main.js @@ -0,0 +1,612 @@ +/** + * 投稿系统前端交互脚本 + * 提供表单切换、验证、提交等功能 + */ + +// 全局变量 +let currentFormType = 'website'; +let isSubmitting = false; + +// DOM加载完成后初始化 +document.addEventListener('DOMContentLoaded', function() { + initializeApp(); +}); + +/** + * 初始化应用 + */ +function initializeApp() { + initializeFormSwitching(); + initializeFormValidation(); + initializeWebsiteInfoFetching(); + initializePlatformWarnings(); + initializeFormSubmission(); +} + +/** + * 初始化表单切换功能 + */ +function initializeFormSwitching() { + const tabButtons = document.querySelectorAll('.tab-btn'); + const formContents = document.querySelectorAll('.form-content'); + + tabButtons.forEach(button => { + button.addEventListener('click', function() { + const targetForm = this.dataset.form; + switchForm(targetForm); + }); + }); +} + +/** + * 切换表单 + * @param {string} formType - 表单类型 ('website' 或 'app') + */ +function switchForm(formType) { + currentFormType = formType; + + // 更新标签按钮状态 + document.querySelectorAll('.tab-btn').forEach(btn => { + btn.classList.remove('active'); + }); + document.querySelector(`[data-form="${formType}"]`).classList.add('active'); + + // 切换表单内容 + document.querySelectorAll('.form-content').forEach(content => { + content.classList.remove('active'); + }); + document.getElementById(`${formType}-form`).classList.add('active'); + + // 更新必填字段 + updateRequiredFields(formType); + + // 清除之前的错误信息 + clearFormErrors(); +} + +/** + * 更新必填字段 + * @param {string} formType - 表单类型 + */ +function updateRequiredFields(formType) { + // 清除所有必填标记 + document.querySelectorAll('input, textarea, select').forEach(field => { + field.removeAttribute('required'); + }); + + if (formType === 'website') { + // 网址投稿必填字段 + const requiredFields = ['url', 'platforms']; + requiredFields.forEach(fieldName => { + const field = document.querySelector(`[name="${fieldName}"]`); + if (field) { + if (fieldName === 'platforms') { + // 平台选择至少选一个 + const checkboxes = document.querySelectorAll('input[name="platforms[]"]'); + checkboxes.forEach(cb => cb.setAttribute('required', 'required')); + } else { + field.setAttribute('required', 'required'); + } + } + }); + } else if (formType === 'app') { + // APP投稿必填字段 + const requiredFields = ['app_name', 'platform', 'version', 'download_url']; + requiredFields.forEach(fieldName => { + const field = document.querySelector(`[name="${fieldName}"]`); + if (field) { + field.setAttribute('required', 'required'); + } + }); + } +} + +/** + * 初始化表单验证 + */ +function initializeFormValidation() { + // URL格式验证 + const urlInput = document.querySelector('input[name="url"]'); + if (urlInput) { + urlInput.addEventListener('blur', validateURL); + urlInput.addEventListener('input', debounce(validateURL, 500)); + } + + // 平台选择验证 + const platformCheckboxes = document.querySelectorAll('input[name="platforms[]"]'); + platformCheckboxes.forEach(checkbox => { + checkbox.addEventListener('change', validatePlatformSelection); + }); + + // APP表单验证 + const appNameInput = document.querySelector('input[name="app_name"]'); + if (appNameInput) { + appNameInput.addEventListener('blur', validateAppName); + } + + const downloadUrlInput = document.querySelector('input[name="download_url"]'); + if (downloadUrlInput) { + downloadUrlInput.addEventListener('blur', validateDownloadURL); + } +} + +/** + * 验证URL格式 + */ +function validateURL() { + const urlInput = document.querySelector('input[name="url"]'); + const url = urlInput.value.trim(); + + if (!url) return; + + // 自动添加协议 + if (url && !url.match(/^https?:\/\//)) { + urlInput.value = 'https://' + url; + } + + // 验证URL格式 + const urlPattern = /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$/; + + if (!urlPattern.test(urlInput.value)) { + showFieldError(urlInput, '请输入有效的网址格式'); + return false; + } else { + clearFieldError(urlInput); + return true; + } +} + +/** + * 验证平台选择 + */ +function validatePlatformSelection() { + const checkboxes = document.querySelectorAll('input[name="platforms[]"]'); + const checked = Array.from(checkboxes).some(cb => cb.checked); + + if (!checked) { + showFieldError(checkboxes[0].closest('.checkbox-group'), '请至少选择一个收录平台'); + return false; + } else { + clearFieldError(checkboxes[0].closest('.checkbox-group')); + return true; + } +} + +/** + * 验证APP名称 + */ +function validateAppName() { + const appNameInput = document.querySelector('input[name="app_name"]'); + const appName = appNameInput.value.trim(); + + if (appName.length < 2) { + showFieldError(appNameInput, 'APP名称至少需要2个字符'); + return false; + } else { + clearFieldError(appNameInput); + return true; + } +} + +/** + * 验证下载链接 + */ +function validateDownloadURL() { + const downloadUrlInput = document.querySelector('input[name="download_url"]'); + const url = downloadUrlInput.value.trim(); + + if (!url) return; + + const urlPattern = /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$/; + + if (!urlPattern.test(url)) { + showFieldError(downloadUrlInput, '请输入有效的下载链接'); + return false; + } else { + clearFieldError(downloadUrlInput); + return true; + } +} + +/** + * 显示字段错误 + * @param {Element} field - 字段元素 + * @param {string} message - 错误信息 + */ +function showFieldError(field, message) { + clearFieldError(field); + + const errorDiv = document.createElement('div'); + errorDiv.className = 'field-error'; + errorDiv.style.cssText = ` + color: var(--error-color); + font-size: 0.75rem; + margin-top: 0.25rem; + display: flex; + align-items: center; + gap: 0.25rem; + `; + errorDiv.innerHTML = ` + + + + ${message} + `; + + field.style.borderColor = 'var(--error-color)'; + field.parentNode.appendChild(errorDiv); +} + +/** + * 清除字段错误 + * @param {Element} field - 字段元素 + */ +function clearFieldError(field) { + const existingError = field.parentNode.querySelector('.field-error'); + if (existingError) { + existingError.remove(); + } + field.style.borderColor = ''; +} + +/** + * 清除所有表单错误 + */ +function clearFormErrors() { + document.querySelectorAll('.field-error').forEach(error => error.remove()); + document.querySelectorAll('.form-control').forEach(field => { + field.style.borderColor = ''; + }); +} + +/** + * 初始化网站信息获取功能 + */ +function initializeWebsiteInfoFetching() { + const urlInput = document.querySelector('input[name="url"]'); + const fetchBtn = document.querySelector('#fetch-info-btn'); + + if (fetchBtn) { + fetchBtn.addEventListener('click', fetchWebsiteInfo); + } + + if (urlInput) { + urlInput.addEventListener('keypress', function(e) { + if (e.key === 'Enter') { + e.preventDefault(); + fetchWebsiteInfo(); + } + }); + } +} + +/** + * 获取网站信息 + */ +async function fetchWebsiteInfo() { + const urlInput = document.querySelector('input[name="url"]'); + const fetchBtn = document.querySelector('#fetch-info-btn'); + const url = urlInput.value.trim(); + + if (!url) { + showAlert('请先输入网址', 'warning'); + return; + } + + if (!validateURL()) { + return; + } + + // 显示加载状态 + const originalText = fetchBtn.innerHTML; + fetchBtn.innerHTML = ' 获取中...'; + fetchBtn.disabled = true; + + try { + const response = await fetch('api/fetch_website_info.php', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ url: url }) + }); + + const data = await response.json(); + + if (data.success) { + // 填充表单字段 + fillWebsiteInfo(data.data); + showAlert('网站信息获取成功!', 'success'); + } else { + showAlert(data.message || '获取网站信息失败', 'error'); + } + } catch (error) { + console.error('获取网站信息失败:', error); + showAlert('网络错误,请稍后重试', 'error'); + } finally { + // 恢复按钮状态 + fetchBtn.innerHTML = originalText; + fetchBtn.disabled = false; + } +} + +/** + * 填充网站信息到表单 + * @param {Object} info - 网站信息 + */ +function fillWebsiteInfo(info) { + const fields = { + 'site_name': info.title || '', + 'site_description': info.description || '', + 'site_keywords': info.keywords || '' + }; + + Object.entries(fields).forEach(([fieldName, value]) => { + const field = document.querySelector(`[name="${fieldName}"]`); + if (field && value) { + field.value = value; + // 触发输入事件以更新UI + field.dispatchEvent(new Event('input', { bubbles: true })); + } + }); +} + +/** + * 初始化平台警告提示 + */ +function initializePlatformWarnings() { + const platformCheckboxes = document.querySelectorAll('input[name="platforms[]"]'); + + platformCheckboxes.forEach(checkbox => { + checkbox.addEventListener('change', updatePlatformWarnings); + }); +} + +/** + * 更新平台警告提示 + */ +function updatePlatformWarnings() { + const warnings = { + 'zmtwiki': '该平台需要合法合规的内容', + 'ztab': '该平台需要合法合规的内容', + 'soso': '该平台内容审查相当宽松' + }; + + // 清除现有警告 + document.querySelectorAll('.platform-warning').forEach(warning => { + warning.classList.remove('show'); + }); + + // 显示相关警告 + Object.entries(warnings).forEach(([platform, message]) => { + const checkbox = document.querySelector(`input[value="${platform}"]`); + if (checkbox && checkbox.checked) { + showPlatformWarning(platform, message); + } + }); +} + +/** + * 显示平台警告 + * @param {string} platform - 平台名称 + * @param {string} message - 警告信息 + */ +function showPlatformWarning(platform, message) { + let warningDiv = document.querySelector(`#warning-${platform}`); + + if (!warningDiv) { + warningDiv = document.createElement('div'); + warningDiv.id = `warning-${platform}`; + warningDiv.className = 'platform-warning'; + + const checkbox = document.querySelector(`input[value="${platform}"]`); + checkbox.closest('.checkbox-item').appendChild(warningDiv); + } + + warningDiv.innerHTML = ` + + + + ${message} + `; + warningDiv.classList.add('show'); +} + +/** + * 初始化表单提交 + */ +function initializeFormSubmission() { + const form = document.querySelector('#submission-form'); + + if (form) { + form.addEventListener('submit', handleFormSubmission); + } +} + +/** + * 处理表单提交 + * @param {Event} e - 提交事件 + */ +async function handleFormSubmission(e) { + e.preventDefault(); + + if (isSubmitting) return; + + // 验证表单 + if (!validateForm()) { + return; + } + + isSubmitting = true; + const submitBtn = document.querySelector('button[type="submit"]'); + const originalText = submitBtn.innerHTML; + + // 显示提交状态 + submitBtn.innerHTML = ' 提交中...'; + submitBtn.disabled = true; + + try { + const formData = new FormData(e.target); + formData.append('form_type', currentFormType); + + const response = await fetch('', { + method: 'POST', + body: formData + }); + + const result = await response.text(); + + // 检查响应中是否包含成功信息 + if (result.includes('提交成功') || result.includes('success')) { + showAlert('投稿提交成功!我们会尽快审核您的内容。', 'success'); + resetForm(); + } else if (result.includes('已存在') || result.includes('重复')) { + showAlert('该内容已存在,请勿重复提交。', 'warning'); + } else if (result.includes('超出限制') || result.includes('限制')) { + showAlert('今日提交次数已达上限,请明天再试。', 'warning'); + } else { + showAlert('提交失败,请稍后重试。', 'error'); + } + } catch (error) { + console.error('提交失败:', error); + showAlert('网络错误,请稍后重试。', 'error'); + } finally { + // 恢复按钮状态 + isSubmitting = false; + submitBtn.innerHTML = originalText; + submitBtn.disabled = false; + } +} + +/** + * 验证整个表单 + * @returns {boolean} 验证结果 + */ +function validateForm() { + let isValid = true; + + if (currentFormType === 'website') { + if (!validateURL()) isValid = false; + if (!validatePlatformSelection()) isValid = false; + } else if (currentFormType === 'app') { + if (!validateAppName()) isValid = false; + if (!validateDownloadURL()) isValid = false; + } + + return isValid; +} + +/** + * 重置表单 + */ +function resetForm() { + const form = document.querySelector('#submission-form'); + if (form) { + form.reset(); + clearFormErrors(); + + // 清除平台警告 + document.querySelectorAll('.platform-warning').forEach(warning => { + warning.classList.remove('show'); + }); + } +} + +/** + * 显示提示信息 + * @param {string} message - 提示信息 + * @param {string} type - 提示类型 (success, error, warning, info) + */ +function showAlert(message, type = 'info') { + // 移除现有提示 + const existingAlert = document.querySelector('.alert'); + if (existingAlert) { + existingAlert.remove(); + } + + const alertDiv = document.createElement('div'); + alertDiv.className = `alert alert-${type}`; + alertDiv.innerHTML = ` +
+ ${getAlertIcon(type)} + ${message} +
+ `; + + // 插入到表单顶部 + const form = document.querySelector('#submission-form'); + if (form) { + form.insertBefore(alertDiv, form.firstChild); + } + + // 自动隐藏 + setTimeout(() => { + if (alertDiv.parentNode) { + alertDiv.style.opacity = '0'; + alertDiv.style.transform = 'translateY(-10px)'; + setTimeout(() => alertDiv.remove(), 300); + } + }, 5000); +} + +/** + * 获取提示图标 + * @param {string} type - 提示类型 + * @returns {string} SVG图标 + */ +function getAlertIcon(type) { + const icons = { + success: '', + error: '', + warning: '', + info: '' + }; + + return icons[type] || icons.info; +} + +/** + * 防抖函数 + * @param {Function} func - 要防抖的函数 + * @param {number} wait - 等待时间 + * @returns {Function} 防抖后的函数 + */ +function debounce(func, wait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; +} + +/** + * 节流函数 + * @param {Function} func - 要节流的函数 + * @param {number} limit - 限制时间 + * @returns {Function} 节流后的函数 + */ +function throttle(func, limit) { + let inThrottle; + return function() { + const args = arguments; + const context = this; + if (!inThrottle) { + func.apply(context, args); + inThrottle = true; + setTimeout(() => inThrottle = false, limit); + } + }; +} + +// 导出函数供其他脚本使用 +window.SubmissionSystem = { + switchForm, + validateForm, + fetchWebsiteInfo, + showAlert, + resetForm +}; \ No newline at end of file diff --git a/cleanup.php b/cleanup.php new file mode 100644 index 0000000..08b11cd --- /dev/null +++ b/cleanup.php @@ -0,0 +1,231 @@ +db = $database->getConnection(); + } + + /** + * 清理过期的IP限制记录 + * 删除7天前的记录 + */ + public function cleanupIPLimits() { + try { + $sql = "DELETE FROM ip_limits WHERE DATE(last_submit) < DATE_SUB(NOW(), INTERVAL 7 DAY)"; + $stmt = $this->db->prepare($sql); + $result = $stmt->execute(); + + $deletedRows = $stmt->rowCount(); + $this->log("清理IP限制记录: 删除了 {$deletedRows} 条过期记录"); + + return $deletedRows; + } catch (Exception $e) { + $this->log("清理IP限制记录失败: " . $e->getMessage(), 'ERROR'); + return false; + } + } + + /** + * 清理旧的投稿记录 + * 删除6个月前已处理的记录 + */ + public function cleanupOldSubmissions() { + $deletedWebsite = 0; + $deletedApp = 0; + + try { + // 清理网址投稿记录 + $sql = "DELETE FROM website_submissions WHERE status != 'pending' AND DATE(created_at) < DATE_SUB(NOW(), INTERVAL 6 MONTH)"; + $stmt = $this->db->prepare($sql); + $stmt->execute(); + $deletedWebsite = $stmt->rowCount(); + + // 清理APP投稿记录 + $sql = "DELETE FROM app_submissions WHERE status != 'pending' AND DATE(created_at) < DATE_SUB(NOW(), INTERVAL 6 MONTH)"; + $stmt = $this->db->prepare($sql); + $stmt->execute(); + $deletedApp = $stmt->rowCount(); + + $this->log("清理旧投稿记录: 网址投稿 {$deletedWebsite} 条, APP投稿 {$deletedApp} 条"); + + return ['website' => $deletedWebsite, 'app' => $deletedApp]; + } catch (Exception $e) { + $this->log("清理旧投稿记录失败: " . $e->getMessage(), 'ERROR'); + return false; + } + } + + /** + * 优化数据库表 + */ + public function optimizeTables() { + try { + $tables = ['admins', 'website_submissions', 'app_submissions', 'ip_limits']; + + foreach ($tables as $table) { + $sql = "OPTIMIZE TABLE {$table}"; + $stmt = $this->db->prepare($sql); + $stmt->execute(); + } + + $this->log("数据库表优化完成"); + return true; + } catch (Exception $e) { + $this->log("数据库表优化失败: " . $e->getMessage(), 'ERROR'); + return false; + } + } + + /** + * 获取数据库统计信息 + */ + public function getStatistics() { + try { + $stats = []; + + // 统计各表记录数 + $tables = [ + 'website_submissions' => '网址投稿', + 'app_submissions' => 'APP投稿', + 'ip_limits' => 'IP限制记录', + 'admins' => '管理员账户' + ]; + + foreach ($tables as $table => $name) { + $sql = "SELECT COUNT(*) as count FROM {$table}"; + $stmt = $this->db->prepare($sql); + $stmt->execute(); + $result = $stmt->fetch(PDO::FETCH_ASSOC); + $stats[$name] = $result['count']; + } + + // 统计各状态的投稿数量 + $statusStats = []; + $statuses = ['pending' => '待处理', 'approved' => '已通过', 'rejected' => '已拒绝']; + + foreach ($statuses as $status => $name) { + // 网址投稿 + $sql = "SELECT COUNT(*) as count FROM website_submissions WHERE status = ?"; + $stmt = $this->db->prepare($sql); + $stmt->execute([$status]); + $result = $stmt->fetch(PDO::FETCH_ASSOC); + $statusStats["网址投稿-{$name}"] = $result['count']; + + // APP投稿 + $sql = "SELECT COUNT(*) as count FROM app_submissions WHERE status = ?"; + $stmt = $this->db->prepare($sql); + $stmt->execute([$status]); + $result = $stmt->fetch(PDO::FETCH_ASSOC); + $statusStats["APP投稿-{$name}"] = $result['count']; + } + + return array_merge($stats, $statusStats); + } catch (Exception $e) { + $this->log("获取统计信息失败: " . $e->getMessage(), 'ERROR'); + return false; + } + } + + /** + * 记录日志 + */ + private function log($message, $level = 'INFO') { + $timestamp = date('Y-m-d H:i:s'); + $logMessage = "[{$timestamp}] [{$level}] {$message}" . PHP_EOL; + + // 输出到控制台 + echo $logMessage; + + // 写入日志文件 + $logFile = 'data/cleanup.log'; + if (!file_exists('data')) { + mkdir('data', 0755, true); + } + file_put_contents($logFile, $logMessage, FILE_APPEND | LOCK_EX); + } + + /** + * 执行完整的清理流程 + */ + public function runFullCleanup() { + $this->log("开始执行数据清理任务"); + + // 显示清理前的统计信息 + $beforeStats = $this->getStatistics(); + if ($beforeStats) { + $this->log("清理前统计信息:"); + foreach ($beforeStats as $key => $value) { + $this->log(" {$key}: {$value}"); + } + } + + // 执行清理任务 + $ipCleanup = $this->cleanupIPLimits(); + $submissionCleanup = $this->cleanupOldSubmissions(); + $optimize = $this->optimizeTables(); + + // 显示清理后的统计信息 + $afterStats = $this->getStatistics(); + if ($afterStats) { + $this->log("清理后统计信息:"); + foreach ($afterStats as $key => $value) { + $this->log(" {$key}: {$value}"); + } + } + + $this->log("数据清理任务完成"); + + return [ + 'ip_cleanup' => $ipCleanup, + 'submission_cleanup' => $submissionCleanup, + 'optimize' => $optimize, + 'before_stats' => $beforeStats, + 'after_stats' => $afterStats + ]; + } +} + +// 如果直接运行此脚本 +if (php_sapi_name() === 'cli' || !isset($_SERVER['HTTP_HOST'])) { + $cleanup = new DataCleanup(); + $result = $cleanup->runFullCleanup(); + + echo "\n清理任务执行完成!\n"; + if ($result['ip_cleanup'] !== false) { + echo "IP限制记录清理: {$result['ip_cleanup']} 条\n"; + } + if ($result['submission_cleanup'] !== false) { + echo "投稿记录清理: 网址 {$result['submission_cleanup']['website']} 条, APP {$result['submission_cleanup']['app']} 条\n"; + } + echo "数据库优化: " . ($result['optimize'] ? '成功' : '失败') . "\n"; +} else { + // 如果通过Web访问,返回JSON格式结果 + header('Content-Type: application/json; charset=utf-8'); + + // 简单的安全检查 + if (!isset($_GET['token']) || $_GET['token'] !== 'cleanup_token_2024') { + http_response_code(403); + echo json_encode(['error' => '访问被拒绝']); + exit; + } + + $cleanup = new DataCleanup(); + $result = $cleanup->runFullCleanup(); + + echo json_encode([ + 'success' => true, + 'message' => '清理任务执行完成', + 'data' => $result + ], JSON_UNESCAPED_UNICODE); +} +?> \ No newline at end of file diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..a201149 --- /dev/null +++ b/config/database.php @@ -0,0 +1,147 @@ +conn = null; + + try { + if ($this->use_sqlite) { + // SQLite配置 + $this->conn = new PDO('sqlite:' . __DIR__ . '/../data/database.sqlite'); + } else { + // MySQL配置 + $this->conn = new PDO( + "mysql:host=" . $this->host . ";dbname=" . $this->db_name . ";charset=utf8mb4", + $this->username, + $this->password + ); + } + $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + $this->conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); + } catch(PDOException $exception) { + echo "连接失败: " . $exception->getMessage(); + } + + return $this->conn; + } + + public function initDatabase() { + $conn = $this->getConnection(); + + // 创建管理员表 + $admin_table = " + CREATE TABLE IF NOT EXISTS admins ( + id INT AUTO_INCREMENT PRIMARY KEY, + username VARCHAR(50) UNIQUE NOT NULL, + password VARCHAR(255) NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) + "; + + // 创建网址投稿表 + $website_table = " + CREATE TABLE IF NOT EXISTS website_submissions ( + id INT AUTO_INCREMENT PRIMARY KEY, + url VARCHAR(500) NOT NULL, + title VARCHAR(200), + description TEXT, + keywords VARCHAR(500), + platforms TEXT, + contact VARCHAR(100), + ip_address VARCHAR(45) NOT NULL, + status ENUM('pending', 'approved', 'rejected') DEFAULT 'pending', + admin_note TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP + ) + "; + + // 创建APP/软件投稿表 + $app_table = " + CREATE TABLE IF NOT EXISTS app_submissions ( + id INT AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(200) NOT NULL, + platform VARCHAR(100) NOT NULL, + version VARCHAR(50), + icon_url VARCHAR(500), + download_url VARCHAR(500), + website_url VARCHAR(500), + description TEXT, + platforms TEXT, + contact VARCHAR(100), + ip_address VARCHAR(45) NOT NULL, + status ENUM('pending', 'approved', 'rejected') DEFAULT 'pending', + admin_note TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP + ) + "; + + // 创建IP限制表 + $ip_limit_table = " + CREATE TABLE IF NOT EXISTS ip_submissions ( + id INT AUTO_INCREMENT PRIMARY KEY, + ip_address VARCHAR(45) NOT NULL, + submission_date DATE NOT NULL, + count INT DEFAULT 1, + UNIQUE KEY unique_ip_date (ip_address, submission_date) + ) + "; + + if ($this->use_sqlite) { + // SQLite语法调整 + $admin_table = str_replace('AUTO_INCREMENT', '', $admin_table); + $admin_table = str_replace('INT AUTO_INCREMENT PRIMARY KEY', 'INTEGER PRIMARY KEY AUTOINCREMENT', $admin_table); + $admin_table = str_replace('TIMESTAMP DEFAULT CURRENT_TIMESTAMP', 'DATETIME DEFAULT CURRENT_TIMESTAMP', $admin_table); + + $website_table = str_replace('AUTO_INCREMENT', '', $website_table); + $website_table = str_replace('INT AUTO_INCREMENT PRIMARY KEY', 'INTEGER PRIMARY KEY AUTOINCREMENT', $website_table); + $website_table = str_replace('ENUM(\'pending\', \'approved\', \'rejected\')', 'TEXT CHECK(status IN (\'pending\', \'approved\', \'rejected\'))', $website_table); + $website_table = str_replace('TIMESTAMP DEFAULT CURRENT_TIMESTAMP', 'DATETIME DEFAULT CURRENT_TIMESTAMP', $website_table); + $website_table = str_replace('ON UPDATE CURRENT_TIMESTAMP', '', $website_table); + + $app_table = str_replace('AUTO_INCREMENT', '', $app_table); + $app_table = str_replace('INT AUTO_INCREMENT PRIMARY KEY', 'INTEGER PRIMARY KEY AUTOINCREMENT', $app_table); + $app_table = str_replace('ENUM(\'pending\', \'approved\', \'rejected\')', 'TEXT CHECK(status IN (\'pending\', \'approved\', \'rejected\'))', $app_table); + $app_table = str_replace('TIMESTAMP DEFAULT CURRENT_TIMESTAMP', 'DATETIME DEFAULT CURRENT_TIMESTAMP', $app_table); + $app_table = str_replace('ON UPDATE CURRENT_TIMESTAMP', '', $app_table); + + $ip_limit_table = str_replace('AUTO_INCREMENT', '', $ip_limit_table); + $ip_limit_table = str_replace('INT AUTO_INCREMENT PRIMARY KEY', 'INTEGER PRIMARY KEY AUTOINCREMENT', $ip_limit_table); + } + + try { + $conn->exec($admin_table); + $conn->exec($website_table); + $conn->exec($app_table); + $conn->exec($ip_limit_table); + + // 插入默认管理员账户 + $check_admin = $conn->prepare("SELECT COUNT(*) FROM admins WHERE username = 'admin'"); + $check_admin->execute(); + + if ($check_admin->fetchColumn() == 0) { + $default_password = password_hash('admin', PASSWORD_DEFAULT); + $insert_admin = $conn->prepare("INSERT INTO admins (username, password) VALUES ('admin', ?)"); + $insert_admin->execute([$default_password]); + } + + return true; + } catch(PDOException $e) { + echo "数据库初始化失败: " . $e->getMessage(); + return false; + } + } +} +?> \ No newline at end of file diff --git a/includes/utils.php b/includes/utils.php new file mode 100644 index 0000000..e5bfc0d --- /dev/null +++ b/includes/utils.php @@ -0,0 +1,266 @@ +db = $database; + } + + /** + * 获取网站TDK信息 + */ + public function getWebsiteInfo($url) { + // 确保URL包含协议 + if (!preg_match('/^https?:\/\//i', $url)) { + $url = 'http://' . $url; + } + + $result = [ + 'title' => '', + 'description' => '', + 'keywords' => '', + 'url' => $url, + 'success' => false + ]; + + try { + $context = stream_context_create([ + 'http' => [ + 'timeout' => 10, + 'user_agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' + ] + ]); + + $html = @file_get_contents($url, false, $context); + + if ($html === false) { + return $result; + } + + // 转换编码 + $html = mb_convert_encoding($html, 'UTF-8', 'auto'); + + // 解析HTML + $dom = new DOMDocument(); + @$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); + + // 获取title + $titles = $dom->getElementsByTagName('title'); + if ($titles->length > 0) { + $result['title'] = trim($titles->item(0)->textContent); + } + + // 获取meta标签 + $metas = $dom->getElementsByTagName('meta'); + foreach ($metas as $meta) { + $name = $meta->getAttribute('name'); + $property = $meta->getAttribute('property'); + $content = $meta->getAttribute('content'); + + if (strtolower($name) === 'description' || strtolower($property) === 'og:description') { + if (empty($result['description'])) { + $result['description'] = trim($content); + } + } + + if (strtolower($name) === 'keywords') { + $result['keywords'] = trim($content); + } + } + + $result['success'] = true; + + } catch (Exception $e) { + // 静默处理错误 + } + + return $result; + } + + /** + * 检查IP提交限制 + */ + public function checkIPLimit($ip) { + $today = date('Y-m-d'); + + $stmt = $this->db->prepare(" + SELECT count FROM ip_submissions + WHERE ip_address = ? AND submission_date = ? + "); + $stmt->execute([$ip, $today]); + $result = $stmt->fetch(); + + if ($result) { + return $result['count'] < 3; + } + + return true; + } + + /** + * 记录IP提交 + */ + public function recordIPSubmission($ip) { + $today = date('Y-m-d'); + + $stmt = $this->db->prepare(" + INSERT INTO ip_submissions (ip_address, submission_date, count) + VALUES (?, ?, 1) + ON DUPLICATE KEY UPDATE count = count + 1 + "); + + try { + $stmt->execute([$ip, $today]); + } catch (PDOException $e) { + // SQLite兼容处理 + $check = $this->db->prepare(" + SELECT count FROM ip_submissions + WHERE ip_address = ? AND submission_date = ? + "); + $check->execute([$ip, $today]); + $existing = $check->fetch(); + + if ($existing) { + $update = $this->db->prepare(" + UPDATE ip_submissions + SET count = count + 1 + WHERE ip_address = ? AND submission_date = ? + "); + $update->execute([$ip, $today]); + } else { + $insert = $this->db->prepare(" + INSERT INTO ip_submissions (ip_address, submission_date, count) + VALUES (?, ?, 1) + "); + $insert->execute([$ip, $today]); + } + } + } + + /** + * 检查网址重复 + */ + public function checkWebsiteDuplicate($url) { + // 标准化URL + $normalized_url = $this->normalizeUrl($url); + $domain = $this->extractDomain($url); + + $stmt = $this->db->prepare(" + SELECT id FROM website_submissions + WHERE url = ? OR url LIKE ? + "); + $stmt->execute([$normalized_url, '%' . $domain . '%']); + + return $stmt->fetch() !== false; + } + + /** + * 检查APP重复 + */ + public function checkAppDuplicate($name, $platform) { + $stmt = $this->db->prepare(" + SELECT id FROM app_submissions + WHERE name = ? AND platform = ? + "); + $stmt->execute([$name, $platform]); + + return $stmt->fetch() !== false; + } + + /** + * 标准化URL + */ + private function normalizeUrl($url) { + // 移除协议 + $url = preg_replace('/^https?:\/\//i', '', $url); + // 移除www + $url = preg_replace('/^www\./i', '', $url); + // 移除尾部斜杠 + $url = rtrim($url, '/'); + // 转换为小写 + $url = strtolower($url); + + return $url; + } + + /** + * 提取域名 + */ + private function extractDomain($url) { + $parsed = parse_url($url); + $host = isset($parsed['host']) ? $parsed['host'] : $url; + + // 移除www + $host = preg_replace('/^www\./i', '', $host); + + return strtolower($host); + } + + /** + * 获取客户端IP + */ + public static function getClientIP() { + $ip_keys = ['HTTP_X_FORWARDED_FOR', 'HTTP_X_REAL_IP', 'HTTP_CLIENT_IP', 'REMOTE_ADDR']; + + foreach ($ip_keys as $key) { + if (!empty($_SERVER[$key])) { + $ip = $_SERVER[$key]; + if (strpos($ip, ',') !== false) { + $ip = trim(explode(',', $ip)[0]); + } + if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { + return $ip; + } + } + } + + return $_SERVER['REMOTE_ADDR'] ?? '127.0.0.1'; + } + + /** + * 生成验证码 + */ + public static function generateCaptcha() { + session_start(); + + $code = ''; + $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; + for ($i = 0; $i < 4; $i++) { + $code .= $chars[rand(0, strlen($chars) - 1)]; + } + + $_SESSION['captcha'] = $code; + + // 创建图片 + $image = imagecreate(100, 40); + $bg_color = imagecolorallocate($image, 255, 255, 255); + $text_color = imagecolorallocate($image, 0, 0, 0); + $line_color = imagecolorallocate($image, 200, 200, 200); + + // 添加干扰线 + for ($i = 0; $i < 5; $i++) { + imageline($image, rand(0, 100), rand(0, 40), rand(0, 100), rand(0, 40), $line_color); + } + + // 添加文字 + imagestring($image, 5, 25, 12, $code, $text_color); + + header('Content-Type: image/png'); + imagepng($image); + imagedestroy($image); + } + + /** + * 验证验证码 + */ + public static function verifyCaptcha($input) { + session_start(); + return isset($_SESSION['captcha']) && strtoupper($input) === $_SESSION['captcha']; + } +} +?> \ No newline at end of file diff --git a/index.php b/index.php new file mode 100644 index 0000000..f8741a8 --- /dev/null +++ b/index.php @@ -0,0 +1,580 @@ +getConnection(); +$utils = new Utils($db); + +// 初始化数据库 +$database->initDatabase(); + +$message = ''; +$message_type = ''; + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $ip = Utils::getClientIP(); + + // 检查IP限制 + if (!$utils->checkIPLimit($ip)) { + $message = '您今天的提交次数已达上限(3次),请明天再试。'; + $message_type = 'error'; + } else { + $submission_type = $_POST['submission_type'] ?? 'website'; + + if ($submission_type === 'website') { + // 网址投稿处理 + $url = trim($_POST['url'] ?? ''); + $title = trim($_POST['title'] ?? ''); + $description = trim($_POST['description'] ?? ''); + $keywords = trim($_POST['keywords'] ?? ''); + $platforms = isset($_POST['platforms']) ? implode(',', $_POST['platforms']) : ''; + $contact = trim($_POST['contact'] ?? ''); + + if (empty($url)) { + $message = '请输入网址URL。'; + $message_type = 'error'; + } elseif ($utils->checkWebsiteDuplicate($url)) { + $message = '该网址已存在,请勿重复提交。'; + $message_type = 'error'; + } else { + try { + $stmt = $db->prepare(" + INSERT INTO website_submissions (url, title, description, keywords, platforms, contact, ip_address) + VALUES (?, ?, ?, ?, ?, ?, ?) + "); + $stmt->execute([$url, $title, $description, $keywords, $platforms, $contact, $ip]); + + $utils->recordIPSubmission($ip); + $message = '提交成功!我们会尽快审核您的内容。'; + $message_type = 'success'; + } catch (PDOException $e) { + $message = '提交失败,请稍后重试。'; + $message_type = 'error'; + } + } + } else { + // APP投稿处理 + $name = trim($_POST['app_name'] ?? ''); + $platform = trim($_POST['app_platform'] ?? ''); + $version = trim($_POST['app_version'] ?? ''); + $icon_url = trim($_POST['icon_url'] ?? ''); + $download_url = trim($_POST['download_url'] ?? ''); + $website_url = trim($_POST['website_url'] ?? ''); + $description = trim($_POST['app_description'] ?? ''); + $platforms = isset($_POST['platforms']) ? implode(',', $_POST['platforms']) : ''; + $contact = trim($_POST['contact'] ?? ''); + + if (empty($name) || empty($platform)) { + $message = '请填写应用名称和系统平台。'; + $message_type = 'error'; + } elseif ($utils->checkAppDuplicate($name, $platform)) { + $message = '该应用已存在,请勿重复提交。'; + $message_type = 'error'; + } else { + try { + $stmt = $db->prepare(" + INSERT INTO app_submissions (name, platform, version, icon_url, download_url, website_url, description, platforms, contact, ip_address) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + "); + $stmt->execute([$name, $platform, $version, $icon_url, $download_url, $website_url, $description, $platforms, $contact, $ip]); + + $utils->recordIPSubmission($ip); + $message = '提交成功!我们会尽快审核您的内容。'; + $message_type = 'success'; + } catch (PDOException $e) { + $message = '提交失败,请稍后重试。'; + $message_type = 'error'; + } + } + } + } +} +?> + + + + + + + 内容投稿系统 + + + + +
+
+

内容投稿系统

+

分享优质内容,共建互联网生态

+
+ +
+
+ 网址投稿 +
+
+ APP/软件投稿 +
+
+ +
+ +
+ +
+ + +
+ + + +
+
+ +
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+ 提醒:自媒体维基和zTab平台需要合法合规的内容,请确保您提交的内容符合相关法律法规。 +
+
+ 提醒:SOSO平台内容审查相对宽松,但仍需遵守基本的网络道德规范。 +
+
+ +
+ + +
+ +
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/install.php b/install.php new file mode 100644 index 0000000..096d8fd --- /dev/null +++ b/install.php @@ -0,0 +1,478 @@ +getMessage(); + $message_type = 'error'; + } + } elseif ($step == 3) { + // 初始化数据库 + require_once 'config/database.php'; + + $database = new Database(); + if ($database->initDatabase()) { + $message = '数据库初始化成功!'; + $message_type = 'success'; + $step = 4; + } else { + $message = '数据库初始化失败!'; + $message_type = 'error'; + } + } +} + +// 环境检查 +function checkEnvironment() { + $checks = [ + 'PHP版本 >= 7.4' => version_compare(PHP_VERSION, '7.4.0', '>='), + 'PDO扩展' => extension_loaded('pdo'), + 'PDO MySQL扩展' => extension_loaded('pdo_mysql'), + 'PDO SQLite扩展' => extension_loaded('pdo_sqlite'), + 'GD扩展' => extension_loaded('gd'), + 'cURL扩展' => extension_loaded('curl'), + 'config目录可写' => is_writable(__DIR__ . '/config'), + 'data目录可写' => is_writable(__DIR__ . '/data') || mkdir(__DIR__ . '/data', 0755, true) + ]; + + return $checks; +} + +$env_checks = checkEnvironment(); +?> + + + + + + + 安装向导 - 内容投稿系统 + + + + +
+
+

安装向导

+

内容投稿系统安装配置

+
+
1
+
2
+
3
+
4
+
+
+ +
+ +
+ +
+ + + + +

环境检查

+

正在检查服务器环境是否满足运行要求...

+ +
    + $status): ?> +
  • +
    + +
    + +
  • + +
+ + + + +
+ + 环境检查未通过,请先解决上述问题后再继续安装。 +
+ + + + +

数据库配置

+

请选择数据库类型并配置连接信息。

+ +
+
+

MySQL数据库

+

适合生产环境,性能更好,支持并发访问

+
+ +
+

SQLite数据库

+

适合小型站点,无需额外配置,开箱即用

+
+ + + +
+

MySQL配置

+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+

SQLite配置

+

SQLite数据库将自动创建在 data/database.sqlite 文件中,无需额外配置。

+
+ +
+ +
+
+ + + +

初始化数据库

+

数据库连接成功!现在将创建必要的数据表。

+ +
+
+ +
+
+ + + +

安装完成

+
+ + 恭喜!内容投稿系统安装成功! +
+ +

默认管理员账户

+

用户名:admin

+

密码:admin

+

⚠️ 请登录后台后立即修改默认密码!

+ +

下一步操作

+
    +
  • 删除或重命名 install.php 文件以确保安全
  • +
  • 配置Web服务器(如Apache、Nginx)
  • +
  • 设置适当的文件权限
  • +
  • 登录管理后台修改默认密码
  • +
+ + + +
+
+ + + + \ No newline at end of file diff --git a/需求说明.md b/需求说明.md new file mode 100644 index 0000000..8f92990 --- /dev/null +++ b/需求说明.md @@ -0,0 +1,31 @@ +创建一个投稿系统,需求: + +网址投稿系统,能够通过URL快速获取网站的TDK内容,用户在填入网址URL的时候可以兼容http和https的链接。 + +获取的内容可以快速填入网站名称、网站描述、关键词、网址,另外为了细化到具体投稿至哪个平台,可以增加三个可以多选的选项,分别是:自媒体维基、zTab、SOSO;在用户勾选自媒体维基、zTab时提醒用户,该平台需要合法合规的内容;在勾选SOSO时提醒用户该平台内容审查相当宽松。用户可以选择是否留有联系方式,以便我们后续沟通。方便用户提交,无需注册登录就可以提交,但为了安全起见,每天每个IP最多只能提交三次,且数据库里有相同的内容则提示内容已存在;重复检测可以检测域名,二级域名,网址参数(有更好的方案你可以使用)。 + +所以用户表单部分的内容应该是: + +需要获取信息的URL输入框、网站名称、网站描述、网站关键词、收录平台、联系方式、提交。(如果你有好的思路可以补充完善) + +后台可以审核内容,前台提交完成后,可以告诉用户,我们会尽快审核内容。用户提交的内容只会显示在后台和数据库里,通过审核/拒绝的内容不会显示在列表里,默认显示的内容都是待处理的,当然也可以通过选单切换到已经审核的内容,比如审核通过的拒绝的内容。提交页面不会有显示。 + +后台需要账号密码登录,安全起见,需要增加一个验证码的功能;另外为了方便使用,首次登录默认账号/密码为admin/admin,当admin成功登陆到后台后,提示可以修改账户名称和密码,修改完的信息将写入数据库,然后折叠修改区域。 + +整体的样式UI需要参考互联网大厂的设计思路,简洁大气现代,配色方面需要统一性但需要比较前沿的方向设计。 + +补充部分:因为只有网址信息过于单一,可以支持APP、软件的投稿,但投递系统不存储图片和软件包,用户可以在投稿区域切换APP/软件投稿界面。 + +APP/软件的投稿表单需要用户手动填写软件名称、系统平台、版本号、图标地址、下载链接、落地页/官网。(关于这个部分你可以思考后补充。) + +关于APP/软件的投递,后台部分也要分开来显示,网址的部分和APP/软件的不能在同一个列表里显示,因为会导致后台审核区域的信息数据混乱。 + +APP/软件应该是单独的数据表。 + +数据库默认使用MySQL,如果部署的环境配置低,可以支持兼容使用SQLite3。 + +使用开源易部署的方案,我希望整体保持轻量化,我是中学生,所以需要你完成全部的工作。 + +部署方面,我使用的是宝塔面板部署,所以你要考虑到部署的过程和配置教程等。 + +最后写一份完整的readme和开源协议。 \ No newline at end of file