Grundlagen, in einer sinnvollen Reihenfolge sortiert:
1. HTML kennen, wie deine Westentasche. Es ist die Sprache, die die Struktur einer Seite beschreibt, d. H.: Was ist ein Link? Was ist eine Überschrift? Usw. Lerne es gleich richtig, verstehe alle Tags, die du einsetzt und kopiere nicht einfach nur Beispiele. Verwende im Normalfall HTML5. Vergiss die Charset-Deklaration nicht.
2. Du MUSST unbedingt HTTP verstehen, das Protokoll, über das Server (Computer im Internet) und Client (dein heimischer Rechner) miteinander kommunizieren. Das ist essentiell, bevor du über PHP, AJAX, Cookies oder irgendwas auch nur halbwegs kompliziertes nachdenken solltest. In aller Kürze: Der Browser schickt an den Server "Hallo, ich bin der Browser X und ich hätte gerne Informationen über die Ressource unter test.example/foo/bar, ich unterstütze folgende Techniken" Der Server beantwortet die Anfrage mit einem Response-Header und -Content; Theoretisch reicht es für die Basics schon, die entsprechende Wikipediaseite ab hier zu verstehen:
Hypertext Transfer Protocol
Damit einher geht, dass du wissen solltest, was ein URL ist.
3. Du solltest ein bisschen was über Encoding wissen (Was ist UTF-8?)
4. CSS beschreibt wie die Elemente deiner Seite dargestellt werden (Abstände, Farben, Ränder, Schriftarten, -größen, Farbübergänge, Schatten, Hintergrundbilder, usw. usw.)
Bis hierher wird voraussichtlich auch in den nächsten Jahren alles gleich ablaufen, bei den folgenden Punkten mag es sein, dass sich andere Technologien durchsetzen werden, wer weiß (Glaskugel, Glaskugel...):
5. PHP wird hier ziemlich runtergezogen, ist aber eigentlich nicht schlecht. Es ist verbreitet, gut supported und einigermaßen flott. Wichtig für erweiterbare, komplexe Projekte (zu denen jede Seite irgendwann mal wird): Mach es gleich richtig! Arbeite mit Klassen und Objekten, lass dich nicht von Leuten abschrecken, die behaupten, dass sei kompliziert. Die OOP-Funktionalitäten von PHP können sich in aktuellen PHP-Versionen durchaus sehen lassen.
Aber PHP muss auch nicht sein: Python und Ruby sind gute Alternativen.
Das sind alles serverseitige Sprachen. Sie kommen zum Einsatz, bevor der Server das Dokument an den Client schickt, mit ihnen wird der HTML-Quellcode, oder auch der CSS, oder JavaScript-Code, oder Downloads oder was auch immer zum Client geschickt werden soll erstellt/verändert.
6. JavaScript ist eine clientseitige Sprache, d. h. für alles was passieren soll, nachdem der Server das Dokument bereits an den Client ausgeliefert hat. Das können aufpoppende Dialogfenster, Special Effects, oder auch AJAX sein.
Sehr zu empfehlen ist meiner Meinung nach eine JavaScript-Bibliothek, wie zum Beispiel jQuery. Das ist selbst für Einsteiger mit wenig/keiner JavaScript-Erfahrung sehr leicht zu lernen.
7. Datenbanken, z. B. MySQL (sehr weit verbreitet), MariaDB oder PosgreSQL. (Es gibt zwar auch nicht-SQL-Datenbanken, halte ich im Moment aber für nicht so wichtig) Wichtig ist vor allem, die SQL-Syntax zu verstehen, die jeweiligen Implementationen variieren oft nur leicht. Nicht jedes deiner Projekte wird eine Datenbankanbindung brauchen, aber vermutlich viele. Wie bei allem gilt: Lerne es ordentlich! Nicht einfach irgendwelche Datentypen nehmen "die halt funktionieren", sondern immer den besten passenden. Verwende Indizes. Verwende escaping-Funktionen oder prepared statements.
Für die Kommunikation PHP-MySQL empfehle ich PDOs (nicht DBOs wie hier jemand fälschlicherweise schrieb.

)
Fachwissen ist nicht alles, die richtigen Tools sind auch wichtig:
- Benutze als Quellcodeeditor, was deine Arbeit erleichtert und zu dir passt, nicht was "alle nehmen" oder "bei Tests gut abgeschnitten hat". Das kann ein Editor sein, aber auch eine IDE (Ich persönlich verwende Netbeans)
- Verwende ein RCS, wie z. B. git oder Mercurial. Du wirst es lieben, sobald du feststellst: Oh mein Gott, ich muss mit dieser Datei auf den Stand von letztem April zurück!
- Verwende einen Issue Tracker mit Zeiterfassung (Redmine, Trac). Du wirst es lieben, wenn du deinen Kunden Rechnungen schreiben musst, oder wenn du irrsinnig lange Listen mit Anforderungen per Mail bekommst und die sinnvoll verwalten musst
- Integriere dein RCS mit deinem Issue Tracker. Wenn das möglich ist, integriere deine IDE/deinen Editor mit dem ganzen Zeuch. Es wird dir unglaublich viel Arbeit sparen
- Verwende in deinem Browser die Entwicklertools; Alternativ Browserplugins wie FireBug und Co. Sie sind Gold wert, insbesondere für Tests von CSS, Mockups, Fehlersuche usw.
- Teste (zumindest nach größeren Designänderungen) in möglichst vielen unterschiedlichen Browsern
- Emuliere, worin du nicht nativ testen kannst (Android-Emulator wenn dir kein Android-Gerät zur Verfügung steht usw.)
- Was du weder emulieren noch direkt testen kannst, kann ggf. mit einem Dienst wie "BrowserShots" abgedeckt werden
- Ein Color Picker ist erstaunlich oft hilfreich
- Ein Taschenrechner auch
- Zum Upload der Daten auf den Server des Kunden empfehle ich FileZilla (für FTP) oder simples scp