Réalisation de sites web

Sommaire du site

Présentation
Comment apprendre
L'équipement
La page web
  Styles et CSS
  HTML, structure de la page
  HTML, éléments du corps
Le langage JavaScript
  JavaScript, objets "core"
  JavaScript, DOM, les bases
  JavaScript, DOM, node
  JavaScript, compléments
Le langage PHP, les bases
  PHP, fonctions utiles
  PHP pour le web
  PHP, compléments
SQL, introduction
  MySQL et PHP pour le web
  MySQL, plus loin...
Applications AJAX
Annexes utiles
  Fichier .htaccess
  Sécurité des sites web
  Conception d'un site web
  Référencement, syndication

Sommaire détaillé

Mentions légales.

Chapitres de cette page
Contenu  -> 

Page mise à jour le : 12-08-2015

Haut de la page

Présentation
Structure de base du langage
Les types et variables
Les opérateurs
Les structures de contrôle
Les déclarations de fonctions
A suivre...

Le langage PHP

Présentation

PHP est le sigle de "Hypertext Prepocessor". Il s'agit d'un langage de programmation.

Cela signifie qu'il dispose :

Le PHP est, la plupart du temps, interprété. Cela signifie qu'une fois les instructions écrites, le programme peut être lancé. Il n'y a pas contrairement à d'autres langages (C, Java...) d'opération de traduction en langage machine à faire (compilation, édition des liens).
Les programmes interprétés sont nommés "scripts".

Bien qu'il s'agisse d'un langage d'usage général, il est très utilisé pour produire des pages web car il est souvent associé à un serveur web avec lequel il peut communiquer. Ici nous ne verrons que ce cas d'utilisation.

Dans ce contexte, le code PHP est intégré à l'écriture de la page dans  la balise "<?php ... ?>".

Il est fondamental de comprendre que le code PHP sera traité par le serveur web qui le remplacera par ce qu'il a produit avant d'envoyer à page au navigateur de l'utilisateur.

Un exemple pour illustrer ce point important.

Voici un fragment de page placée sur le serveur (ici la partie PHP est présentée en rouge) :

<h1> Ceci est un essai </h1>
<?php
echo ("<p>Bonjour</p>");
?>
<p> Est-ce clair </p>

La partie PHP est  évaluée par le serveur : l'instruction "echo" produit l'information qui la suit.

Donc le serveur enverra à la machine de l'utilisateur :

<h1> Ceci est un essai </h1>
<p>Bonjour</p>
<p> Est-ce clair </p>

Par conséquent, l'utilisateur du site ne peut pas avoir connaissance des instructions PHP qui ont généré sa page, il n'en a que le résultat.

Remarque utile

On vient de voir que la page est générée à partir du travail d'interprétation du code PHP fait par le serveur.

Par conséquent, si l'on veut vérifier les pages qui contiennent du code PHP, il est nécessaire de passer par un serveur capable d'interpréter le PHP. Lors des tests, il n'est donc plus possible d'envoyer la page écrite telle quelle au navigateur.

Autre remarque

Il est possible que le code PHP ne produise pas d'information en sortie. Dans ce cas, bien sûr, rien ne sera inséré dans la page envoyée par le serveur. Cela est utilisé, entre autres, lorsque l'on comptabilise les accès à la page à des fins statistiques. L'information calculée est uniquement enregistrée sur le serveur.

Pages contenant du PHP

On vient de voir que l'on intégrait souvent du code PHP au sein des pages HTML.

Habituellement, les noms de fichiers des pages ont pour extension ".htm" ou ".html". 

Certains serveurs ne reconnaissent pas de telles pages comme pouvant contenir du PHP et ne font pas appel à l'interpréteur de ce langage. Dans ce cas, le code PHP n'est pas exécuté et la page est envoyée telle quelle.

Pour éviter ce type de problème, il est nécessaire d'utiliser l'extension ".php" pour ces pages.

Structure de base du langage

Ecriture

L'écriture se fait, comme pour l'HTML, avec un éditeur de texte usuel. Le langage en lui-même ne connait que les caractères latins non accentués (code ASCII standard). Les identificateurs que l'on crée (noms de variables, de fonctions) peuvent utiliser des caractères accentués, mais il est préférable pour faciliter la portabilité et la lisibilité entre plates-formes d'en rester à l'ASCII standard. Cependant dans les textes que l'on produit (chaînes de caractères) d'autres codes sont possibles (ISO, UTF, ...).

ATTENTION, le PHP fait la distinction entre majuscules et minuscules pour certains identificateurs (les variables mais pas les fonctions). Dans le doute, il vaut mieux respecter la casse des caractères.

Les caractères d'espacement : saut de ligne, tabulateur, espace, peuvent être librement utilisés pour la mise en page. Ils n'ont pas d'incidence sur le déroulement du programme.

Pour l'écriture du script (le programme PHP) dans la page HTML, il est préférable d'utiliser un éditeur de texte spécialisé. Certains de ces logiciels, libres et gratuits, analysent le texte en temps réel afin de détecter les erreurs de syntaxe éventuelles, complètent automatiquement le code (utile pour les longs noms de fonctions intégrées du PHP) sans risque d'erreur et contiennent la documentation du langage intégrée.

En cas d'erreur

L'interpréteur PHP peut rencontrer des erreurs lors de l'exécution du programme : erreur de syntaxe, instruction non reconnue ou invalide...

Si l'erreur empêche la poursuite de l'exécution du programme celui-ci sera abandonné et la production de la page en restera à cet emplacement.

Il est aussi possible que l'interpréteur détecte une anomalie qui n'empêche pas la poursuite du programme : fonction obsolète, paramètre erroné. Il s'agit d'une alerte

Dans les deux cas, l'interpréteur produit en sortie un message d'erreur qui sera transmis au navigateur de l'utilisateur. Selon l'emplacement de ce message dans le code HTML, il est probable qu'il soit affiché par le navigateur.

Si l'on s'attend à ce qu'une fonction poduise un message d'alerte on peut l'éviter en préfixant la fonction par l'arobase '@'.

Il existe d'autres façons de gérer les erreurs :

Commentaires

Ils sont très utiles pour documenter le programme ou pour empêcher provisoirement l'exécution d'une de ses parties.

Les commentaires PHP ne sont bien sûr par évalués par l'interpréteur et celui-ci ne les transmet pas dans la page envoyée par le serveur.

Il y a trois façons de noter un commentaire :

<?php
echo ("Bonjour"); // Il est 10h
echo ("Bonsoir"); # Là, c'est 18h
echo ("Bonne nuit)"; /* Du soir...
... au jour */
echo ("debout");
?>

Instructions

Le code PHP est composé d'instructions, chaque instruction doit être terminée par le caractère "point-virgule" : ';'.

Il existe plusieurs catégories d'instructions.

Les déclarations

Ces instructions indiquent à l'interpréteur que certains éléments existent. Car, avant d'être utilisés, il est souvent utile que l'interpréteur en connaisse l'existence et la structure.

Ainsi certaines variables et fonctions doivent être déclarées avant d'être utilisées (les concepts de variable et de fonction seront éclaircis plus loin).

Très souvent, on trouve en début de script tout un groupe de déclarations.

Programmation objet

PHP est adapté à la programmation objet, il dispose du mécanisme de classes avec leurs méthodes et propriétés. Cela passe par des déclarations particulières.

Toutefois, la programmation objet n'est pas obligatoire en PHP et comme il s'agit d'une technique qui peut être assez déroutante il n'en est pas fait plus mention sur ce site.

Les appels de fonction

Une fonction est une instruction qui réalise une action. Il en existe un grand nombre qui sont prédéfinies dans le langage et d'autres que l'on peut créer soi-même par une déclaration.

Une fonction possède un nom (généralement en minuscules). Pour appeler (exécuter) une fonction on écrit son nom suivi de parenthèses. Celles-ci peuvent contenir des informations qui seront transmises à la fonction : paramètres. Une fonction peut aussi renvoyer une valeur.

Voici quelques exemples de fonctions prédéfinies.

Notons que certaines fonctions acceptent plusieurs paramètres, voire un nombre variable de paramètres. Dans le cas où il y a en plusieurs, ils doivent être séparés par une virgule.

Par exemple : round (3.1416) renvoie 3, mais round(3.1416, 2) donnera 3.14 (le second paramètre indique le nombre de décimales).

En PHP, il existe quelques "fausses fonctions" qui sont en réalité des instructions internes au langage mais qui se présentent comme des fonctions.
C'est en particulier le cas de "echo", présentée dans l'exemple du haut de cette page. Là les parenthèses sont facultatives.

Les assignations

L'instruction d'assignation ou d'affectation simple donne une valeur à une variable.

L'assignation combinée modifie la valeur d'une variable.

En fait, au sens strict, il s'agit d'opérateurs.

Les instructions de contrôle d'exécution ou "structures de contrôle".

Ces instructions modifient le déroulement séquentiel du programme selon une condition.

Certaines permettent l'exécution d'une partie ou d'une autre du script en fonction du contexte (valeur d'une variable par exemple).

D'autres sont prévues pour un déroulement répétitif d'une section jusqu'à la réalisation d'une condition.

Elles seront détailles plus bas dans cette page.

Blocs d'instructions

Lors d'utilisation d'une structure de contrôle, il est souvent nécessaire de réaliser, selon la condition, une séquence de plusieurs instructions. Afin que cette séquence ne soit vue par la structure que comme une seule instruction, on l'entoure d'accolades.

{instruction1; instruction2; ....}

Les types de données et les variables

Types et constantes

Les données que peut traiter PHP sont de plusieurs types :

Numérique

Il s'agit des nombres, ils peuvent être entiers ou à virgule flottante (décimaux). Un nombre négatif est préfixé du signe '-'.

On peut noter un nombre entier en base 8 (octal) en le préfixant par '0' : 014  vaut 12 en décimal. En base 16 (hexadécimal) en le préfixant par '0x' : 0x1A vaut 26 en décimal. Pour l'hexadécimal les caractères de A à F ainsi que le x peuvent être en majuscules ou minuscules.

Les nombres "flottants" utilisent le point '.' comme séparateur des parties entière / décimale. Le caractère 'E" (majuscule ou minuscule) indique la puissance de 10.

1.2E3 vaut 1200, 45e-4 vaut 0.0045 .

La conversion entre entier et flottant est généralement implicite.

Booléens

Ils ne disposent que de deux valeurs : vrai ou faux, notées respectivement TRUE ou FALSE. Majuscules ou minuscules sont permises.

Caractères et chaînes de caractères

Il s'agit de texte. On le note entre guillemets ou apostrophes. Les deux notations ne sont pas complètement équivalentes.

Entre apostrophes le texte est traité tel quel sauf l'apostrophe qui doit être noté \' et la barre oblique inverse (anti-slash) notée \\ :
'Aujourd\'hui j\'ai modifié c:\\fichier.txt'.

Entre guillemets, les variables simples incluses seront évaluées et remplacées. En plus de la barre oblique inverse (anti-slash) notée \\, d'autres caractères d'échappement existent : le guillemet noté \", le saut de ligne : \n, le retour ligne \r et quelques autres.

Les tableaux

Il s'agit d'une structure d'ensemble ordonné de valeurs. A chaque valeur est associée une clef qui permet d'y accéder. Ces clefs peuvent être textuelles ou numériques (indice ou index).

Un tableau est défini avec le mot 'array' suivi de parenthèses renfermant la description de son contenu.  Si l'on ne sait pas encore quel sera son contenu, on utilise des parenthèses vides.

Voici deux exemples à partir des premiers mois de l'année.

Ici, on associe à chaque numéro de mois son nom.
Clef
Indice
Valeur
1 'janvier'
2 'février'
3 'mars'
4 'avril'

Ce tableau sera défini par :

array(1 =>'janvier', 2=>'février', 3=>'mars', 4=>'avril');


Là, on associe à chaque nom de mois son nombre de jours.
Clef Valeur
'janvier' 31
'février' 28
'mars' 31
'avril' 30

Ce tableau sera défini par :

array('janvier'=>31, 'février'=>28, 'mars'=>31, 'avril'=>30);


Dans le cas où les indices sont des entiers consécutifs,  il est possible de n'indiquer que le premier dans la définition. Le premier exemple aurait pu être :

array(1 =>'janvier', 'février', 'mars', 'avril');

Où même :

array('janvier', 'février', 'mars', 'avril');

Mais dans ce dernier cas, 'janvier' aurait été à l'indice 0, février à 1, etc.

NULL

Il s'agit d'une constante associée à tous les types, elle indique l'absence de valeur.

Le mot 'null' peut être écrit en majuscules ou minuscules.

Les variables

Une variable contient une information (une valeur) de l'un des types vu plus haut. Comme son nom le laisse penser, le contenu d'une variable peut être modifié.

Les variables sont  identifiées par un nom qui doit commencer par le caractère '$' et être suivi de lettres, chiffres ou '_'. Le PHP distingue dans les noms de variable les majuscules des minuscules.

Un certains nombre de variables sont prédéfinies par le système : variables externes. Elles commencent par le souligné et sont suivi de lettres majuscules. Par conséquent, pour éviter des rencontres inopinées, il est judicieux de définir des variables avec des lettres minuscules. Une variable spéciale, prédéfinie et interne, ne suit pas cette règle : la variable "$this". Nous n'aurons pas à en reparler sur ce site.

Voici quelques nom de variable valides :
    $total, $somme_a_reporter, $telephone1 .

Pour accéder à un élément d'une variable de type tableau, on suffixe la variable de crochets dans lesquels est indiqué la clef/indice de cet élément.

Exemples.

$jours_en_mois =
  array('janvier'=>31, 'février'=>28, 'mars'=>31, 'avril'=>30);
echo $jours_en_mois['février']; // Produit 28.

$num_mois = array(1 =>'janvier', 'février', 'mars', 'avril');
echo $num_mois[3]; // Produit mars.

Variables externes

Ces variables sont définies et initialisées par le serveur, ce sont des variables de type tableau.

Les tableaux $_POST, $_FILES et $_GET sont utilisées pour le traitement des formulaires.

$_GET permet de retrouver les données supplémentaire de requête transmises dans l'URL. Par exemple, soit l'URL :
    http://www.serveur.com/dossier/page.php?nom=toto&prenom=riri
$_GET['nom'] contiendra 'toto' et $_GET['prenom'] contiendra 'riri'.

Le tableau $_SERVER fournit des informations du serveur, par exemple :
$_SERVER['PHP_SELF'] donne le chemin d'accès, depuis la racine du site, à la page en cours.
$_SERVER['USER_AGENT'] indique la signature du navigateur de l'utilisateur.

D'autres variables externes concernent les informations de session ou les cookies.

Pour une liste précise voir : http://www.php.net/manual/fr/reserved.variables.server.php

Important. Ces variables externes n'existent pas toujours cela dépend du serveur et du contexte, par exemple certains navigateurs ne transmettent pas leur signature et, dans ce cas, $_SERVER['USER_AGENT'] n'est pas présente. Afin de ne pas avoir d'erreur lors de l'exécution il est utile de tester avec la fonction PHP "isset()" l'existence de la variable à utiliser.

Les opérateurs

Comme on peut s'y attendre, ils réalisent des opérations, mais pas uniquement arithmétiques. Dans tous les cas, ils renvoient une valeur.

Les opérateurs arithmétiques, sur les bits et d'incrémentation / décrémentation renvoient un nombre, les opérateurs de comparaison et logiques donnent un booléen, l'opérateur de concaténation renvoie une chaîne de caractères et l'opérateur d'assignation peut produire tout type de valeur.

Il n'est pas utile de donner ici la liste fort longue des opérateurs et de leur rôle car cela est très bien expliqué dans le manuel de référence :
http://www.php.net/manual/fr/language.operators.php

Cependant quelques remarques :

$a= $b= 10;
echo "$a $b<br>"; // 10 10

$c= $d += $d= 3;
echo "$c $d<br>"; // 6 6

$e= 3+($f=4);
echo "$e $f<br>"; // 7 4

La lisibilité n'est pas gagnante !

Les structures de contrôle

Les structures de contrôle d'exécution affectent le déroulement du script. Il y en a de deux sortes  :

Les instructions de contrôle permettent la création de ces structures, en voici une présentation par l'exemple.

Remarquez l'utilisation des parenthèses et, parfois, l'utilisation de blocs d'instruction {..).

Structures conditionnelles

Instruction "if"

if ($max < $val)
    $max= $val; //On est sûr que $max sera le plus grand

if ($test) //$test est un booléen
    echo "c'est vrai";
else
    echo "c'est faux";

if ($a > $b) echo "Le plus grand est $a";
elseif ($a < $b) echo "le plus grand est $b";
else echo "Ces deux valeurs sont égales à $a";

Notez, dans le dernier exemple que ce qui est produit donnera la valeur des variables ($a ou $b) car à l'intérieur de guillemets la variables sont évaluées. On aurait obtenu quelque chose comme  :

Le plus grand est 15

Si on doit exécuter conditionnellement plusieurs instructions, il faut les grouper dans un bloc. Voici un exemple de comptage décimal  :

if ($unite == 10) {
    $dizaine++;
    $unité = 0;
    if ($dizaine == 10 {
        $centaine++;
        $dizaine = 0;
    } // test dizaine
} // test unité

Les accolades sont nécessaires pour que le PHP séquence bien les instructions.
Et l'indentation (décalage des lignes) n'est là que pour faciliter la lecture.

L'instruction "if" est souvent utilisée dans des passages où l'on intercale PHP et HTML. Dans ce cas les accolades sont obligatoires.

Voici un exemple simpliste mais (on l'espère) explicite :

<?php
if ($lecon_non_apprise) {
?>

<p>Voici un résumé de ce que vous auriez du savoir...
....
</p>
<?php
}
?>

Le PHP est ici écrit en gras.

Instruction "switch"

Plus rarement utilisée que la précédente elle évite les imbrication de "if", "elseif" pour les tests d'égalité.

switch ($num_mois) {// Avec 1 pour janvier
    case 2:
        $jours= $bissextile ? 29 : 28;
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        $jours= 30;
        break;
    default:
        $jours= 31;
}

L'instruction "break" sert à sortir du "switch". Si on l'avait oubliée, tous les mois auraient 31 jours !

Notez (dans "case 2") l'utilisation de l'opérateur "? :" qui évite une structure "if".

Structures de boucle

Il y en a plusieurs, pour différents usages commençons par la plus simple

Instruction "while"

Teste une condition, si elle est vraie exécute l'instruction (ou le bloc d'instructions) de la boucle et réitère le processus. Lorsque la condition est fausse, passe à l'instruction qui suit celle de la boucle.

Si la condition est fausse du début, l'instruction de boucle n'est pas exécutée. Naturellement, si on veut sortir de la boucle, il faut que cette condition devienne fausse.

Exemple, affiche les multiples de 7 inférieurs à 100 :

$nombre= 0;
while ($nombre < 100) {
    echo "$nombre ";
    $nombre += 7;
}

Si la condition de boucle ne devient jamais fausse, le programme ne se terminera pas.

En fait, le serveur dispose d'un mécanisme de protection. Si l'exécution du programme dépasse une certaine durée (fixée à la configuration du serveur), cette exécution est stoppée.

Dans tous les cas c'est un point à bien étudier pour éviter que l'utilisateur ne soit perplexe devant cette situation.

Instruction "do-while"

Assez rarement utilisée, cette boucle est proche de "while", voici le même exemple :

$nombre= 0;
do {
    echo "$nombre ";
    $nombre += 7;
while ($nombre < 100)

Mais ici, comme le test est fait à la fin, on est assuré que l'instruction de boucle est exécutée au moins une fois.

Instruction "for"

Cette instruction, très fréquente, est un raccourci de la boucle "while" car elle englobe, dans ses parenthèses, l'initialisation, la condition et une instruction d'itération.

Voici encore le même exemple :


for($nombre= 0; $nombre < 100; $nombre += 7)
    echo "$nombre ";

C'est rigoureusement équivalent à l'exemple sur l'instruction"while" (et non pas "do-while").

Instruction "foreach"

Cette instruction est adaptée au parcours des tableaux, elle existe sous deux formes.

La première donne les valeurs des cases du tableau, reprenons l'exemple du tableau des mois pour en afficher la liste :

$mois= array(1 =>'janvier', 'février', 'mars', 'avril');
foreach ($mois as $nom)
    echo "$nom ";


Mais si nous voulions le nom des mois et leur nombre de jours voici l'autre forme en partant de l'autre exemple sur le tableau de mois:

$mois= array('janvier'=>31, 'février'=>28, 'mars'=>31, 'avril'=>30);
foreach ($mois as $nom=>$jours)
    echo "$nom a $jours jours<br>";

Ruptures de séquence

On a déjà vu l'instruction "break" pour sortir de "switch", cette instruction peut aussi être utilisée dans une boucle pour la quitter prématurément.

L'instruction "continue" est utilisée dans les boucles pour ignorer la suite de l'instruction bloc de boucle en relançant un tour : soit revenir au test.

Ces deux instructions peuvent accepter un paramètre numérique indiquant de combien de boucles imbriquées sortir.
Il existe aussi une instruction "goto" qui nous ramène une cinquantaine d'année en arrière à l'époque du Fortran et du Basic. Elle est rarement utilisée.

Les déclarations de fonctions

La bibliothèque interne du PHP dispose de nombreuses fonctions mais parfois il est utile d'en créer. Souvent, il a été dit que créer une fonction était intéressant pour ne pas avoir à répéter des parties de code qui devaient être exécutées à plusieurs endroits du script, mais la création de fonction a d'autres avantages.

Déclarer une fonction est assez simple : on écrit le nom que l'on veut donner à la fonction suivi de parenthèses, puis entre accolades on écrit les instructions qui composent la fonction. Là on peut mettre tout ce qui est possible dans un script PHP, y compris des déclarations.

Dans les parenthèses qui suivent le nom de la fonction, il est possible de mettre des noms de variables. Ces variables seront initialisées par les paramètres transmis lors de l'appel à la fonction et seront, bien sûr, utilisables par la fonction.

Si la fonction doit renvoyer une valeur, on indique dans le corps de la fonction, à l'endroit où son travail est terminé, l'instruction "return" suivi de l'expression de la valeur à renvoyer. Dans tous les cas, "return" termine l'exécution des instructions de la fonction. Si "return" n'est pas présente, la fonction se termine à l'accolade la fermant.

Exemple : calculer la moyenne de deux nombres.

function moyenne($a, $b) {
    return ($a+$b)/2;
}

//on teste...
echo moyenne(12, 5);


Autre exemple : insérer dans la page HTML un passage de texte encadré avec un fond.

<?php
function encadre($msg) {
    echo '<span style="border: 2px solid red;
                background-color: #FFDDFF;">';
    echo $msg;
    echo '</span>';
}
?>

<p>Cet animal est un : <?php encadre('chat'); ?> noir</p>

On remarque qu'il a deux passages PHP dans ce fragment de page. le premier définit la fonction, le second qui l'appel est intégré dans le texte (en gras dans l'exemple de code).

Cela produira :

Cet animal est un : chat noir

Attention aux variables

Les variables définies à l'intérieur d'une fonction lui sont locale, y compris ses paramètres. Ces variables n'ont aucun rapport avec celles de l'extérieur.

<?php
$a= 3; $b= 4;

function calcul_bizarre($a){
    $b= $a + 10;
    echo "$a $b<br>";
}

calcul_bizarre($b);
echo "$a $b<br>";

?>

Le premier affichage est celui fait par la fonction, il donne : "4 14".
Le second donne les valeurs d'origine des variables soit : "3 4".

Cependant parfois on a besoin d'une variable externe dans une fonction, il est nécessaire de la définir explicitement comme telle avec le mot "global".
(Dans l'exemple attention aux deux lignes en gras)

<?php
$a= 3; $b= 4;

function calcul_bizarre($a){
global $b;
    $b= $a + $b;

    echo "$a $b<br>";
}

calcul_bizarre($b);
echo "$a $b<br>";

?>

Le premier affichage est celui fait par la fonction, il donne : "4 8".
Le second donne : "3 8" car la valeur de $b a été changée dans la fonction.

Ce dernier exemple n'est pas à reproduire. Il faut éviter de modifier des variables globales dans une fonction car par la suite il est difficile de s'y retrouver.

A suivre...

Nous allons voir les principales fonctions de la bibliothèque PHP