# SPARQL Protocol and RDF Query Language/Travail pratique/PHP les fonctions
## Introduction

Dans ce TP, nous allons acquérir quelques bases de programmation PHP pour utiliser des fonctions.
Ce TP a pour objectif de pouvoir utiliser des librairies de fonctions plus facilement par la suite.

## À savoir avant de commencer
### Les fonctions
#### Définition

Imaginons que le code suivant est utilisé dans plusieurs pages de votre site Web :
Votre code affichera les notes d'un élève, mais on veut :
* mettre en rouge toutes les notes (strictement) inférieures à 10.
* mettre en vert toutes les notes supérieures (ou égales) à 15.
Cela veut dire qu’à chaque apparition d'une note, il faut la tester et lui appliquer la couleur adéquate.
Comme c’est une tâche répétitive, on va la mettre en forme dans une fonction.
Une fonction est une portion de code représentant un sous-programme, qui effectue une tâche ou un calcul relativement indépendant du reste du programme.

#### Utilisation

Utilisation d'une fonction :
* On place la fonction au début du code(au sein de balises PHP).
** PHP ne parcourt qu'une seule fois le code. Si la fonction n’est pas définie avant son utilisation, PHP génère une erreur.
* On ne la crée qu'une fois, tandis qu'on la convoque autant de fois que l’on veut.

#### Syntaxe

Voici la coquille de la fonction pour résoudre notre problème :
Pour écrire une fonction :
* il est obligatoire de commencer par écrire function,
* ensuite vient le nom. On va lui donner un nom simple à retenir.
** comme les variables, les noms de fonctions sont libres, il faut simplement bannir les espaces et les accents.
** le nom de votre fonction est sensible à la casse, c'est-à-dire que vous devenez respecter les majuscules et les minuscules quand vous appelez votre fonction.
* Et, entre parenthèses, le paramètre (une variable imaginaire, $nombre, dont on ne connaît pas encore la valeur)...
On fait, comme si $nombre existait déjà. Voici un exemple de code qui effectue ce que l’on veut obtenir :
On peut maintenant appeler notre fonction dans une page Web :
Voici notre page Web en entier avec la définition de notre fonction avant l'appel de la fonction dans le code :
Bien que votre fonction se définissait avec "colore($nombre)", vous pouvez l'appeler avec "colore($note)". Cela ne pose aucun problème. Le nom de la variable utilisée comme paramètre au sein de la fonction est celui que vous voulez.

#### Plusieurs paramètres

Les fonctions peuvent être définies avec plusieurs paramètres.
Par exemple, je peux définir une fonction "moyenne annuelle" :
Dans ce cas, pour la convoquer, on pourra écrire :

#### Valeur de retour

Si on ne veut pas une fonction qui affiche, mais une fonction qui, par exemple, calcule et renvoie une valeur, on utilisera le mot clé return.
Par exemple, réalisons une fonction qui nous indique si un nombre est pair ou impair.
Voici un formulaire de saisie et une analyse du nombre entré :
Le mot clé return :
* stoppe la fonction
** on peut le placer à tout moment dans la fonction, mais pour une meilleure lisibilité du code, il ne faut l’utiliser qu'une fois et comme dernière instruction de la fonction (juste avant l'accolade finale qui ferme la fonction)
* ne peut renvoyer qu'une seule valeur
** libre à vous de rendre cette valeur complexe comme un tableau ou un objet.
Penser à "ranger" la valeur retournée dans une variable de "réception".

#### Importer des fonctions

Si votre fonction est utilisée dans au moins deux pages Web, vous pouvez mettre vos fonctions dans un autre fichier et partager votre fonction dans plusieurs pages Web. Il vous suffit de convoquer le fichier une seule fois au tout début de chacune de vos pages PHP.
Avec une fonction include, vous pouvez insérer le code d'un autre fichier dans votre page :
ou require, qui lève une erreur s'il ne trouve pas le fichier :
ou require_once, qui lève une erreur s'il ne trouve pas le fichier, mais qui ne charge qu'une fois ce fichier. Cela évite de recharger inutilement ce fichier. si require_once est appelé plusieurs pour charger le même fichier.
Ceci vous permet d'appeler n’importe quelle fonction définie dans votre fichier.
Par exemple, vous avez développé un site et vous souhaitez sur chacune des pages signaler votre dernier magazine. Vous pourriez créer la fonction suivante :
Dans chacune des pages de votre site où vous souhaitez que le message apparaisse, vous devrez :
* 1 ajouter la ligne suivante :
* 2 ne pas oublier d'insérer "require_once('fonctions.php');" au début de votre page.
Cela vous permettra de mettre à jour toutes vos pages en modifiant une seule fois votre texte dans fonctions.php.
La fonction DernierMag n'a pas de paramètres. C'est une simple fonction d'affichage. Une fonction sans paramètre conserve toutefois des parenthèses vides, dans sa définition comme à chaque convocation.

### La commande switch

La commande switch gère les conditions multiples. Cela évite d’utiliser inutilement d'imbriquer les instructions if, elseif et else.
Exemple :
Traduction :
* Dans le cas (case) où la variable $corpulence est égale à :
** 'denutrition' alors affecter le texte 'Vous êtes en dénutrition.' à la variable $verdict
** 'maigre' alors affecter une autre valeur à $verdict
** une autre valeur que 'denutrition' ou 'maigre' alors les instructions dans le cas Default seront utilisées
* On sait que ces conditions s'excluent l'une l'autre grâce à l'instruction break, qui signifie : 'quand tu as fini, sors de ce switch'.

## Exercices
### Lecture d'une liste depuis un formulaire

On veut qu’un utilisateur puisse mettre autant de mots-clés qu’il souhaite par expérience dans son CV.
* Vous allez laisser un seul champ pour les mots clés de manière à pouvoir les écrire en les séparant par des espaces.
* Utiliser la function explode($separateur,$text) pour convertir cette liste en un tableau.
* Afficher les mots-clés dans le CV, séparés par des virgules, avec la fonction implode($glue,$arrayMotsCles) qui retourne du texte.
* Si vous rencontrez un bug, afficher le contenu de votre variable avec :
echo print_r($mots_cles)
Voici la correction :
Dans le fichier formMonCV.html
Dans le fichier monCV.php

### Gestion d'un formulaire dynamique

On veut qu’un utilisateur puisse indiquer autant d’expériences qu’il le souhaite
Il faut que PHP enregistre, dans des tableaux, les données de toutes les expériences envoyées par un formulaire.
* Ajoutez (crochet ouvert puis crochet fermé, sans espace) à la fin du nom de tous les champs qui concernent une expérience dans le formulaire. PHP créera ainsi un tableau poste, date_debut, etc.
* Recopiez dans ces champs votre formulaire pour permettre à l’utilisateur d’écrire trois expériences.
* Dans un fichier fonctions.php, fabriquer la fonction afficheExperience($arrayExperience,$index) pour afficher une expérience.
* Utiliser cette fonction pour afficher le CV.
Voici la correction :
Dans le fichier formMonCV.html :
Dans le fichier monCV.php
Et voici le nouveau fichier functions.php :

### Création du formulaire dynamique

Maintenant qu’on peut afficher n expériences dans un CV, on va faire en sorte que le fichier HTML puisse, à la demande de l’utilisateur, rajouter des expériences.
Insérer dans la page du formulaire le code suivant avant l’élément body :
Pour indiquer la zone "où insérer les champs pour décrire son expérience et le bouton insérer", on remplace les précédents champs de texte par le code suivant :
Voici à quoi ressemble maintenant le fichier formMonCV.html :
| PHP les boucles et opérateurs | PHP avec MySQL |