Skip to content

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

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

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

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, truyền token để track ad_click không delay, và bổ sung bắt nút X để mở Shopee + tab bài
  • Cải thiện bố cục mobile: sidebar admin dạng drawer có hamburger, form settings full width, sticky nút “Lưu cài đặt”, và CSS public/mobile cân đối

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 +15 to +18
$stmt = $pdo->prepare('SELECT * FROM articles WHERE slug = :slug LIMIT 1');
$stmt->execute([':slug' => $slug]);
$post = $stmt->fetch();
if ($post) {
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 articles from public slug access

The post page queries by slug without checking status, so hitting /some-slug returns the article even if it is still a draft. That leaks unpublished content to anyone who guesses or receives the slug; the homepage hides drafts but the direct route does not. Add a status='public' constraint (and invalidate the cache) before rendering the page.

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 Protect post deletion with CSRF and POST

The delete endpoint executes on a GET request and never calls verify_csrf, so any webpage visited by a logged-in admin can trigger /admin/post_delete.php?id=... and delete arbitrary articles via a crafted link. Destructive admin actions should require POST and validate the CSRF token to prevent cross-site request forgery.

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