======Découverte du PHP : Hypertext Preprocessor ======
PHP est un langage de programmation interprété développé dès 1995 par Rasmus Lerdorf. Son succès tient à son efficacité pour créer des sites web dynamiques.
En effet, contrairement aux pages HTML statiques (dont le contenu est fixé par le développeur du site), il permet d'écrire des pages dynamiques personnalisées en fonction des interactions avec l'utilisateur. Il a permis de créer un grand nombre de sites web célèbres, comme Facebook et Wikipédia.
Contrairement au HTML et au CSS, il n'est pas directement exploitable par les navigateurs et nécessite qu'un serveur génère le code HTML à la demande. Nous allons donc, pour le tester, utiliser un serveur web utilisable à partir d'une clé USB qui le supporte, ce sera [[http://www.xgarreau.org/zazouminiwebserver/|Zazou Mini Web Server (ZMWS)]]
{{https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/PHP-logo.svg/320px-PHP-logo.svg.png?50 |Logo PHP}}
Aujourd'hui la référence est PHP7 mais ZMWS ne supporte que PHP5.1.2
===== Connaissances de base =====
====Les fichiers PHP====
* Les instructions PHP peuvent être placées entre des instructions HTML et rendre dynamique une partie de la page web.
* Elles sont placées entre les balises "****" (fermante). Chaque instruction PHP doit se terminer par le symbole '**;**'.
* Une liste d'instruction liées ensembles se place entre accolades "**{ instruction 1; instruction 2 ; }**". On passe généralement à la ligne entre chaque instruction et on se décale (indentation) à l'intérieur des accolades.
* Des commentaires peuvent être utilisées pour expliquer ce que font les instructions. Ils débutent par les symboles %%//%% et se terminent à la fin de la ligne ou comprennent plusieurs lignes placées entre /* ... */.
* Pour être interprété, un fichier contenant des instructions PHP doit avoir une extension ".php" (index.php, page1.php ...) et être placé sur un serveur compatible.
* Les fichiers PHP peuvent sur le serveur être mélangés aux fichiers HTML et CSS. Le serveur les interprétera et remplacera les instructions PHP par du code HTML avant d'envoyer le contenu au navigateur.
==== Les variables ====
Elles permettent de stocker des informations ou des listes d'informations utiles.
* En PHP, le nom des variables commence par le signe **$**. Une variable peut contenir n'importe quel type de donnée.
* Un tableau est une variable permettant d'en gérer plusieurs autres (placées entre crochets) en une seule fois. Il permet de générer des listes de choses définies par plusieurs informations (liste de personnes, d'objets de données ...).
* Le **symbole d'affectation est =** (donner un contenu à une variable)
* On peut faire les opérations de base (addition, soustraction, multiplication et division) avec les symboles **+, -, * et / **.
* Des opérateurs spéciaux : (++ ou --) permettent d'incrémenter (+1) ou décrémenter (-1) une variable, (+= -= *= /= ) permettent de modifier le la variable concernée. Ils permettent une écriture plus concise.
* La concaténation (addition) de 2 textes est possible avec le symbole "**.**".
// Variables
$nom = "Dupond";
$age = 14;
// Tableau (liste de variables
$identite[0]["nom"] = "Durand";
$identite[0]["age"] = 16;
$identite[1]["nom"] = "Martin";
$identite[1]["age"] = 13;
// Calculs
$différence_age = $identite[0]["age"] - $identite[1]["age"];
$age++; // L'age est augmenté de 1 ans
$age *= 2; // L'age est multiplié par 2
====Les boucles====
Pour répéter des instructions plusieurs fois ou sur une liste.
Il existe plusieurs types de boucles :
* Boucles conditionnelles : **while (condition) instructions;** (instructions seulement si la condition est vraie) ou **do instructions while (condition);** (instructions au moins une fois puis tant que la condition est vraie)
* Boucles bornées : **for (début; fin; progression) instructions;** (de la valeur de la variable de début à la condition de fin en étape fixées par la progression)
* Boucles itératives : **foreach (liste as variable) instructions;** (chaque valeur de la liste devient variable et est traité par les instructions)
// Répéter tant-que la condition est vraie (compteur de 0 à 9)
$x = 0;
while ($x < 10) echo $x++;
// Répéter un certain nombre de fois (exemple compteur de 5 à 25 par nombre impair)
for ($x = 5; $x <= 25; $x += 2) echo $x;
// Répéter pour toutes les personnes (augmenter l'age d'un an)
foreach ($identite as $personne) $personne["age"] = $personne["age"] + 1;
==== Les choix ====
Pour décider le traitement à effectuer en fonction d'un contenu de variable.
* Un choix ne peut avoir que 2 résultats (vrai/faux) **if (condition) instructions-si-vrai; else instructions si faux;**.
* La partie "else" n'est pas obligatoire. Plusieurs choix peuvent se succéder avec **else if**.
* Les opérateurs de comparaison pour les conditions sont : **égal ==, différent !=, inférieur <, supérieur >. On peut ajouter un signe égal à inférieur et supérieur <= et >=**
* L'instruction **switch (variable) case valeur: instructions;** est une autre façon d'enchaîner des choix (variable = valeur du case).
// if else
if ($sexe == "M") echo "Masculin";
else if ($sexe == "F") echo "Féminin";
else echo "Indéterminé";
// switch case
switch ($sexe) {
case "M": echo "Masculin"; break;
case "F": echo "Féminin"; break;
default: echo "Indéterminé";
}
==== Les fonctions ====
Il existe un très grand nombre de fonctions (voir la [[https://www.php.net/manual/fr/indexes.functions.php|référence du langage]]). Il est possible pour l'utilisateur de créer ses propres fonctions.
* Une fonction a un nom et il est suivi de parenthèse.
* Il est possible de passer des paramètre à une fonction en les mettant séparé par des virgules dans les parenthèses.
* Une fonction peut renvoyer un résultat.
";
$x = $a + $b;
return $x;
}
// Ceci est le programme qui utilise la fonction
$a = 2; echo "a = " . $a . "
";
$b = 5; echo "b = " . $b . "
";
$c = mon_addition ($a, $b);
echo "Le résultat est " . $c . "
":
?>
==== L'affichage des résultats ====
Pour afficher un texte ou des résultats dans le navigateur, il faut les transformer en HTML :
* **echo** résultat; (L'instruction peut mélanger du texte et des variables avec le symbole de concaténation **.**)
* **printf("chaîne de format", résultat);** (printf est une fonction)
echo "Votre age est " . $age . " ans."; // Pour écrire à l'écran l'age et passer sur la ligne suivante
printf ("L'age de %s est %d ans.", $nom, $age); // La même chose mais en plus puissant (%s = texte %d = nombre ...)
Les sorties PHP ne différencient pas les espaces, tabulations (indentation) et saut de ligne. Pour générer un code HTML lisible on peut insérer des caractères spéciaux (\t pour l'indentation et \n pour le saut de ligne).
Le code : foreach ($identite as $individu) printf ("L'age de %s est %d ans.", $individu["nom"], $individu["$age"]); donne le résultat suivant : L'age de Durand est 16 ans.L'age de Dupond est 13 ans. (sur une seule ligne)
Le code : foreach ($identite as $individu) printf ("L'age de %s est %d ans.\n", $individu["nom"], $individu["$age"]); donne le résultat suivant : \\ L'age de Durand est 16 ans. \\ L'age de Martin est 13 ans. (sur 2 ligne)
* Si besoin, ne pas oublier de mettre dans les sorties PHP les balises HTML utiles.
* Ne pas confondre les caractères spéciaux (\t et \n) pour générer du code HTML lisible par l'utilisateur et les balises et
pour les passages à la ligne gérés par le navigateur.
=====Compléments=====
===Référence ===
* [[wpfr>PHP|PHP]] sur "Wikipédia"
* [[https://secure.php.net/manual/fr/index.php|La référence du langage]] sur "php.net"
* [[https://www.w3schools.com/php/default.asp|Tutoriel PHP]] sur "w3schools"
* [[https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql| Cours PHP et MySQL]] sur "OpenClassrooms"
=====Activité=====
* [[clubinfo:php2|Traitement d'un formulaire]]
* [[clubinfo:php3|Premiere page avec PHP|]] : Génération automatique du sommaire des ponts
* Ajout d'un nouveau pont en base de donnée (nécessite de connaître le SQL)
* Affichage d'un pont en base de donnée (nécessite de connaître le SQL)