Accueil

Traduction

Débuter en programmation web - sommaire

Débuter en HTML & CSS - recherche

L'auteur : Patrick Darcheville

Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site

Pourquoi utiliser le PHP ?

Le langage PHP a été créé en 1994 par Rasmus Lerdorf (photo ci-contre) pour son site web.
PHP est devenu le langage de programmation web côté serveur le plus utilisé.
Un développeur web côté client doit maitriser HTML, CSS & JS. Mais il doit aussi avoir quelques notions de PHP ; langage qui propose certains outils très pratiques même pour un développement uniquement "front end".
Je ne prendrai qu'un seul exemple ; la fonction include() (ou require()) de PHP est très utile pour la maintenance rapide du site.

Rôle du PHP

On ne peut pas tout faire avec HTML & CSS.
Ainsi si vous voulez une mise à jour automatique des pages, le site doit comprendre une base de données et alors il faut recourir à un autre couple de langages (PHP & MYSQL).
Ce chapitre et ceux qui suivent portent sur le langage de programmation PHP et le système de gestion de bases de données MYSQL.
Attention il s'agit d'une simple initiation. Ainsi la POO (Programmation Orientée Objet) avec PHP n'est pas évoquée.
De même que l'architecture MVC (Modèle Vue Contrôleur), désormais conseillée d'utiliser pour programmer proprement en PHP, n'est pas traitée.

Dans cette première page je vais tenter de vous montrer par cinq exemples, l'intérêt d'intégrer un peu de PHP dans vos pages.

Dans de nombreux cas on a le choix entre PHP et JavaScript ; par exemple pour afficher la date et l'heure courantes. Mais JavaScript présente un inconvénient majeur : il est exécuté par le navigateur et peut-être désactivé dans ce dernier. PHP est exécuté par le serveur du site hébergeur qui adresse au navigateur du HTML ; le code PHP sera toujours exécuté.

Faciliter la maintenance d'un site

L'utilisation du PHP peut faciliter grandement la maintenance de votre site.

Intérêt du PHP par un exemple

Imaginons un site comprenant une vingtaine de pages. Chaque page comprend quatre grandes divisions (parties) : en-tête de page, zone navigation, corps de page et pied de page.
Pour toutes les pages les contenus des parties en-tête, zone de navigation et pied sont strictement identiques ; seul le contenu de "corps de page" est propre à chaque page.
Les parties en-tête, navigation et pied sont certes identiques mais elles ne sont pas permanentes dans leur contenu ; elles doivent être modifiées régulièrement en fonction de l'actualité ! Par exemple, chaque semaine/ chaque jour, il faut modifier les images (photos).

Vous comprenez qu'il serait fastidieux de changer le code HTML des parties "en-tête", "navigation" et "pied" dans chacune des vingt pages et cela chaque semaine voire chaque jour !
Il faut donc faire en sorte de modifier seulement trois fichiers qui correspondent respectivement à l'en-tête, zone de navigation et pied de page. et qui sont inclus dans chaque page.

Organisation du site

Les trois fichiers HTML partagés par les différentes pages du site

le fichier nommé "debut.htm"

Il correspond à la partie head de chaque page et à la division "en-tête de page"

Le fichier nommé "navigation.htm"

Il correspond à la division "navigation" de chaque page.
Ci-dessus j'ai repris des liens vers trois pages seulement mais il y en a en réalité une vingtaine !

Le fichier "fin.htm"

Il correspond à la division "pied" de chaque page.

Donc chaque semaine, pour actualiser le site, il suffira de modifier ces trois fichiers. Les modifications seront automatiquement prises en compte dans les pages du site grâce à des scripts PHP contenus dans chaque page.

Les pages web du site

C'est dans chaque page du site que l'on va trouver un zest de PHP.

La page d'accueil d'un site doit s'appeler index
Attention dès qu'une page web contient du code PHP son extension doit être .php afin d'avertir le serveur qu'il faut générer du HTML à partir du PHP et retourner au "client" ce HTML.

Le code de la page d'accueil du site :  "index.php"

Le code PHP doit être entre la balise ouvrante <?php (balise début de PHP) et la balise fermante ?> (balise fin de PHP).

Les autres pages du site

Elles auront toutes la même structure que "index.php" ; seul le code à l'intérieur du conteneur section sera différent d'une page à une autre.

Interprétation du code PHP

Un navigateur est incapable d'interpréter le code PHP. Il ne comprend que HTML, CSS, Javascript, etc.
Par contre le serveur est capable d'interpréter le PHP. C'est pour cette raison que l'on dit que PHP est un langage côté serveur.
Naturellement tout hébergeur de site dispose d'un serveur capable d'interpréter du PHP.
Lorsqu'un internaute demande à charger (requête HTTP) une page de votre site, le serveur de l'hébergeur va générer le code HTML à partir du code PHP et lui adresser ce code HTML.

Code HTML récupéré par le visiteur (ou "client")

Imaginons une requête concernant la page d'accueil (index.php).
Le code retourné par le serveur :

Le code PHP a été remplacé par le contenu des différents fichiers inclus.

Tester une page web contenant du PHP

Avant d'envoyer une page web contenant du PHP chez votre hébergeur, vous voulez la tester en local. C'est normal !
Donc vous ouvrez la page index.php avec un éditeur tel notepad puis vous produisez la commande Exécuter/ Launch in Chrome (ou FireFox ou Edge ou Opera).
Et voilà ce que le navigateur affiche :

Le navigateur n'a pas pu interpréter le code de la page, il se contente de l'afficher.
Et c'est logique car, je le répète, un navigateur ne sait pas interpréter du PHP !
Donc pour tester en local il faut traiter la page PHP avec un serveur web que vous aurez installé sur votre ordinateur.

Je vous conseille d'installer le pack WampServer (W pour windows).
WampServer est une plateforme de développement qui permet de faire fonctionner des scripts PHP sur votre PC.

Il existe Lampserver pour les ordinateurs sous Linux.

Pour installer sous environnement Windows10 le pack wampser64 (64 bits) il faut impérativement que le logiciel visual studio soit préalablement installé !

Par ailleurs les pages PHP que vous voulez tester doivent obligatoirement être stockées dans le sous dossier www du dossier c:\wamp ; dossier créé lors de l'installation du pack.

La page d'accueil de WAMP doit s'afficher alors à l'écran.

Affichage des pages du site avec le navigateur

Grâce à la feuille de style externe (voir ci-dessous) et le serveur qui adresse au client du HTML les pages du site (ici limitées à 4) s'affichent proprement.
"Surfez" dans les différentes pages !

Le rendu :

En cliquant sur n'importe quel des quatre liens vous pouvez observez que chaque page affiche entre autres

Donc le code du fichier navigation.htm que je vous ai indiqué n'est pas tout à fait le code réel ...
En effet je profite des liens pour passer des paramètres à chaque page. Mais je n'en dis pas plus pour le moment ...

La fonction require()

Pour inclure un fichier externe dans une page web vous pouvez utiliser soit la fonction include() soit la fonction require()
Ces deux fonctions ne sont pas tout à faire équivalentes. Si le fichier externe n'est pas trouvé la fonction include() génère une alerte mais continue d'exécuter le script alors que la fonction require() met fin au script PHP.

Afficher l'instant présent dans une page

Afficher l'instant présent (date et heure courantes) ? impossible avec HTML !
Par contre aucun problème pour PHP (et JavaScript). Ces deux langages disposent des outils ad hoc.

Solution avec PHP

La fonction date() de PHP retourne l'instant présent.
Pour récupérer la date courante il faut argumenter cette fonction avec la chaîne "d/m/y" (day/month/year);
Pour obtenir l'heure courante il faut argmenter cette fonction avec la chaîne "H:i" (heures : minutes) voire "h:i:s" (heures, minutes, secondes).
Si vous voulez affichez seulement le mois courant il suffit d'écrire date('m').

Dans ce code on voit comment on initialise une variable PHP. Une variable PHP doit impérativement commencer par le caractère $.
Dans l'exemple je crée et initialise deux variables grâce à la fonction date() argumentée. Pratique !

Pour afficher des valeurs il faut utiliser l'instruction echo.
On peut afficher plusieurs valeurs dans la même instruction echo ; il suffit de concaténer ces différentes valeurs . L'opérateur de concaténation en PHP est . (le point).
Avec echo vous pouvez donc afficher des chaînes (entre guillemets simples ou doubles) et des variables (faciles à identifier grâce au caractère $).

Pour pouvez remarquer que le code PHP est à l'intérieur du conteneur H2. Donc la date courante et l'heure courante vont être affichées avec le formatage prévu pour la balise H2 par la feuille de style.

L'instruction echo a un autre rôle : elle permet d'insérer du balisage HTML dans le code PHP. Dans l'exemple j'insère un saut de ligne (instruction : echo ";) entre l'affichage de la date courante et de l'heure courante.

Interprétation du code PHP par le serveur

Supposons que vous demandiez le chargement de la page à 16 h 36 le 3 décembre 2016 ; le serveur va interpréter le code PHP de la page, générer du code HTML qu'il va vous adresser.

Le code HTML généré :

Mais il y a un problème !
Si la page reste affichée durant plusieurs heures elle va toujours afficher "il est exactement 16:36" ...
Il faudrait donc que la page soit rechargée régulièrement ; toutes les 60 secondes afin que l'heure courante soit actualisée.
Pour que la page soit rechargée toutes les minutes il suffit d'ajouter le code HTML suivant (dans la partie head de la page) :

La valeur de l'attribut content doit être un nombre de secondes.

Le rendu :

Attention la fonction date() de PHP affiche l'heure pour le serveur et non pas l'heure pour l'ordinateur du "client".
Il y a bien sûr une solution mais elle est un peu compliquée et dépasse donc la simple initiation au PHP ...

Autre version

Code identique à la version précédente sauf une ligne !

Ici j'ai utilisé de nouveaux caractères : D, M, Y (en majuscules).

Le rendu :

Pour afficher la date avec le nom du jour et le nom du mois en français il faut créer une fonction personnelle qui manipule des tableaux.

Autre solution

Bien évidemment il aurait été possible de créer un script en JavaScript pour afficher l'heure et la date courantes. Mais ce script peut très bien ne pas fonctionner si JS est désactivé par le navigateur.

Produire de grands tableaux HTML

Comme vous savez maintenant, le serveur PHP transforme le PHP en HTML.
Faut-il rappeler que HTML ignore les structures de contrôles (tests et boucles).

Donc PHP peut être utilisé pour générer via quelques lignes de code une quantité énorme de code HTML.

Imaginons que nous voulions afficher dans une page web la table de multiplication par 8 :

Donc il faut afficher un tableau HTML comprenant 3 colonnes mais 50 lignes de contenu.
Si vous tapez directement le code HTML correspondant la saisie serait très très fastidieuse (conteneur TABLE contenant 50 fois le conteneur TR contenant à chaque fois trois fois la balise TD) alors qu'avec le PHP ça sera très court.

Extrait du code de la page "table_par8.php"

Le code PHP comprend une boucle qui est exécutée 50 fois.
Pour produire un tableau de 5000 lignes le code PHP ne serait pas plus compliqué.
A chaque passage dans la boucle : génération d'une ligne de tableau
A chaque passage dans la boucle la variable $i est incrémentée de 1.

Le rendu :

Le visiteur ne peut jamais lire le code PHP de la page. En effet s'il demande d'afficher le "code source" de la page qu'il a chargé il ne voit que le HTML généré et envoyé par le serveur.

Table par N

Le visiteur ne souhaite pas forcément afficher la table par 8 et il ne veut pas forcémenent afficher les 50 premières lignes ...
Il faut donc une solution plus réaliste !

Commentaire succinct

Le code devient un peu plus compliqué.

PHP ne dispose pas d'instructions de saisie (à la différence de Javascript). Il faut donc utiliser un formulaire HTML.
Notez l'emploi dans le formulaire des attributs pattern, required (introduits par HTML5) pour avoir un contrôle de saisie via HTML.

Notez l'emploi d'une fonction : isset() qui retourne une valeur logique ainsi que l'emploi d'un tableau de données :$_GET.

Je n'en dirai pas davantage pour le moment. Un peu de patience.

Le rendu :

Page protégée par un mot de passe

Vous êtes chargé de réaliser le site d'une petite entreprise. L'entrepreneur souhaite que le contenu de certaines pages soient réservées au personnel (intranet).

La gestion de mots de passe ne doit jamais être programmée en JavaScript car le code JS est visible ! Il suffit d'afficher la console du navigateur.

Le code de la page d'accueil du site (extraits)

Le formulaire comprend un champ de type password pour saisir un mot de passe.
Notez bien que ce champ se nomme motpasse.

Ce formulaire ne comprend pas de bouton de soumission des données puisque celle-ci s'effectue avec la méthode submit() de Javascript.
Il suffit donc de saisir le mot de passe puis de cliquer sur ENTER.

Le code de la page "intranet.php" (partie BODY)

La méthode d'envoi des données est get (valeur de l'attribut method de la balise FORM). Donc en cas de soumission le tableau associatif $_GET est créé dans la page cible (ici "intranet.php" puisque la valeur de l'attribut action de la balise FORM est intranet.php).
Notez que le mot de passe est sesame !

Je n'en dis pas plus sur le code. Toujours un peu de patience.

Rendu dans un nouvel onglet

Faites un premier essai avec un mot de passe erroné puis un deuxième avec le mot de passe correct.

Problème

Avez vous observé la barre d'adresse de la page "intranet.php" après avoir saisi "sesame" et appuyé sur ENTER ?

Je vous montre une capture d'écran ci-dessous.

Contenu de la barre d'adresse (dans le cas d'un test en local) :
http://localhost/essai_php/intranet.php?motpasse=sesame

Donc le mot de passe "sesame" apparaît ! C'est très génant ...

Mais c'est logique car avec la méthode d'envoi get les données saisies dans le formulaire deviennent des paramètres de l'URL.
Rassurez vous, nous n'aurions pas eu ce problème si nous avions utilisé la méthode d'envoi post.Le mot de passe est certes contenu dans le code PHP mais comme l'utilisateur n'a pas accès à ce code (à la différence du code Javascript)...

Solution

Le code des deux pages est modifié comme suit :

Page "accueil_plus.php"

Page "intranet_plus.php"

La variable globale créée dans la page cible (intranet_plus.php) après soumission est $_POST !

Rendu dans un nouvel onglet

Faites un premier essai avec un mot de passe erroné !

Ne pas indexer les pages

Il ne faut pas qu'un utilisateur tombe par hasard sur une page de l'intranet de l'entreprise, ces pages ayant été indexées par les moteurs de recherche. Il faut donc rajouter une instruction HTML dans la partie HEAD de chaque page :

Ainsi les pages dotées de cette instruction ne seront jamais proposées par les moteurs de recherche (google, bing, etc.)

Obtenir des infos sur le visiteur

Il peut être utile pour le site visité de connaître le système d'exploitation, le navigateur utilisé par le visiteur, son adresse IP, etc.
En effet si, par exemple, ces infos précisent que le visiteur "surfe" avec un mobile (tablette ou smartphone) on peut imaginer une redirection vers la version mobile du site ...

Toutes ces infos sont contenues dans le tableau associatif $_server car cette variable est renseigné par le serveur à l'occasion d'une requête HTTP.

Le code de l'exemple (extrait)

Pour avoir des infos sur le système d'exploitation et le navigateur du client il faut utiliser le champ HTTP_USER_AGENT du tableau $_server tandis que la clé remote_addr retourne l'adresse IP du visiteur.

Le rendu :

Vous avez un PC doté de window 10 et utilisez comme navigateur Chrome le message retourné sera :
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

Si par contre vous utilisez toujours sur le même PC Firefox le message deviendra :
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox /53.0

Si toujours avec le même poste vous utilisez le navigaterur Edgele message retourné contiendra la chaîne "Edge".

Si vous utilisez une tablette ou un smartphone SAMSUNG le message contiendra la chaîne "android".