Picking up smaller projects or projects that are on the simpler end of the spectrum are increasing hard to come by nowadays. For me, I did learn much while doing my own projects and while doing projects for others. Doing projects for others can backfire on you, especially if you take on more than you are capable (or capable of learning quickly). If you still want to take that approach, I highly recommend thoroughly going the requirements for the project before hand.
Learning programming. I recommend developing you coding practices. Building your own suite of tools, libraries, classes, functions, etc. that you will use as standard in projects. If you want to utilize frameworks, I would recommend learning without frameworks first. This way you can weight the pros and cons of using them or not. In term of JavaScript, I learned JavaScript before there was jQuery and the like. In my more recent projects, I weighed the needs to use frameworks or not. In both projects, frameworks made no sense. One project was too small to require it, and the other too big (800kb). And in both cases, I developed my own frameworks for each project. Back in the day, we developed are own shims/polyfills (back when there really wasn't a term for it) to make our scripts work in different browsers. I am more accustomed to this coding practice, so I tend to use shims from github and MDN instead of opting to use frameworks. I don't particularly hate frameworks, there are some very good examples of how frameworks can be best utilized (examples: battlefield's battelog, facebook, etc.).
A few great ways to learn and develop you experience is to port scripts (i.e. python to PHP, ASP to PHP, etc.), rewrite scripts and experiment. Porting allows you to learn the basics of other languages. Both offer you a means to hone your skills without the need to take on projects. I still do a lot or rewriting from time to time, I'll come across a script and I'm like "wtf is this #$%@?! I could code that better." Most of my rewritten code sits idle on my testing server, I look to them from time to time for different ideas. There is still a lot of room in web development and in web sites, to develop new ideas. As well as develop better or different concepts already in practice (i.e. google, facebook, etc.).
I've learned a lot in web development over the years. I am now rounding out some of the areas that I don't have much experience in or some key, core concepts that I skimmed through or completely skipped (API development, object patterns, design patterns, more thorough exploration of application design). Also, there is a lot of interchangeable or universal concepts that are worth learning, like API design, UI design, application development, OOP, etc. Even some concepts that apply or are explained in different languages can apply to the languages that you learn/use.
As for good resources for learning. I've found that the PHP manual to be a great resource for PHP (some of the user comments are very useful). The MySQL manual is good (some of the user comments are really bad, typically complains about edge-case scenarios brought on by bad database design). For JavaScript the MDN is great (would've loved this resource back when I was learning), the ECMA standard docs I would not recommend, these docs are typically done in a very technical, cut and dry, documentation style that can be hard to read or decipher. The W3C specification pages are good, the documentation has improved greatly compared to spec docs of the past. Some may ague that w3school's site to be great, I typically use it for a quick glance thru for basic info. stackoverflow.com is great especially when you run into complex problems, 9 times out of 10 its on there.
Problem solving and patience is by far the most important tools in web development. You will run into errors and failure before you have a working and functional project. All in all, don't give up, the more problems you encounter the sweeter the success will be.