The Ultimate Web Development Course

Learn all the major web technologies in one full stack development project: HTML, CSS, MySQL, PHP, jQuery and AJAX
4.6 (259 ratings)
Instead of using a simple lifetime average, Udemy calculates a
course's star rating by considering a number of different factors
such as the number of ratings, the age of ratings, and the
likelihood of fraudulent ratings.
9,486 students enrolled
Take This Course
  • Lectures 136
  • Length 12 hours
  • Skill Level All Levels
  • Languages English
  • Includes Lifetime access
    30 day money back guarantee!
    Available on iOS and Android
    Certificate of Completion
Wishlisted Wishlist

How taking a course works


Find online courses made by experts from around the world.


Take your courses with you and learn anywhere, anytime.


Learn and practice real-world skills and achieve your goals.

About This Course

Published 8/2013 English

Course Description

"This has been one of the best web courses ever. It should be used as a model by almost anyone thinking of teaching on the web. It has cleared out nearly a decade of web programming cobwebs. The fact you have made a course which is complete end-to-end is impressive. The fact that code examples all work puts nearly every programming book and most web courses to shame."
Paul Wolfson, Principal Investigator, Dallas Legal Technology


"The Ultimate Web Development course is the most user friendly course I have encountered to date. Additionally, the lecturer, Dr. Richard Stibbard is extremely committed and accessible. Oh! If only all the on-line lecturers could take a page from his book."
Urich Wilmot-Hoyte


"Solid Full Stack Development course - I have been through numerous other books and courses trying to get up to speed on CSS, JQuery, Ajax, and PHP, and so far this is the most effective. I think there are two keys to it's success. First, the app developed throughout the course is reasonably complex and whether its a particular look in CSS or behaviour in jQuery, it accurately reflects what modern apps really look like. Next, there is enough hands on coding in all the tools that it really begins to stick. HIghly recommended for anyone wanting broad introduction to modern web development that really touches almost all the bases."
Donald Brummel


Taught by freelance developer and experienced online educator Dr. Richard Stibbard, this course takes you in easy steps through the entire process of building an up-to-date web interface which updates its database and HTML on the fly without the need for page refreshes, rather like the 'Add to Favourites' function on Youtube or Trivago's hotel search.

You will learn how to:

  • structure a website using HTML5
  • apply styling with cascading stylesheets (CSS)
  • convert a static site to a dynamic one using PHP
  • remove inefficient duplicate code
  • use PHP functions to isolate variables
  • use MySQLi and prepared statements for secure database queries
  • manipulate page content immediately with jQuery
  • update the database silently with AJAX
  • upload the project to a web host and deal with important security considerations.
  • PDF version of the course allows full-text search

The course is equally suitable for beginners or more advanced students. For beginners there are step-by-step instructions which take you through every step of the project until all the principles have been covered, and then hand over to assignments which allow you to put into practice what you have learned before you see the solutions.

For learners already familiar with some aspects of web design and development who want to move onto specific points more quickly, incremental working files and clear guidance are provided at every stage, allowing you to skip lessons you do not need and rejoin the course at any point without losing track of the necessary code.

With studio quality audio, widescreen HD video, and incremental versions of the source code, this efficiently organized course teaches up-to-date coding techniques and gives comprehensive coverage of an important aspect of modern web development.

What are the requirements?

  • A computer connected to the internet
  • The ability/permission to download software
  • A text editor (I recommend Komodo Edit, which is free)
  • Enthusiasm!

What am I going to get from this course?

  • Flexible course design allows for complete beginners or more advanced learners
  • Learn HTML5, CSS, MySQL, PHP, jQuery and AJAX in one working project
  • Up-to-date coding standards using mysqli and prepared statements to ensure database security
  • Instant update website - the most modern web interface
  • Detailed coverage of programming logic and dynamic website coding processes
  • Accompanying FREE PDF or Kindle book allows full-text search of the course

Who is the target audience?

  • Anyone interested in web design and development
  • No prior knowledge needed

What you get with this course?

Not for you? No problem.
30 day money back guarantee.

Forever yours.
Lifetime access.

Learn on the go.
Desktop, iOS and Android.

Get rewarded.
Certificate of completion.


Section 1: Course Introduction

Build an instant update database interface with jQuery/AJAX


Section 2: Komodo Text Editor
Komodo Edit is an excellent code editor with many useful features such as intelligent code completion.

This chapter takes you through the process of downloading and installing Komodo Edit, which I use because I like its code completion and syntax highlighting features as well as its preview pane.

If you already have a code editor you like, then feel free to skip this chapter and use your preferred editor for the project.

Download Komodo Edit from

Setting up Komodo Edit with my custom syntax highlighting scheme for more vivid syntax highlighting than the default scheme.
Section 3: Local Webserver Installation

XAMPP is the most popular local webserver package and has versions for Windows, Mac OS, Linux and Solaris.


Step-by-step instructions on downloading and installing XAMPP on a Windows PC.

If you get the error message:

Apache shutdown unexpectedly. This may be due to a blocked port, missing dependencies, improper privileges, a crash, or a shutdown by another method. Press the Logs button to view error logs and check the Windows Event Viewer for more clues

then another program, most commonly Skype, is blocking port 80.

Carry out the following steps to solve the problem:

  1. Start Skype, go to Tools > Options > Advanced > Connection and uncheck “Use port 80 and 443 as alternatives for incoming connections”.
  2. Shut down Skype.
  3. Start up the XAMPP control panel by clicking on c:\xampp\xampp-control.exe.
  4. Check the boxes to set both Apache and MySQL as services.
  5. Restart Windows.

If this does not work, or you do not have Skype installed, carry out the folllowing steps:

  1. Start the XAMPP control panel by clicking on c:\xampp\xampp-control.exe.
  2. Cick on the ‘Config’ button next to Apache and select ‘httpd.conf’ to open the config file in a text editor.
  3. In ‘httpd.conf’, find the line ‘Listen 80′ and change the number to another number, e.g. 86.
  4. In XAMPP control panel, click ‘Stop’ next to Apache, wait for the button to change to ‘Start’ and then click it to restart Apache.
  5. Check the boxes to set both Apache and MySQL as services.

Apache and MySQL should now start automatically and without conflicts.

Troubleshooting XAMPP installation (1)
Troubleshooting XAMPP installation (2)

The timezone for the Apache server is set by default to Berlin time. In this lesson we use the XAMPP Control Panel to change it to your local timezone.

A look at the XAMPP tools and phpMyAdmin. We will use phpMyAdmin much more later on in the course.
Section 4: Bare Bones HTML5
An introduction to some of the new semantic elements in HTML5.
Writing the document structure for our index file, the movies list page.

Writing the HTML document structure for the single movie page.


Writing the HTML document structure for the generic admin page.

3 questions

Test your knowledge of HTML.

Section 5: Styling with CSS
Introduction to Styling with CSS
Before we begin styling, we need to strip out all default styles using a CSS reset stylesheet.

We use classes and IDs to distinguish HTML elements for styling and functional purposes respectively.

We add class names to index.html to distinguish the various parts of the page for later styling.
We write the styles to create the basic box layout for index.html.

Internet Explorer versions 8 and below does not support the new HTML5 elements and garbles our box layout. We solve this by using two scripts, html5-shiv and html5-printshiv.

NB - the link to HTML5Shiv has moved to so please make this change in your version of the project.

Adding the styles for the header and the users and admin navigation lists.
Adding the styles for the favourites and movie list panel

Adding the styles for the footer.

Adding the styles for the single movies page. This time you write the style selectors before I give them to you.
The style selectors for the admin pages - you write the selectors and try to write as many of the style declarations as you can before I give you the answers.
Using a CSS sprite for all or nearly all the background images in a website speeds up page loading by reducing the number of HTTP requests and allowing browsers to used access the image from the cache.
Before going on we need to check that the web pages we have written display properly in the various different browsers. I develop in Firefox and check in Opera, Chrome, Safari, and IE 10, 9 and 8.
Validate HTML
3 questions

Test your knowledge of CSS

Section 6: Essential PHP

‘PHP’ stands for ‘PHP – Hypertext Pre-processor’. Ordinary HTML provides the static framework of a website while PHP gets data from a database to provide dynamic, ever-changing, content.

PHP is desgined to work in combination with HTML. This video demonstrates various ways in which the two can be combined to display strings, variables, and HTML tags.
Sometimes quote marks are themselves part of the string we want to display. We then need to escape these characters so they do not interfere with the syntax of our PHP code.
Conditions are at the heart of all computer programs - they allow our code to do entirely different things depending on the data received.
'Switch' is an alternative to 'if' clauses when there are multiple values to check.
Many programming tasks involve large amounts of repetition, which computers perform well, while humans do not.
Including files within a "parent" file makes our code much more efficient and easier to manage.

Arrays are a type of variable which contains sets of multiple values in a structured list, allowing us to organise related collections of data.

How to get user input passed in the browser address bar.
User input can also be passed less pubicly so that it does not appear in the browser address bar.
Making sure our program fails gracefully if user input is missing.

We use functions to keep our variables from getting out of control.

Using parameters to pass data into functions.
4 questions

Test your knowledge of PHP

Section 7: MySQL in phpMyAdmin

A database  is a structured collection of records, organised in tables, each record consisting of a number of fields. Relational databases use linking tables to make links between tables without duplication of data.


Using phpMyAdmin to create a new database and add tables to it.

The SQL INSERT query.
How to import data from an external SQL file to a database using phpMyAdmin.

Using SQL queries in phpMyAdmin to display records from a database table.


The SQL query in phpMyAdmin to update an existing record in the database.

The more complex SQL select query we will later use to select favourite movies based on two criteria.
Section 8: MySQL in PHP
Connecting to a MySQL database in a PHP script.

How to return all the records from a database using SQL embedded in PHP.

If you get the error "Call to a member function on a non-object", then there is a mismtach between the database column names you have supplied in the PHP and those you have actually used in the table. Double check that you have not, for instance named a column `first_name` when it should be `firstname`.

Backticks (` `), for which the key on a UK/US keyboard is at the top left next to the key for '1', can be used to enclose column names if there is a danger that you have used MySQL reserved words to name database columns. To do so is not good practice and should be avoided. As long as your database column names have no special meaning in MySQL, you do not need to enclose them in backticks.

How to display database records which match a pattern supplied by the user.
This lesson demonstrates how to display all the data from a database without any valid login credentials. This is done by entering a snippet of PHP code into a login form in such a way that the logic of the SQL query is altered.
SQL injection can be prevented by escaping user input so that it is impossible to tamper with the logic of the SQL query.
A better way to prevent SQL injection is to use prepared statements, which prevents user input from interfering with the SQL query.
Making use of code written earlier, we build a simple PHP interface to add data to the database.
You adapt the code from the previous lesson to DELETE instead of INSERTing data.
Section 9: From static HTML to dynamic PHP
Follow the lessons for this chapter in as much detail as you feel you need - after a while you may want to skip ahead using the Working Files if you find I am going too slowly.

I recommend that you complete all the four assignments yourself, however, to check on and reinforce your learning.
Duplicated code is inefficient and difficult to manage. In this lesson we move all duplicated code to included files which means they can be re-used throughout the whole project and any edits made in them take effect across the whole site.

Using PHP includes we create a single parent page which generates either a single movie or a list of movies according to whether a movie is chosen in the URL.

Using the same principle, we create a single parent page which generates both the movies and the users admin pages.
Reusing code from the previous chapter, we connect to the 'movies' database.
In the navigation include file, we replace dummy links with the list of movie-goers drawn from the database.
As the values of variables set in include files are available everywhere in the project, variable conflicts can occur. Using functions solves this problem.

Setting include paths in the parent files, index.php and admin.php, obviates the need to specify the path names of include files and functions.

This function tests whether a valid user_id is set in the URL and returns a code accordingly.
We pass the code returned by the test users function to the show users function, making it possible to display different user lists according to whether or not a user_id is selected.
Parameters set in tell show-users.fn.php which sets of movie-goer data to display to form the complete user navigation menu.
The program alerts the user in the event that a user id is not entered, or one is entered which does not match any records, or a non-numerical id is given.
1 page
Your first major assignment - apply your knowledge to write the code to display the list of favourite movies as a formatted list.
The answer to the assignment - the code for the favourite movies display function.
1 page
Adapt the code you have just written, and combine it with the plain HTML from earlier, to produce the main list of non-favourites with thumbnail images and formatting.
Following the same procedures, we go through the process of building the non-favourites list.
Inserting a personal greeting is a simple matter of adding a new 'case' to the showUsers() function.
The showMovies() function is adapted to display the single movie page.
The principles used to catch errors in the user_id input are applied to the movie_id.
We need to complete our error catching by coping with the possibility that database tables are empty. In this lesson we display an alert message and the movie-goers admin page if there is no data in the movie-goers table.
1 page
Adapt the code we have just written to produce an alert message and display the movies admin page if the movies database table is empty.
Applying the methods used earlier, we catch for the possibility of an empty movies database table.
It is a simple task to produce a custom title for the Favourites list when the list is empty.
Following the same procedure, add a different message at the top of the list of movies according to whether there are any movies in the list or not.
We need a new function to check whether or not the selected movie is a favourite of the selected user and display the appropriate link, "Add to favourites" or "Remove from favourites". You have done everything you need to write this function.
ASSIGNMENT – Putting dynamic data into the movie admin table
1 page

Change dummy data in the movies admin table to dynamic data.

Change dummy data in the movie-goers admin table to dynamic data.
Re-check the pages in the various browsers.
Re-check our HTML at the W3C validation service.

Students Who Viewed This Course Also Viewed

  • Loading
  • Loading
  • Loading

Instructor Biography

Richard Stibbard, Web Developer and Online Educator

I have been working in web development since 2006, building custom database-driven websites from scratch, as well as customizing Moodle sites. Before that, I was a lecturer at the University of Surrey, where I specialized in distance education through the online learning platform WebCT Vista (later Blackboard).

I thus bring to Udemy a wealth of expertise not just in the technical aspects of the course, but also the educational side of online learning. My aim is to deliver courses of supreme clarity which are suitable for a range of learners, and which make learning a pleasure for all my students.

Ready to start learning?
Take This Course