
Build a complete blogger clone using PHP, JavaScript, and MySQL by following an admin interface that manages posts, drafts, labels, pages, and comments.
Set up a web server environment with XAMPP to run PHP and MySQL for building a blog clone, install Apache and MySQL, and start the servers.
Recommend your three code editors for this course: Sublime Text, Visual Studio Code, and Notepad++.
Organize a blogger clone project by creating backend and frontend folders, Ajax files, assets, and a blog content folder, then run a local PHP server on localhost.
Create a PHP login form to access the admin panel, copy assets (css and images) to assets, implement login.php in root, and plan MySQL connection and index.php redirect to login.
Create a blogger database and connect to MySQL with PHP using PDO. Define DSN, host, dbname, user, and password, then handle errors with try/catch and test the connection.
Create a separate file for classes, include it, start a session, define db constants, and reference them in the index.
Create a database class to implement a PDO connection with a MySQL database and access data in your MySQL tables.
Create a database class that exposes a static instance to access PDO methods without instantiating the class. Implement a proxy with __call and call_user_func_array to forward methods to PDO.
Create a users table in the blogger database to store user data, including userID as auto increment primary key, email, password (encrypted), and fullName, using phpMyAdmin and PDO methods.
Create a separate Validate class with static methods to sanitize and validate user inputs, including escape and filterEmail methods using trim, stripslashes, htmlentities, and FILTER_VALIDATE_EMAIL.
Learn to implement an automatic class loader in init.php using spl_autoload_register, loading PHP classes from the classes folder as they are referenced, and test with the Validate class.
Validate the login form to securely process email and password using post data, handle empty fields and errors, and redirect from index to the login page to access the dashboard.
Develop a PHP users class to handle user data, insert new users, and enable login, including a secure emailExist method using PDO prepared statements and bindParam.
Create a login flow by hashing passwords with bcrypt, verifying them with password_verify, and storing the user session to redirect to a dashboard.
Create a public isLoggedIn method in PHP that checks session with $_SESSION['user_id'] using a ternary operator. Redirect the user to the dashboard page with a header call when logged in.
Set up the dashboard page for the Google Blogger clone, display user data and profile image, and implement the backend logic with include init.php, BASE_URL, and a PDO-based userData method.
Learn to create search engine friendly URLs for a Google Blogger clone by configuring Apache's .htaccess with mod_rewrite, rewriting admin/blogID/1/dashboard to dashboard.php and passing blogID as a GET parameter.
Create a blogs table in the blogger clone database to store user blog information, including id, title, description, meta description, comments option, post limit, domain, template, and default template.
Create a reusable PHP method to fetch data from any table in MySQL, using prepared statements, parameter binding, and PDO fetch as object for dynamic blog data retrieval.
Create a new blogsAuth table with authID, blogID, userID, and a role column (author or admin), defaulting to author, and insert a sample admin for blog 1.
Create a dashboard access control method that verifies a user is admin or author of a blog to view their dashboard, using a dashboard class with PDO and blogsAuth checks.
Create a posts table in the blogger database via phpMyAdmin to store blog posts, including postID, title, slug, authorID, blogID, createdDate, updateDate, content, and status (draft or published).
Show how to create a PHP dashboard method to display posts, joining users, filtering by type and status, and formatting the author and date.
Create a new labels table in the database using phpMyAdmin, with id, labelName, postID, and blogID, insert a dummy label, and enable displaying post labels in posts.
Create a getPostLabels method to fetch and display one or more labels for posts from the labels table using postID and blogID, with comma separation and draft status handling.
Create a new public function getLabelsMenu in the dashboard class to fetch labels by blogID using bindParam, execute, and fetchAll, then output label links with data-id for the label menu.
Create a JavaScript function to display and hide the label menu by binding click events to a button, using querySelector and classList.toggle, and hide when clicking outside.
Develop a JavaScript feature that opens a dialog to add labels for selected posts (via checkboxes), validates input with a regex, and prepares an Ajax label update.
Create an Ajax request to submit a new label for a post using form data and blog/post IDs to a PHP file, then handle the response without refreshing the page.
Validate the addLabel.php ajax file by checking post requests, sanitizing input, decoding post IDs, and enforcing that only authors or admins can modify labels with a regex check.
Develop a reusable create method for a PHP MySQL blogger clone to securely insert data into tables like labels and posts using prepared statements and binding.
Create a delete method in the users class to remove label records from the labels table using postID and blogID with a prepared sql delete and bound parameters.
Bind click events to dropdown labels to add or remove a post label. Use data attributes for post and blog IDs and group by to avoid duplicates.
Define the checkAll checkbox, bind a change event, and loop through all post checkboxes to check or uncheck them for bulk editing or deletion.
Develop a JavaScript function to publish posts in bulk by selecting items with checkboxes and clicking a publish button, updating post status and blog IDs in the dashboard.
Implement a publish condition for posts by validating user permissions (admin or author), decoding request data, and updating the post status in the database.
Learn to create an update method for PHP, MySQL, and JavaScript in a Google Blogger clone. Build the update query with fields, conditions, and parameter binding.
Develop a draft post workflow by adding a draft button and draftPosts.php, reusing the publish logic in an ajax flow to set post status to draft.
Create a removePosts.js to enable bulk delete of posts by checkbox, wire it to removePosts.php via AJAX, and implement delete logic for authors and blog admins.
Develop a delete post by link function that binds to the delete button, uses data-post-id and data-blog-id attributes, prompts for confirmation, and processes deletion via ajax.
Create a JavaScript search function for the dashboard to fetch posts by blog id via the search box, triggering on enter to send a php request and update results.
Create a dashboard class method to search posters using a prepared statement with a like on the title, binding the search value and blog id to display matching posters.
Build a reusable PHP method to count posts and pages by type and status in a Google Blogger clone, and display totals on the dashboard.
Learn to conditionally display draft, published, or all posts in a PHP/MySQL blog by using query strings, a status variable, and conditional logic in the dashboard.
Implement a get pages method to count all posts, compute total pages from a post limit, and populate a dropdown with page numbers.
Create a new javascript file to power blog post pagination, enabling next/previous controls, per-page limits, and a dropdown page menu that shows or hides page numbers on demand.
Bind click events to page numbers to fetch posters for the selected page, update the current page, and toggle next/previous buttons for pagination.
Implement pagination by calculating an offset from the current page and a one post per page limit, then fetch and display the correct posts from the database.
Bind the next button to update the current page and display the next page in the Google Blogger clone, while enabling or disabling navigation buttons based on the last page.
Implement a previous page feature in a Google Blogger clone with PHP, MySQL, and JavaScript by mirroring the next-page logic and updating the current page while disabling navigation at bounds.
Create a Google Blogger clone feature that displays posts by a user-selected post limit, binding a change event to update pagination with PHP, MySQL, and JavaScript.
Implement pagination for draft and publish posts by reading the url query string, toggling the active class on drafts and publishes, and updating the post display and controls.
Set up the dashboard to display the blog title and subdomain, fix search button logic with JavaScript, and generate dynamic sidebar links using the base URL and blog ID.
Create a new PHP page file to render blog pages, include necessary components, validate inputs, manage permissions, and fetch and display blog content with templates.
Explore implementing blog pagination in a google blogger clone with php, mysql, and javascript by creating page files, displaying pages, and enabling next and previous navigation.
Implement publish, draft, and delete button functionality on the pages page by including files and wiring actions to update page status, enabling users to publish, draft, or delete posts.
Display the blog comments page, showing published comments with usernames and pending comments for moderation. Integrate front-end components and subdomain logic to navigate blogs and manage comment status.
Create a new comments table in the blog database to store user comments, including id, post_id, blog_id, name, email, comment, status (pending or publish), and date.
Create a method to display comments with pagination by joining comments, posts, and users, showing commenter, post title, date, and status-based actions (publish or delete).
Implement comment pagination in the Google Blogger clone using PHP, MySQL, and JavaScript by reusing post pagination logic to display next and previous comments, control page limit, and disable navigation.
Implement delete functionality for comments by adapting the existing poster deletion logic, adding data attributes, event handling, and permission checks to allow admins or post authors to remove comments.
Make the comment delete button work by deleting a comment via a link, extracting the comment id, and sending a request to remove it with PHP and JavaScript.
Create a new pending comments page by adding a dedicated file and routing rule, adapting the published comments logic to show pending items with pagination.
Build a publish comments feature for pending comments by adding a publish button and checkbox, enabling selected comments to be published via JavaScript and PHP.
Learn to publish a pending blog comment by clicking a publish link, using data attributes and a click event to send a publish request and update the pending list.
Configure a settings page to update blog settings and manage posts per page in a Google Blogger clone. Implement pagination for posters and comments using PHP, MySQL, and JavaScript.
Create a settings page feature to update a blog title using PHP, MySQL, and JavaScript. Validate input, update by blog id via admin actions, and reflect changes.
Develop a function to update the blog description in a Google Blogger clone; display a text area, validate length, save changes via PHP, MySQL, and JavaScript, and refresh the description.
Develop a PHP method to display the author list for a blog in a Google Blogger clone, by querying blogs and users tables with the blog id.
Create and manage a blog author section with a JavaScript file that toggles a hidden form, validates email, name, password, confirm password, and image, and shows per-field errors.
Bind a change event to the file input, validate the extension with a regex, and use a FileReader to show a preview image before upload.
Learn to wire the cancel button in the author section, hide the form, and clear fields, then trigger an Ajax request to create a user with email, name, and password.
Learn to insert a blog author by validating form data, handling post requests, and creating user and blog author records with email, password, and profile image, including permission checks.
Create a JavaScript function to display the author permissions menu and change user permissions via a dropdown. Bind click events and toggle the dropdown visibility with a dedicated script.
Develop a permission change flow for blog authors by validating roles, sending updates with blog and author IDs, and updating the author’s role in the database.
Implement a delete author feature: add a close-icon button, bind click events, pass blog and author IDs to a PHP endpoint, confirm action, and enforce admin rights.
Implement a function to update the meta description in a Google Blogger clone, using PHP, MySQL, and JavaScript to save and display the description from a database.
Develop a js function to update the post limit via settings, fetch the limit from the database, validate input, and save to the blogs table with an ajax call.
Implement a method to update custom errors in blog settings using Ajax, text areas, and dynamic display, updating the database with PHP, MySQL, and JavaScript.
Create a PHP, MySQL, and JavaScript based method to update comment moderation. Use radio buttons to set always or never, update the database, and refresh the settings page.
Create a Google Blogger clone that lets users update email, full name, and profile image, with validation and error handling using PHP, MySQL, and JavaScript.
Develop a password update feature for a Google Blogger clone using PHP, MySQL, and JavaScript, with form validation and password hashing.
Create a logout page that includes the back-end file, destroys the session, and unsets the user session. Redirect to the homepage and test the dashboard link to confirm successful logout.
Develop a blog display system by building a blog class that renders a user's blog using a default template, including the header, navigation gadgets, blog posts, and a sidebar.
Set up subdomains on localhost to run multiple blogs with unique subdomain names by editing the hosts file and configuring Apache's virtual hosts, including wildcard subdomains for local testing.
Learn to fetch and display blog data using subdomains in a PHP MySQL app, including matching subdomains, retrieving blog content, and rendering meta descriptions in templates.
Create a custom 404 error page for the blog, wire it into your PHP project, implement subdomain checks with redirects, including a redirect to the login page.
Create a get_block_posters method to fetch published posts from the posters table, join with user data, and render post titles, dates, first image, and excerpts in the blog template.
Create a method to display post images as thumbnails, using a default image when none exists, and extract image tags with a regex for rendering in blog posts.
Create a dedicated post page to display blog post data, including content and comments, and configure URL rewriting to route requests to the post page using the post slug.
Learn to create a method to fetch post data by slug, joining with user data, and render the post on the post page, enabling dynamic blog posts.
Learn to display post data and associated polls on the post page by fetching by slug, formatting the date, and showing post title, content, and author profile image.
Develop a method to display post labels on the post page by reusing the dashboard label logic, generating links like /labels/{label}, and passing post and blog IDs.
Create a gadgets table to store blog widgets and display them on the blog's sidebar or header, with fields for gadget name, blog id, type, and display position.
Build and display a header gadget for a blogger clone by creating a PHP class, retrieving blog data, decoding gadget content, and rendering the header in the blog layout.
Create a new method in the layout class to display the navigation gadget in the blogger template by fetching gadget data from the gadgets table and rendering multiple navigation links.
Check for a subdomain and dynamically replace the blog link with the subdomain in the template, ensuring links point to the correct blog domain.
Learn to create a public function to fetch and display level posts by joining post, user, level, and label tables, and build post links with slug and author info.
Implement a method to display label posts on a post page using PHP and MySQL, including URL rewriting, level parameter handling, and custom error display.
Build and display sidebar gadgets for a Google Blogger clone by creating a get search gadget method, querying the gadget table, ordering by position, and rendering on the sidebar.
Learn to build a labels gadget that fetches blog labels for the sidebar with PHP and MySQL, groups by label name, and displays each label linked to a level.
Create an html javascript gadget to display ads or html code in your blog by copying the method, renaming it, and integrating it into your blogger template.
Develop a list widget for the sidebar that displays blog links by creating a public function and configuring the list gadget to render links, using PHP, MySQL, and JavaScript.
Develop and display an author profile as a sidebar gadget for a blog, wiring profile data and social media links via PHP, with a reusable profile gadget.
Implement a top posts method to render the right sidebar gadget, fetching recent posts with a limit, joining related data, and displaying post titles and thumbnails.
Create a method to display footer gadgets by reusing the existing sidebar function, adapting it to show gadgets in the photo section with updated display logic and labels.
Display the label post title when a label is clicked, fix image handling by removing image tags from previews, and render the sidebar and the footer.
Make the search gadget work by wiring the search box to redirect to the post page with the query, using a JavaScript snippet to fetch input and display posters.
Create a PHP blog class method to display search posts by keyword using a SQL like query. Join user data and show published results.
Limit post text previews by using a substring function to display the first 500 characters of each post, while making content readable and removing specific tags.
Implement a public method to display the comment form for a post in the Google blogger clone, echoing the form and wiring blog and post IDs for submission.
Create a get_comments method to fetch published comments for a post, bind post data, and render each comment with author, avatar, and total comment count.
Create a new public method to fetch and display replies to comments on a blog post, updating the replied column and rendering each reply with user name and avatar.
Learn to implement a blog post comment feature using PHP, MySQL, and JavaScript, including form handling, client-side validation, and saving comments with status to the database.
Learn to implement a blog post comment reply feature by wiring a reply button, displaying a dynamic form, and posting replies with data attributes.
Build a new post page for a Google Blogger clone using PHP, MySQL, and JavaScript. Integrate the Quill editor to write blog posts.
Display the labels on the new post page, loading and showing labels from the labels table so users can select and edit post tags for their blog.
Learn to create a JavaScript method that watches the title input and generates a permalink slug with custom or automatic options and a one-second typing delay.
Generate a post slug from the title and integrate it into the flow, with slug normalization and post-id handling for a Google Blogger clone built with PHP, MySQL, and JavaScript.
Learn to use JavaScript to conditionally show a custom link option in a Google Blogger clone by binding change events and updating the title and post area.
Validate a custom url input field in a Google Blogger clone using live slug generation with a regex that allows letters, numbers, and hyphens, plus real-time error messaging.
Create an ajax-driven post submission flow that captures blog id, title, description, slug and labels, validates the title, posts to the database, and redirects to the dashboard.
Create a publish post method by validating permissions, collecting title, content, and slug from the editor, and inserting the post linked to blog and user ids with published status.
Add a save button to a new post to save drafts before publishing, reusing the publish logic and updating the post status to draft.
Create a new edit post page to load post data, display title, content, image, and labels, and enable publish or update actions.
Copy and adapt update post methods in PHP and MySQL, update post title, description, content, blog id, and labels, and integrate with the JavaScript front end to publish edits.
Add an ajax-driven draft toggle to the edit post page of a Google Blogger clone, converting published posts to drafts by updating the post status and refreshing the page.
Implement a JavaScript function to upload images from the editor via an Ajax request and display the uploaded image in the post at the current cursor position.
Upload an image to display inside the post editor using the upload image function, handle the file input, and render the uploaded image in the editor.
Create a new blog page by duplicating the post workflow and adding a new page file with image upload and link setup.
Create a new blog page edit interface by reusing the post edit page code, adding description, blog id, subdomain, image selection, and a publish/update workflow with save logic.
Create a layout page to display and arrange blog gadgets, edit labels and positions, and render navigation and sidebar gadgets using PHP code, JSON-encoded content.
Show sidebar gadgets by adding a layout method that fetches blog data, retrieves gadgets, and renders them on the sidebar with delete options and data attributes for blog id.
Display footer gadgets by conditionally rendering the first gadget in the blog footer, checking gadget existence, and echoing embeddable title and caption in the correct positions.
Implement drag-and-drop for gadgets in the Google Blogger clone, enabling repositioning by dragging to a target area, using data attributes to track gadget IDs, and saving the new positions.
Create and bind a save arrangement method to capture gadget positions after dragging, update the database when clicking the save arrangement button, then refresh to confirm.
Design a gadget list page that opens a popup showing gadgets from the blog, using data attributes for area and position and a gadget form to add new items.
Display the gadget list in a pop-up and implement a click event on the add gadget button to show a form and capture time, area, and position.
Display gadget form inline when users click the aid button, using time and type checks to render the appropriate form inside the page, with cancel to close.
Create a method to insert a popular posts gadget in a Google Blogger clone using PHP, MySQL, and JavaScript, wiring the button to capture blog id, area, and position.
Develop and integrate a search gadget into the blog by creating the gadget caption, wiring the sidebar display, and implementing a save function with JavaScript to attach the gadget.
Create a method to add an HTML JavaScript gadget to a blog by reusing the existing save method, wiring the save button and form data, and displaying the gadget content.
Create a profile gadget for the blog by building a method that collects social media links, updates data attributes, and renders the profile section using php, mysql, and js.
Develop a levels gadget by wiring an input and safety button, copying and adapting the existing gadget method, updating data attributes, and rendering the new label in the levels interface.
Develop a JavaScript function to add lists gadget by collecting title and site inputs, generating and displaying a link, and enabling delete actions with error handling.
Build a Google Blogger clone using PHP, MySQL, and JavaScript by creating a list gadget that fetches links via ajax and renders them.
Bind a click event to each gadget's delete link, show a confirmation prompt, and remove the gadget from the page after deleting it.
Enable users to edit gadgets by clicking an edit link that opens a popup form and loads gadget data for editing.
Display gadget data on the edit gadget page by preloading title, content, and social links, and render blog links with edit and delete actions.
Edit the header and navigation gadgets from the layout page, fix typos in the profile gadget, and enable updating the blog title and description while displaying all links.
Create and update the header and navigation gadgets by implementing a method to edit the blog title and description, validating inputs, and ensuring the updated values save correctly.
Absolutely Complete PHP Master Course
I’ve created this Google Multi Blogging platform: High-end PHP, JavaScript, PDO, MySQL Course. This course includes a PHP Project Building a Content Management System Like Blogger which is one of the most famous blogging platforms on the Internet.
Apart from WordPress, Blogger is quite challenging to make. It doesn't matter if you're a beginner or an experienced programmer, you just have to know the basics of PHP, MySQL, HTML, CSS and JavaScript.
What Will You Learn!
In this course you will learn PHP,JavaScript, MYSQL, PDO ,By creating step by step CMS featuring most of the aspects of Multi Blogging from scratch to complete in pure PHP and vanilla JS.
There are lots of features but here are some of them.
Subdomain for Each Blogs
Template Engine
Template Editor and Edit live Template
Gadgets/Widgets Drag and Drop for Layout Page
Front Blog Template
And much more (“You can read entire list below”)
I’m a web developer just like you and constantly learning and improving my PHP skill and knowledge has given me the ability to make money online by just staying at home.
Learning Is a key aspect of anything , A web programming language like PHP can allow anyone to earn literally valuable income online.
Just Take My Course and MASTER IT! and learn everything that I've taught. Once you learn you will be able to build web applications, Content Management systems like WordPress, Blogger, Tumblr, or even you can make your own social networking websites like Twitter, Facebook etc..
PHP is one of the MOST FAMOUS and The Most Popular Web programming languages to learn, Because the majority of websites and applications are based on PHP.
You can easily find a job or work at home on websites like Odesk or UpWork as a freelance web developer.
Some of my students review this course.
Highly Rec
I highly recommend this course, Aizaz teaching php mysql and js on really interesting project which called blogger, if i making some mistakes or do not understand some things, Aizaz help me always correct my mistakes and explain things that i want to understand.
Fantastic PHP course
fantastic course with very unique php mysql project build, i am very happy to find this, learn so much in each video! The instructor is very responsive and kind, help me the same day! Good work 5 stars professional course!!
Incredible course
Wow, instructor in exuberant state, enjoyed the way he presents the course that teaches to build real life projects that helps to upgrade skills for students like us. Keep it up ? , I hope to see API development course in future, with a real life project, not only project but also with full of explanation (theory part, with the way to architect API). Thank you so much for making such incredible the course.
Up to Date Course for PHP *
I'm so excited to take this course! The instructor seems really engaging the content seems up to date for PHP, and he speaks with a clear voice that I can understand. I'm sure I will love this course as I go through it! I've been looking all over for a good well-rounded course on PHP, but they're either to short or so disorganized that it's hard to follow and stay motivated. Wish me luck and I wish anyone else luck that decides on this course! :)
Support
By taking this course you will get my full support. I’m always loved to help my students (could be you). I’ve answered all that question that students asked so far. I’m always in ninja mood, if there’s been question it’ll be answered within an hour or few. By all this mean is if you have any error. I'll be happy to check codes, errors.
This PHP Course Covers the following
• Admin panel / Dashboard In PHP
• Multi Blog System In PHP
• Subdomain for Each Blogs In PHP
• Pageviews Stats Analytics System In PHP
• Template Engine In PHP
• Template Editor and Edit live Template In PHP
• Drag and Drop System for Gadgets/Widgets In PHP
• System in PHP for Changeable Positions for Gadgets/Widgets In PHP
• Build Post / Page System In PHP
• Build Admin / Author roles
• Login / Signup System | Form Submissions in PHP
• Blog Comments System in PHP
• Pending Comments System in PHP
• Publish Comments System in PHP
• Draft Posts System in PHP
• Publish Posts System in PHP
• Draft Pages System in PHP
• Publish Pages System in PHP
• Post Editor in PHP
• New Page Editor in PHP
• Front Blog Template in PHP
• Blog Settings Page in PHP
• User Profiles Page in PHP
•And Much More…..
The ASTONISHING & AMAZING BLOGGER CMS project we build, you will Gain all the SKILLS to earn the job you want or project you crave to build. This is a absolute real project that we take online and I’ll be here to answer any question you have.
Please look at all the lectures to see more things that are covered.