concevez voter site web avec php et mysql · concevez votre site web avecphp et mysql concevez...

31
CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Mathieu Nebra 3 e édition

Upload: ledat

Post on 12-Sep-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

CONCEVEZ VOTRE SITE WEB AVEC

PHP et MYSQL

CONCEVEZ VOTRE SITE WEB AVEC

PHP et MYSQLVous connaissez le HTML et vous avez toujours rêvé de créer un site web dynamique, avec votre propre blog, vos forums et votre espace membres ? Ne cherchez plus ! Découvrez dans cet ouvrage dédié aux débutants comment utiliser les outils les plus célèbres du web dynamique : PHP et MySQL !

Qu’allez-vous apprendre ?Les bases de PHP

Les variables et conditions

Les boucles, tableaux et fonctions

Au secours ! Mon script plante !

Inclure des portions de page

Transmettre des données de page en page

• Transmettre des données avec l’URLet les formulaires

• TP : protéger une page par mot de passe

• Variables superglobales

• Sessions et cookies

• Lire et écrire dans un fichier

Stocker des informations dans une base de données

• phpMyAdmin

• Lire et écrire des données

• TP : un minichat

• Les fonctions et les dates en SQL

• TP : un blog avec des commentaires

• Les jointures entre tables

Aller plus loin avec PHP

• Créer et manipuler des images en PHP

• Les expressions régulières

• TP : créer un espace membres

Annexes

• Publier son site sur le Web

• Protéger un dossier avec un .htaccess

• Mémento des expressions régulières

À propos de l’auteurCo-fondateur d’OpenClassrooms, Mathieu Nebra se passionne depuis l’âge de 13 ans pour la créa-tion de cours en ligne. Son objectif : partager la connaissance d’une façon nouvelle, chaleureuse et enfin accessible à tous. Auteur de plusieurs best-sellers, il publie régulièrement des cours en ligne et expérimente de nouvelles approches pédagogiques avec la communauté de plus d’un million de membres qu’il a fédérée.

L’esprit d’OpenClassroomsDes cours ouverts, riches et vivants, conçus pour tous les niveaux et accessibles à tous gratuitement sur notre plate-forme d’e-éducation : www.openc lassrooms.com. Vous y v iv rez une véritable expérience communautaire de l’apprentissage, permettant à chacun d’apprendre avec le soutien et l’aide des autres étudiants sur les forums. Vous profiterez des cours disponibles partout, tout le temps.

ISB

N :

978-

2-21

2-67

475-

0

PHP e

t MYS

QL

Mathieu Nebra

Mat

hieu

Neb

ra

3e édition

3e édition

3e édi

tion

CON

CEVE

Z VO

TRE

SITE

WEB

AVE

C

G14475_ConcevezVotreSiteWebEnPHPetMySQL 2.indd 1 21/09/2017 15:03

Page 2: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

CONCEVEZ VOTRE SITE WEB AVEC

PHP et MYSQL

CONCEVEZ VOTRE SITE WEB AVEC

PHP et MYSQLVous connaissez le HTML et vous avez toujours rêvé de créer un site web dynamique, avec votre propre blog, vos forums et votre espace membres ? Ne cherchez plus ! Découvrez dans cet ouvrage dédié aux débutants comment utiliser les outils les plus célèbres du web dynamique : PHP et MySQL !

Qu’allez-vous apprendre ?Les bases de PHP

Les variables et conditions

Les boucles, tableaux et fonctions

Au secours ! Mon script plante !

Inclure des portions de page

Transmettre des données de page en page

• Transmettre des données avec l’URLet les formulaires

• TP : protéger une page par mot de passe

• Variables superglobales

• Sessions et cookies

• Lire et écrire dans un fichier

Stocker des informations dans une base de données

• phpMyAdmin

• Lire et écrire des données

• TP : un minichat

• Les fonctions et les dates en SQL

• TP : un blog avec des commentaires

• Les jointures entre tables

Aller plus loin avec PHP

• Créer et manipuler des images en PHP

• Les expressions régulières

• TP : créer un espace membres

Annexes

• Publier son site sur le Web

• Protéger un dossier avec un .htaccess

• Mémento des expressions régulières

À propos de l’auteurCo-fondateur d’OpenClassrooms, Mathieu Nebra se passionne depuis l’âge de 13 ans pour la créa-tion de cours en ligne. Son objectif : partager la connaissance d’une façon nouvelle, chaleureuse et enfin accessible à tous. Auteur de plusieurs best-sellers, il publie régulièrement des cours en ligne et expérimente de nouvelles approches pédagogiques avec la communauté de plus d’un million de membres qu’il a fédérée.

L’esprit d’OpenClassroomsDes cours ouverts, riches et vivants, conçus pour tous les niveaux et accessibles à tous gratuitement sur notre plate-forme d’e-éducation : www.openc lassrooms.com. Vous y v iv rez une véritable expérience communautaire de l’apprentissage, permettant à chacun d’apprendre avec le soutien et l’aide des autres étudiants sur les forums. Vous profiterez des cours disponibles partout, tout le temps.

ISB

N :

978-

2-21

2-67

475-

0

PHP e

t MYS

QL

Mathieu Nebra

Mat

hieu

Neb

ra

3e édition

3e édition

3e édi

tion

CON

CEVE

Z VO

TRE

SITE

WEB

AVE

C

G14475_ConcevezVotreSiteWebEnPHPetMySQL 2.indd 1 21/09/2017 15:03

Page 3: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

CONCEVEZ VOTRE SITE WEB AVEC

PHP et MYSQL

G14475_ConcevezVotreSiteWebEnPhpEtMySql-PDT.indd 1 21/09/2017 12:15

Page 4: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

DANS LA MÊME COLLECTION

M. Nebra. – Réalisez votre site web avec HTML 5 et CSS 3.

N°67476, 2e édition, 2017, 362 pages.V. Thuillier. – Programmez en orienté objet en PHP.

N°14472, 2e édition, 2017, 474 pages.J. Pardanaud, S. de la Marck. – Découvrez le langage JavaScript.

N°14399, 2017, 478 pages.A. Bacco. – Développez votre site web avec le framework Symfony3.

N°14403, 2016, 536 pages.M. Chavelli. – Découvrez le framework PHP Laravel.

N°14398, 2016, 336 pages.R. De Visscher. – Découvrez le langage Swift.

N°14397, 2016, 128 pages.M. Lorant. – Développez votre site web avec le framework Django.

N°21626, 2015, 285 pages.E. Lalitte. – Apprenez le fonctionnement des réseaux TCP/IP.

N°21623, 2015, 300 pages.M. Nebra, M. Schaller. – Programmez avec le langage C++.

N°21622, 2015, 674 pages.

SUR LE MÊME THÈME

C. Soutou. – Programmer avec MySQL.

N°67379, 5e édition, 2017, 522 pages.R. Rimelé. – Mémento MySQL 5.

N°14039, 4e édition, 2014, 14 pages.P. Martin, J. Pauli, C. Pierre de Geyer, É. Daspet. – PHP 7 avancé.

N°14357, 2016, 732 pages.E. Biernat, M. Lutz. – Data science : fondamentaux et études de cas.

N°14243, 2015, 312 pages.

Retrouvez nos bundles (livres papier + e-book) et livres numériques surhttp://izibook.eyrolles.com

Nebra-PHP-MEP.indd IINebra-PHP-MEP.indd II 31/08/2017 14:1131/08/2017 14:11

Page 5: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

CONCEVEZ VOTRE SITE WEB AVEC

PHP et MYSQL

Mathieu Nebra

3e édition

G14475_ConcevezVotreSiteWebEnPhpEtMySql-PDT.indd 3 21/09/2017 12:15

Page 6: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

ÉDITIONS EYROLLES61, bd Saint-Germain75240 Paris Cedex 05

www.editions-eyrolles.com

En application de la loi du 11 mars 1957, il est interdit de reproduire intégralement ou partiellement le présent ouvrage, sur quelque support que ce soit, sans l’autorisation de l’Éditeur ou du Centre Français d’exploitation du droit de copie, 20, rue des Grands Augustins, 75006 Paris.

ISBN : 978-2-212-67475-0

© OpenClassrooms, 2012, 2017© Groupe Eyrolles, 2017, pour la présente édition

Nebra-PHP-MEP.indd IVNebra-PHP-MEP.indd IV 31/08/2017 14:1131/08/2017 14:11

Page 7: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Avant-propos

Blogs, réseaux sociaux, site e-commerce, API… Grâce au langage PHP, les développeurs sont en mesure de développer toute sorte de site web. Nous parlerons d’ailleurs d’applica-tion web dans la mesure où ces sites présentent souvent des centaines de fonctionnalités.

Le langage PHP a justement été conçu pour créer des sites « vivants » (on parle de sites dynamiques). Et si vous voulez apprendre à créer vous aussi des sites web dynamiques, c’est votre jour de chance : voici un ouvrage pour vrais débutants en PHP !

Pour utiliser PHP, il faut connaître au préalable les langages HTML et CSS.Comment ça, ces langages ne vous disent rien ? Vous ne savez même pas ce qu’est un « langage » ? Il faut donc que vous lisiez d’abord mon cours de création de sites web en HTML 5 et CSS 3 (https://openclassrooms.com/courses/apprenez-a-creer-votre-site-web-avec-html5-et-css3) avant de revenir ici !

Structure de l’ouvrage

Le plan de ce livre a été conçu pour faciliter votre apprentissage du PHP et de MySQL. Six parties vous sont ainsi proposées pour apprendre les bases de PHP, écrire son pre-mier script, transmettre des données de page en page, stocker des informations dans une base de données et pour enrichir vos (nouvelles) connaissances sur PHP et les bases de données SQL.

S’ajoute à cela trois TP complets qui vous permettront de passer de la théorie à la pratique pour créer un minichat, un blog avec des commentaires ou encore un site intégrant un espace membres.

Enfin, dernier détail et non des moindres, quatre annexes ont été ajoutées pour vous permettre de publier votre site sur le Web, de mieux utiliser la documentation de PHP, de protéger un dossier grâce au fichier .htaccess et de garder en tête les expressions régulières les plus utiles.

Nebra-PHP-MEP.indd VNebra-PHP-MEP.indd V 31/08/2017 14:1131/08/2017 14:11

Page 8: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Concevez votre site web avec PHP et MySQL

VI

Comment lire ce livre ?

Suivez l’ordre des chapitres

Lisez ce livre comme on lit un roman. Il a été conçu pour cela. Contrairement à beau-coup de livres techniques où il est courant de lire en diagonale et de sauter certains chapitres, il est ici fortement recommandé de suivre l’ordre du livre, à moins que vous ne soyez déjà, au moins un peu, expérimenté.

Pratiquez en même temps

Pratiquez régulièrement. N’attendez pas d’avoir fini de lire ce livre pour allumer votre ordinateur.

Les compléments web

Pour télécharger le code source des exemples de cet ouvrage, veuillez-vous rendre à cette adresse : http://www.editions-eyrolles.com/dl/0067475.

Nebra-PHP-MEP.indd VINebra-PHP-MEP.indd VI 31/08/2017 14:1131/08/2017 14:11

Page 9: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Table des matières

Première partie – Introduction 1

1 Fonctionnement d’un site écrit en PHP 3

Les sites statiques et dynamiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Comment fonctionne un site web ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Cas d’un site statique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Cas d’un site dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

Les langages du Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7Pour un site statique : HTML et CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7Pour un site dynamique : ajoutez PHP et MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 8PHP génère du HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

Et la concurrence ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Les concurrents de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Les concurrents de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Plusieurs combinaisons sont possibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2 Préparer son environnement de travail 15

Installer les bons programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Avec un site statique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Avec un site dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

Sous Windows : WAMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Sous Mac OS X : MAMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

Sous Linux : XAMPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Utiliser un bon éditeur de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Sublime Text (gratuit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

Nebra-PHP-MEP.indd VIINebra-PHP-MEP.indd VII 31/08/2017 14:1131/08/2017 14:11

Page 10: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Concevez votre site web avec PHP et MySQL

VIII

PHPStorm (payant) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3 Écrire son premier script 33

Les balises PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33La forme d’une balise PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34Insérer une balise PHP au milieu du code HTML . . . . . . . . . . . . . . . . . . . . . . . . . 34

Afficher du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36L’instruction echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36Enregistrer une page PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Tester la page PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Comment PHP génère-t-il du code HTML ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Les commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Les commentaires monolignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Les commentaires multilignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

4 Configurer PHP pour visualiser les erreurs 43

Permettre l’affichage des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43Localiser le fichier de configuration PHP du serveur web . . . . . . . . . . . . . . . . . . . 44Tester l’affichage des erreurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

Deuxième partie – Les bases de PHP 47

5 Les variables 49

Qu’est-ce qu’une variable ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49Un nom et une valeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Les différents types de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

Affecter une valeur à une variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51Premières manipulations de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51Utiliser les types de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

Afficher et concaténer des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54Afficher le contenu d’une variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54Concaténer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

Faire des calculs simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57Les opérations de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57Le modulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58Et les autres opérations ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

6 Les conditions 61

La structure de base : if… else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61Les symboles à connaître . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62La structure if… else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Le cas des booléens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

Nebra-PHP-MEP.indd VIIINebra-PHP-MEP.indd VIII 31/08/2017 14:1131/08/2017 14:11

Page 11: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Table des matières

IX

Des conditions multiples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66L’astuce bonus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Une alternative pratique : switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Les ternaires : des conditions condensées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

7 Les boucles 73

Une boucle simple : while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

Une boucle plus complexe : for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

8 Les tableaux 81

Les deux types de tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81Les tableaux numérotés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82Les tableaux associatifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

Parcourir un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85La boucle for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85La boucle foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86Afficher rapidement un array avec print_r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

Rechercher dans un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89Vérifier si une clé existe dans l’array : array_key_exists . . . . . . . . . . . . . . . . . . . . . 89Vérifier si une valeur existe dans l’array : in_array . . . . . . . . . . . . . . . . . . . . . . . . 90Récupérer la clé d’une valeur dans l’array : array_search . . . . . . . . . . . . . . . . . . . 91

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

9 Les fonctions 93

Qu’est-ce qu’une fonction ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93Dialoguer avec une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94Les fonctions en PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

Les fonctions prêtes à l’emploi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96Traiter des chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Récupérer la date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

Créer ses propres fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100Premier exemple : dis bonjour au monsieur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101Deuxième exemple : calculer le volume d’un cône . . . . . . . . . . . . . . . . . . . . . . . . 103

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

10 Au secours ! Mon script plante ! 107

Les erreurs les plus courantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Parse error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107undefined function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109wrong parameter count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

Traiter les erreurs SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110Repérer l’erreur SQL en PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

Nebra-PHP-MEP.indd IXNebra-PHP-MEP.indd IX 31/08/2017 14:1131/08/2017 14:11

Page 12: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Concevez votre site web avec PHP et MySQL

X

Allez ! Crache le morceau ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

Quelques erreurs plus rares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111headers already sent by… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111L’image contient des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112maximum execution time exceeded . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

11 Inclure des portions de page 115

Le principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115Le problème . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116La solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

La pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

12 Coder proprement 121

Des noms clairs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121Des noms de variables peu clairs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123Des noms de variables beaucoup plus clairs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

Indenter son code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124Un code non indenté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124Un code indenté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

Un code correctement commenté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

Les standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

Troisième partie – Transmettre des données de page en page 129

13 Transmettre des données avec l’URL 131

Envoyer des paramètres dans l’URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131Former une URL pour envoyer des paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . 131Créer un lien avec des paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

Récupérer les paramètres en PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

Ne jamais faire confiance aux données reçues ! . . . . . . . . . . . . . . . . . . . . . . . . 134N’importe quel visiteur peut trafiquer les URL . . . . . . . . . . . . . . . . . . . . . . . . . . . 135Tester la présence d’un paramètre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136Contrôler la valeur des paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

14 Transmettre des données avec les formulaires 143

Créer la base du formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143La méthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144La cible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

Les éléments du formulaire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145Les petites zones de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146Les grandes zones de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147La liste déroulante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148Les cases à cocher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

Nebra-PHP-MEP.indd XNebra-PHP-MEP.indd X 31/08/2017 14:1131/08/2017 14:11

Page 13: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Table des matières

XI

Les boutons d’option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150Les champs cachés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

La faille XSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151Pourquoi les formulaires ne sont pas sûrs ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151Attention au code HTML que vous recevez ! . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

L’envoi de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156Le formulaire d’envoi de fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157Le traitement de l’envoi en PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

15 TP : protéger une page par mot de passe 163

Instructions pour réaliser le TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163Les prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163Votre objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164Comment procéder ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164À vous de jouer ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

Aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

16 Variables superglobales 171

Des variables très spéciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

17 Sessions et cookies 173

Les sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173Exemple d’utilisation des sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174L’utilité des sessions en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

Les cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177Qu’est-ce qu’un cookie ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177Créer le cookie avant d’écrire du HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179Afficher un cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180Modifier un cookie existant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

18 Lire et écrire dans un fichier 183

Autoriser l’écriture de fichiers (CHMOD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

Ouvrir et fermer un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

Lire et écrire dans un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187Lire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187Écrire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

Nebra-PHP-MEP.indd XINebra-PHP-MEP.indd XI 31/08/2017 14:1131/08/2017 14:11

Page 14: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Concevez votre site web avec PHP et MySQL

XII

Quatrième partie – Stocker des informations dans une base de données 191

19 Présentation des bases de données 193

Le langage SQL et les bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193Les SGBD s’occupent du stockage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194Vous donnez les ordres au SGBD en langage SQL . . . . . . . . . . . . . . . . . . . . . . . . 194PHP fait la jonction entre vous et MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

Structure d’une base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

Où sont enregistrées les données ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

20 phpMyAdmin 199

Créer une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199Les types de champs MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202Les clés primaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

Modifier une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

Autres opérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206Importer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208Exporter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209Opérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211Vider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211Supprimer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

21 Lire des données 213

Se connecter à la base de données en PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . 213Comment se connecter à la base de données en PHP ? . . . . . . . . . . . . . . . . . . . . 213Activer PDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214Se connecter à MySQL avec PDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216Tester la présence d’erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

Récupérer les données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218Faire une requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219Votre première requête SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220Afficher le résultat d’une requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221Afficher seulement le contenu de quelques champs . . . . . . . . . . . . . . . . . . . . . . . 223

Les critères de sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225ORDER BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227LIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

Construire des requêtes en fonction de variables . . . . . . . . . . . . . . . . . . . . . . . 230La mauvaise idée : concaténer une variable dans une requête . . . . . . . . . . . . . . . . 230La solution : les requêtes préparées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

Nebra-PHP-MEP.indd XIINebra-PHP-MEP.indd XII 31/08/2017 14:1131/08/2017 14:11

Page 15: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Table des matières

XIII

Traquer les erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

22 Écrire des données 237

INSERT : ajouter des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237Ajouter une entrée avec la requête INSERT INTO . . . . . . . . . . . . . . . . . . . . . . . . . 238Application en PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Insérer des données variables grâce à une requête préparée . . . . . . . . . . . . . . . . . 240

UPDATE : modifier des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240Modifier une entrée avec la requête UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . 240Application en PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241Avec une requête préparée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

DELETE : supprimer des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

23 TP : un minichat 245

Instructions pour réaliser le TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246Structure de la table MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247Structure des pages PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247Rappel sur les consignes de sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249À vous de jouer ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249minichat.php : formulaire et liste des derniers messages . . . . . . . . . . . . . . . . . . . . 249minichat_post.php : enregistrement et redirection . . . . . . . . . . . . . . . . . . . . . . . . 251

Aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

24 Les fonctions SQL 253

Les fonctions scalaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253Utiliser une fonction scalaire SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Quelques fonctions scalaires utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256

Les fonctions d’agrégat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257Utiliser une fonction d’agrégat SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258Quelques fonctions d’agrégat utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

Grouper des données avec GROUP BY et HAVING . . . . . . . . . . . . . . . . . . . . . . 261GROUP BY : grouper des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262HAVING : filtrer les données regroupées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

25 Les dates en SQL 265

Les champs de type date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265Les différents types de dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266Utilisation des champs de date en SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

Les fonctions de gestion des dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

Nebra-PHP-MEP.indd XIIINebra-PHP-MEP.indd XIII 31/08/2017 14:1131/08/2017 14:11

Page 16: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Concevez votre site web avec PHP et MySQL

XIV

NOW() : obtenir la date et l’heure actuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268DAY(), MONTH(), YEAR() : extraire le jour, le mois ou l’année . . . . . . . . . . . . . . . . 268HOUR(), MINUTE(), SECOND() : extraire les heures, les minutes et les secondes . . . . 269DATE_FORMAT : formater une date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269DATE_ADD et DATE_SUB : ajouter ou soustraire des dates . . . . . . . . . . . . . . . . . . 270

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

26 TP : un blog avec des commentaires 271

Instructions pour réaliser le TP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272Structure des tables MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274Structure des pages PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275À vous de jouer ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276index.php : la liste des derniers billets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276commentaires.php : affichage d’un billet et de ses commentaires . . . . . . . . . . . . . 277

Aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280Un formulaire d’ajout de commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280Utiliser les includes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280Vérifier si le billet existe sur la page des commentaires . . . . . . . . . . . . . . . . . . . . . 281Paginer les billets et commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281Réaliser une interface d’administration du blog . . . . . . . . . . . . . . . . . . . . . . . . . . 282

27 Les jointures entre tables 283

Modéliser une relation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

Qu’est-ce qu’une jointure ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

Les jointures internes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287Jointure interne avec WHERE (ancienne syntaxe) . . . . . . . . . . . . . . . . . . . . . . . . . 288Jointure interne avec JOIN (nouvelle syntaxe) . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

Les jointures externes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291LEFT JOIN : récupérer toute la table de gauche . . . . . . . . . . . . . . . . . . . . . . . . . . 291RIGHT JOIN : récupérer toute la table de droite . . . . . . . . . . . . . . . . . . . . . . . . . . 292

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

Cinquième partie – Aller plus loin avec PHP 295

28 Créer et manipuler des images en PHP 297

Activer la bibliothèque GD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

Les bases de la création d’image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298Le header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298Créer une image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299Afficher l’image ou l’enregistrer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

Texte et couleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302Manipuler les couleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

Nebra-PHP-MEP.indd XIVNebra-PHP-MEP.indd XIV 31/08/2017 14:1131/08/2017 14:11

Page 17: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Table des matières

XV

Écrire du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

Dessiner une forme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306ImageSetPixel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306ImageLine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307ImageEllipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307ImageRectangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308ImagePolygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

Des fonctions encore plus puissantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309Rendre une image transparente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309Superposer deux images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310Redimensionner une image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

29 Les expressions régulières 317

Où utiliser une regex ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318POSIX ou PCRE ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318Les fonctions qui nous intéressent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318preg_match . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

Des recherches simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319Et tu casses, tu casses, tu casses… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321Le symbole OU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321Début et fin de chaîne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

Les classes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323Des classes simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323Les intervalles de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324Et pour dire que je n’en veux pas ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

Les quantificateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325Les symboles les plus courants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326Être plus précis grâce aux accolades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

30 Aller plus loin avec les expressions régulières 329

Une histoire de métacaractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329Alerte mon Général ! Les métacaractères s’échappent ! . . . . . . . . . . . . . . . . . . . . 329Le cas des classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

Les classes abrégées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

Construire une regex complète . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332Un numéro de téléphone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333Une adresse e-mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335Des regex… avec MySQL ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

Capture et remplacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338Les parenthèses capturantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339Créez votre bbCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

Nebra-PHP-MEP.indd XVNebra-PHP-MEP.indd XV 31/08/2017 14:1131/08/2017 14:11

Page 18: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Concevez votre site web avec PHP et MySQL

XVI

31 TP : créer un espace membres 347

Concevoir l’espace membres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347Quelles sont les fonctionnalités d’un espace membres ? . . . . . . . . . . . . . . . . . . . . 347La table des membres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348La problématique du mot de passe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

Réaliser les pages principales de l’espace membres . . . . . . . . . . . . . . . . . . . . . 351La page d’inscription . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351La page de connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353La page de déconnexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

Aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356

Annexes 357

A Publier son site sur le Web 359

Le nom de domaine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359Réserver un nom de domaine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

L’hébergeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360Le rôle de l’hébergeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362Trouver un hébergeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363Commander un hébergement pour votre site web . . . . . . . . . . . . . . . . . . . . . . . . 364

Utiliser un client FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365Installer un client FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365Configurer le client FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367Transférer les fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368

En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

B Utiliser la documentation PHP 371

Accéder à la documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371Liste des fonctions classées par thème . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372Accès direct à une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

Présentation d’une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374Apprendre à lire un mode d’emploi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375Un autre exemple : date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376Lisez les exemples ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

C Protéger un dossier avec un .htaccess 379

Créer le .htaccess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379

Créer le .htpasswd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

Envoyer les fichiers sur le serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383

D Mémento des expressions régulières 385

Structure d’une regex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

Classes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

Quantificateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

Nebra-PHP-MEP.indd XVINebra-PHP-MEP.indd XVI 31/08/2017 14:1131/08/2017 14:11

Page 19: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Table des matières

XVII

Métacaractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

Classes abrégées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

Capture et remplacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

Index 389

Nebra-PHP-MEP.indd XVIINebra-PHP-MEP.indd XVII 31/08/2017 14:1131/08/2017 14:11

Page 20: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Nebra-PHP-MEP.indd XVIIINebra-PHP-MEP.indd XVIII 31/08/2017 14:1131/08/2017 14:11

Page 21: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Première partie

Introduction

Avant d’entrer dans le vif du sujet, voici quelques informations clés à connaître pour apprendre à développer en douceur.

Nebra-PHP-MEP.indd 1Nebra-PHP-MEP.indd 1 31/08/2017 14:1131/08/2017 14:11

Page 22: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Nebra-PHP-MEP.indd 2Nebra-PHP-MEP.indd 2 31/08/2017 14:1131/08/2017 14:11

Page 23: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

1 Fonctionnement d’un site écrit

en PHP

Ce qui fait le succès du Web aujourd’hui, c’est à la fois sa simplicité et sa facilité d’accès. Un internaute lambda n’a pas besoin de savoir « comment ça fonctionne derrière ». Et heureusement pour lui.

En revanche, un apprenti webmaster doit, avant toute chose, connaître les bases du fonctionnement d’un site web. Qu’est-ce qu’un serveur ? Un client ? Comment rend-on son site dynamique ? Que signifient PHP et MySQL ?

Ce premier chapitre est là pour répondre à toutes ces questions et vous montrer que vous êtes capable d’apprendre à créer des sites web dynamiques. Tous les lecteurs seront à la fin rassurés de savoir qu’ils commencent au même niveau !

Les sites statiques et dynamiques

On considère qu’il existe deux types de sites web : les sites statiques et les sites dynamiques.

• Les sites statiques : ce sont des sites réalisés uniquement à l’aide des langages HTML et CSS. Ils fonctionnent très bien mais leur contenu ne peut pas être mis à jour automatiquement : il faut que le propriétaire du site (le webmaster) modifie le code source pour y ajouter des nouveautés. Ce n’est pas très pratique quand on doit mettre à jour son site plusieurs fois dans la même journée ! Les sites statiques sont donc bien adaptés pour réaliser des sites « vitrine », pour présenter par exemple son entreprise, sans aller plus loin. Ce type de site se fait de plus en plus rare aujourd’hui, car dès qu’on ajoute un élément d’interaction (comme un formulaire de contact), on ne parle plus de site statique mais de site dynamique.

• Les sites dynamiques : plus complexes, ils utilisent d’autres langages, en plus de HTML et CSS, tels que PHP et MySQL. Le contenu de ces sites web est dit « dyna-mique » parce qu’il peut changer sans l’intervention du webmaster ! La plupart des

Nebra-PHP-MEP.indd 3Nebra-PHP-MEP.indd 3 31/08/2017 14:1131/08/2017 14:11

Page 24: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Première partie – Introduction

4

sites web que vous visitez aujourd’hui, y compris OpenClassrooms, sont des sites dynamiques. Le seul prérequis pour apprendre à créer ce type de site est savoir réaliser des sites statiques en HTML et CSS.

Vous pouvez lire sur OpenClassrooms le cours HTML 5 et CSS pour vous mettre à niveau : https://openclassrooms.com/courses/apprenez-a-creer-votre-site-web-avec-html5-et-css3.

L’éléPHPant, la mascotte de PHP

L’objectif de ce cours est de vous rendre capable de réaliser des sites web dynamiques entièrement par vous-même, pas à pas.

En effet, ceux-ci peuvent proposer des fonctionnalités bien plus excitantes que les sites statiques. Voici quelques éléments que vous serez en mesure de réaliser :

• un espace membres : vos visiteurs peuvent s’inscrire sur votre site et avoir accès à des sections qui leur sont réservées ;

• un forum : il est courant aujourd’hui de voir les sites web proposer un forum de discussion pour s’entraider ou simplement passer le temps ;

• un compteur de visiteurs : vous pouvez facilement compter le nombre de visiteurs qui se sont connectés dans la journée sur votre site, ou même connaître le nombre de visiteurs en train d’y naviguer !

• des actualités : vous pouvez automatiser l’écriture d’actualités, en offrant à vos visiteurs la possibilité d’en rédiger, de les commenter, etc. ;

• une newsletter : vous pouvez envoyer régulièrement un e-mail à tous vos membres pour leur présenter les nouveautés et les inciter à revenir sur votre site.

Bien entendu, ce ne sont là que des exemples. Il est possible d’aller encore plus loin, tout dépend de vos besoins. Sachez, par exemple, que la quasi-totalité des sites de jeux en ligne sont dynamiques. On retrouve notamment des sites d’élevage virtuel d’animaux, des jeux de conquête spatiale, etc.

Mais… ne nous emportons pas. Avant de pouvoir en arriver là, vous avez de la lecture et bien des choses à apprendre ! Commençons par la base : savez-vous ce qui se passe lorsque vous consultez une page web ?

Nebra-PHP-MEP.indd 4Nebra-PHP-MEP.indd 4 31/08/2017 14:1131/08/2017 14:11

Page 25: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Chapitre 1. Fonctionnement d’un site écrit en PHP

5

Comment fonctionne un site web ?

Lorsque vous voulez visiter un site, vous tapez son adresse dans votre navigateur web, que ce soit Mozilla Firefox, Google Chrome, Internet Explorer, Opera, Safari ou un autre. Mais ne vous êtes-vous jamais demandé comment faisait la page web pour arriver jusqu’à vous ?

Il faut savoir qu’Internet est un réseau composé d’ordinateurs. Ceux-ci peuvent être classés en deux catégories.

• Les clients : ce sont les ordinateurs des internautes comme vous. Votre ordinateur fait donc partie de la catégorie des clients. Chaque client représente un visiteur d’un site web. Dans les schémas qui vont suivre, l’ordinateur d’un client sera représenté par l’image suivante.

• Les serveurs : ce sont des ordinateurs puissants qui stockent et délivrent des sites web aux internautes, c’est-à-dire aux clients. La plupart des internautes n’ont jamais vu un serveur de leur vie. Pourtant, les serveurs sont indispensables au bon fonction-nement du Web. Sur les prochains schémas, un serveur sera représenté par l’image suivante.

Un client

Un serveur

Nebra-PHP-MEP.indd 5Nebra-PHP-MEP.indd 5 31/08/2017 14:1131/08/2017 14:11

Page 26: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Première partie – Introduction

6

La plupart du temps, le serveur est dépourvu d’écran : il reste allumé et travaille tout seul sans intervention humaine, 24h/24, 7j/7. Un vrai forçat du travail.

On résume : votre ordinateur est appelé le client, tandis que l’ordinateur qui détient le site web est appelé le serveur. Comment les deux communiquent-ils ensemble ?

C’est justement là que se situe la différence entre un site statique et un site dynamique. Voyons ensemble ce qui change.

Cas d’un site statique

Lorsque le site est statique, le schéma est très simple. Cela se passe en deux temps, comme à la figure suivante :

1. le client demande au serveur à voir une page web ;

2. le serveur lui répond en lui envoyant la page réclamée.

Transfert avec un site statique

La communication est donc plutôt basique :

• « Bonjour, je suis le client, je voudrais voir cette page web » ;

• « Tiens, voilà la page que tu m’as demandée ».

Sur un site statique, il ne se passe rien d’autre. Le serveur stocke des pages web et les envoie aux clients qui les demandent sans les modifier.

Cas d’un site dynamique

Lorsque le site est dynamique, il y a une étape intermédiaire : la page est générée (figure suivante) :

• le client demande au serveur à voir une page web ;

• le serveur prépare la page spécialement pour le client ;

• le serveur lui envoie la page qu’il vient de générer.

Nebra-PHP-MEP.indd 6Nebra-PHP-MEP.indd 6 31/08/2017 14:1131/08/2017 14:11

Page 27: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Chapitre 1. Fonctionnement d’un site écrit en PHP

7

Transfert avec un site dynamique

La page web est générée à chaque fois qu’un client la réclame. C’est précisément ce qui rend les sites dynamiques vivants : le contenu d’une même page peut changer d’un instant à l’autre.

C’est comme cela que certains sites parviennent à afficher par exemple votre pseu-donyme sur toutes les pages. Étant donné que le serveur génère une page à chaque fois qu’on lui en demande une, il peut la personnaliser en fonction des goûts et des préférences du visiteur (et afficher, entre autres, son pseudonyme).

Les langages du Web

Lorsqu’on crée un site web, on est amené à manipuler non pas un mais plusieurs lan-gages. En tant que webmaster, il faut impérativement les connaître.

Certains programmes, appelés WYSIWYG (What You See Is What You Get), per-mettent d’aider les plus novices à créer un site web statique sans connaître les langages informatiques qui se cachent derrière… Mais pour réaliser un site dyna-mique comme nous le souhaitons, nous devrons absolument mettre les mains dans le cambouis.

Pour un site statique : HTML et CSS

De nombreux langages ont été créés pour produire des sites web. Deux d’entre eux constituent une base incontournable pour tous les webmasters.

• HTML : c’est le langage à la base des sites web. Simple à apprendre, il fonctionne à partir de balises. Voici un exemple de code HTML :

<p>Bonjour, je suis un <em>paragraphe</em> de texte !</p>

• CSS : c’est le langage de mise en forme des sites web. Alors que le HTML permet d’écrire le contenu de vos pages web et de les structurer, le langage CSS s’occupe

Nebra-PHP-MEP.indd 7Nebra-PHP-MEP.indd 7 31/08/2017 14:1131/08/2017 14:11

Page 28: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Première partie – Introduction

8

de la mise en forme et de la mise en page. C’est en CSS qu’on choisit notamment la couleur, la taille des menus et bien d’autres choses encore. Voici un code CSS :

div.banner { text-align: center; font-weight: bold; font-size: 120%;}

Ces langages sont la base de tous les sites web. Lorsque le serveur envoie la page web au client, il envoie en fait du code en langage HTML et CSS.

Le problème, c’est que lorsqu’on connaît seulement HTML et CSS, on ne peut pro-duire que des sites statiques… et non des sites dynamiques ! Pour ces derniers, il est nécessaire de manipuler d’autres langages en plus de HTML et CSS.

La question qu’il faut tout d’abord vous poser est donc : connaissez-vous HTML et CSS ?

Si oui, c’est parfait, vous pouvez continuer car nous en aurons besoin par la suite. Si la réponse est non, pas de panique. Ces langages ne sont pas bien difficiles et ils sont à la portée de tous. Vous pouvez les apprendre en lisant mon cours sur HTML 5 et CSS (https://openclassrooms.com/courses/apprenez-a-creer-votre-site-web-avec-html5-et-css3).

Sachez qu’apprendre ces langages n’est l’affaire que de quelques petites semaines, voire moins si vous avez suffisamment de temps libre.

Le serveur envoie du HTML et du CSS au client.

Pour un site dynamique : ajoutez PHP et MySQL

Quel que soit le site web qu’on souhaite créer, HTML et CSS sont donc indispensables. Cependant, ils ne suffisent pas pour réaliser des sites dynamiques. Il faut les compléter avec d’autres langages.

C’est justement tout l’objet du présent ouvrage : vous allez apprendre à manipuler PHP et MySQL pour réaliser un site web dynamique.

Nebra-PHP-MEP.indd 8Nebra-PHP-MEP.indd 8 31/08/2017 14:1131/08/2017 14:11

Page 29: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Chapitre 1. Fonctionnement d’un site écrit en PHP

9

• PHP est un langage que seuls les serveurs comprennent et qui permet de rendre votre site dynamique. C’est PHP qui « génère » la page web comme on l’a vu sur un des schémas précédents.

Ce sera le premier langage que nous découvrirons ici. Il peut fonctionner seul, mais il ne prend vraiment de l’intérêt que s’il est combiné à un outil tel que MySQL. Voici un code PHP :

<?php echo "Vous êtes le visiteur n°" . $nbre_visiteurs; ?>

• MySQL est ce qu’on appelle un SGBD (système de gestion de base de données ). Pour faire simple, son rôle est d’enregistrer des données de manière organisée afin de vous aider à les retrouver facilement. C’est grâce à MySQL que vous pourrez enregistrer la liste des membres de votre site, les messages postés sur le forum, etc. Le langage qui permet de communiquer avec la base de données s’appelle le SQL. Voici un code en langage SQL :

SELECT id, auteur, message, datemsg FROM livreor ORDER BY datemsg DESC LIMIT 0, 10

PHP et MySQL sont ce qu’on appelle des logiciels libres. Entre autres choses, cela vous donne des garanties de pérennité : tout le monde peut contribuer à leur déve-loppement, vous ne risquez donc pas de voir tous les webmasters se désintéresser de PHP et de MySQL du jour au lendemain, et ça c’est très important !Par ailleurs, PHP et MySQL sont disponibles gratuitement. Cela signifi e une chose essentielle : vous n’aurez pas à débourser un centime pour construire votre site web !

PHP peut fonctionner seul et suffit pour créer un site dynamique, mais les choses deviennent réellement intéressantes lorsqu’on le combine à un SGBD tel que MySQL. Cependant pour simplifier, oublions pour le moment MySQL et concentrons-nous sur PHP.

PHP génère du HTML

Les clients sont incapables de comprendre le code PHP : ils ne connaissent que le HTML et le CSS. Seul le serveur peut lire du PHP.

Le rôle de PHP est justement de générer du code HTML (on peut aussi générer du CSS, mais c’est plus rare), code qui est ensuite envoyé au client de la même manière qu’un site statique, comme le montre la figure suivante.

Nebra-PHP-MEP.indd 9Nebra-PHP-MEP.indd 9 31/08/2017 14:1131/08/2017 14:11

Page 30: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Première partie – Introduction

10

PHP décide de ce qui va s’afficher sur la page web envoyée au visiteur.

PHP est un langage de programmation utilisé sur de nombreux serveurs pour prendre des décisions. C’est PHP qui décide du code HTML qui sera généré et envoyé au client à chaque fois.

Pour bien comprendre l’intérêt de tout cela, prenons un exemple. On peut écrire en PHP : « Si le visiteur est membre de mon site et qu’il s’appelle Jonathan,

affiche Bienvenue Jonathan sur la page web. En revanche, si ce n’est pas un

membre de mon site, affiche Bienvenue à la place et propose au visiteur de

s’inscrire ».

C’est un exemple très basique de site dynamique : selon que vous êtes un membre enregistré ou non, vous ne verrez pas les mêmes choses et n’aurez peut-être pas accès à toutes les sections.

Et la concurrence ?

HTML et CSS n’ont pas de concurrents car ce sont des standards. Tout le monde est censé les connaître et les utiliser sur tous les sites web.

En revanche, pour ce qui est des sites dynamiques, PHP et MySQL sont loin d’être les seuls sur le coup. Je ne peux pas vous faire une liste complète de leurs concurrents, ce serait bien trop long (et ennuyeux !). Cependant, pour votre culture générale, il faut au moins connaître quelques autres grands noms.

Tout d’abord, si on a souvent tendance à combiner PHP et MySQL pour réaliser de puissants sites dynamiques, il ne faut pas mélanger les deux. Le premier a des concur-rents différents du second.

Les concurrents de PHP

Parmi les concurrents de PHP, on peut citer les suivants :

• ASP.NET : conçu par Microsoft, il exploite le framework (c’est-à-dire un ensemble de bibliothèques qui fournissent des services pour les développeurs) .NET, bien connu des développeurs C#. Ce langage peut être intéressant si vous avez l’habitude de développer en C# .NET et que vous ne voulez pas être dépaysé.

Nebra-PHP-MEP.indd 10Nebra-PHP-MEP.indd 10 31/08/2017 14:1131/08/2017 14:11

Page 31: CONCEVEZ VOTER SITE WEB AVEC PHP et MYSQL · CONCEVEZ VOTRE SITE WEB AVECPHP et MYSQL CONCEVEZ VOTRE SITE WEB AVEC PHP et MYSQL Vous connaissez le HTML et vous avez toujours rêvé

Chapitre 1. Fonctionnement d’un site écrit en PHP

11

• Ruby on Rails : très actif, ce framework s’utilise avec le langage Ruby et permet de réaliser des sites dynamiques rapidement en suivant certaines conventions.

• Django : il est similaire à Ruby on Rails, mais il s’utilise en langage Python.

• Java et les JSP (Java Server Pages) : plus couramment appelé JEE ou Java EE, il est particulièrement utilisé dans le monde professionnel. Il demande une certaine rigueur. La mise en place d’un projet JEE est traditionnellement un peu plus longue et plus lourde mais le système est apprécié des professionnels et des institutions. C’est ce qui est utilisé sur le site des impôts en France, par exemple.

Ruby on Rails

Je ne peux pas présenter ici tous les concurrents, mais cela devrait déjà vous donner une bonne idée. Pour information, il est aussi possible d’utiliser le langage C ou le C++, par exemple, bien que ce soit plus complexe et pas forcément toujours très adapté (en clair, je ne le recommande pas du tout).

? Lequel choisir dans le lot ? Lequel est le meilleur ?

Étant donné l’objet de ce cours, vous vous attendez sans doute à ce que je vous réponde instantanément « PHP ! ». En fait non, tout dépend de vos connaissances en program-mation. Si vous avez déjà manipulé le langage Java, vous serez plus rapidement à l’aise avec les JSP. Si vous connaissez Python, Django semble tout indiqué.

Quant à PHP, il se démarque de ses concurrents par une importante communauté qui peut vous aider rapidement sur Internet si vous avez des problèmes. C’est un langage facile à utiliser, idéal pour les débutants comme pour les professionnels : Wikipédia et Facebook sont des exemples de sites célèbres et très fréquentés qui fonctionnent grâce à PHP.

Ainsi, il n’y a pas de meilleur choix. Je vous recommande le langage pour lequel vous serez certain d’avoir quelqu’un pour vous aider. PHP en ce sens est souvent un très bon choix.

Nebra-PHP-MEP.indd 11Nebra-PHP-MEP.indd 11 31/08/2017 14:1131/08/2017 14:11