I'm confused on what the difference is between progressive enhancement and graceful degradation. To me they seem like the same thing.
Can you please explain to me the differences between the two and in which situation I would use one over the other?
They are almost exactly the same thing, but they differ in context.
There is a class of browsers called "A Grade Browsers". These are your typical audience members that (probably) make up the majority of your visitors. You'll start with a baseline of these users. Call this best modern practices.
If you want to enhance the experience for anyone happening to use Firefox 3.6 or Safari 4 or some other whizbang developer nightly WebKit what have you, you'll want to do awesome things like
These make your site kick-ass looking, but won't break it. This is progressive enhancement. Embracing the future from the point of best practices.
On the other hand, your niche Nintendo site attracts a fair number of Internet Explorer 5 users. Poor you, but you also want to make sure they keep coming back. You might provide an alternative to your Ajax behavior by including the Ajax script in an external file and if their JavaScript isn't turned on, maybe your links update the whole page. Etc. From the point of view of best modern practices, you're making sure that certain historical markets are being catered by some semblance of a functional site. This is graceful degradation.
They are mostly identical, but they differ in terms of priority for many development teams: progressive enhancement is quite nice if you have the time, but graceful degradation is often necessary.