Skip to content

Create PHP news site with admin dashboard and Shopee ad flow#34

Open
huzely wants to merge 1 commit intomasterfrom
codex/create-complete-news-website-oj5d2o
Open

Create PHP news site with admin dashboard and Shopee ad flow#34
huzely wants to merge 1 commit intomasterfrom
codex/create-complete-news-website-oj5d2o

Conversation

@huzely
Copy link
Copy Markdown
Owner

@huzely huzely commented Dec 29, 2025

Summary

  • Build public news site with slug-based routing, multi-theme UI, Shopee overlay ad flow, and caching
  • Add Vietnamese admin panel for login, CRUD bài viết, cài đặt, thống kê, copy link, và đổi theme/logo/banner
  • Implement PDO database schema, tracking API với rate-limit, Telegram queue, và cơ chế lỗi/log thân thiện
  • Refine Shopee overlay theo đặc tả (bypass ?ad=0, giữ affiliate, chạy trên click slug và truy cập trực tiếp), gộp thông báo click qua Telegram, và truyền token để track ad_click không delay
  • Bổ sung thống kê ngày/tháng + reset, API stats mở rộng, cập nhật README và sửa khởi tạo session để tránh cảnh báo trên hosting

Testing

  • find public_html -name '*.php' -print0 | xargs -0 -n1 php -l

Codex Task

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +14 to +17
if (!$post) {
$stmt = $pdo->prepare('SELECT * FROM articles WHERE slug = :slug LIMIT 1');
$stmt->execute([':slug' => $slug]);
$post = $stmt->fetch();
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Restrict draft posts from public access

The post page loads any article by slug without checking status, so unpublished drafts are rendered to anyone who knows or guesses the slug. Because new articles default to draft, a public request to /some-slug will reveal the draft content even though it was never published. Filter by status='public' or require authentication before serving the article.

Useful? React with 👍 / 👎.

Comment on lines +9 to +11
$id = (int)($_GET['id'] ?? 0);
$stmt = $pdo->prepare('DELETE FROM articles WHERE id = :id');
$stmt->execute([':id' => $id]);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Add CSRF protection to post deletion

The delete endpoint deletes articles on a GET request without validating a CSRF token. A malicious page can therefore embed an image or link to /admin/post_delete.php?id=… and, if an admin is logged in, their browser will delete the post without consent. Destructive actions should be POST-only with CSRF verification to prevent cross-site deletes.

Useful? React with 👍 / 👎.

Comment on lines +11 to +15
'CACHE_TTL' => 60,
'TELEGRAM_BOT_TOKEN' => '',
'TELEGRAM_ADMIN_CHAT_ID' => '',
'APP_DEBUG' => true,
'LOG_PATH' => __DIR__ . '/logs/app.log',
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Move error log out of the public web root

Error logging is configured to write to public_html/logs/app.log, which sits under the publicly served web root and is not blocked by .htaccess, so anyone can download server error logs (including stack traces and DB errors) via /logs/app.log when APP_DEBUG is off. Store logs outside the document root or deny HTTP access to that path to avoid leaking sensitive information.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant