Une page web dynamique : oui.sncf
Internet : grand réseau d'ordinateurs qui communiquent entre eux. Plusieurs services : e-mail, FTP, WWW. Le WWW concerne uniquement les pages web
Deux types d'ordinateurs dans ce réseau : serveurs (dans un data center) et clients (chez vous)
Deux catégories dans le développement web
Front-end | Back-end |
---|---|
coté client (utilisateur) | coté serveur (hébergeur) |
Afficher le contenu | Générer le contenu |
HTML, CSS et JavaScript | PHP, Java, Python, Ruby, C#, etc. |
Site web statique
Site web dynamique
Langages de programmation, mais
JavaScript | PHP |
---|---|
front-end | back-end |
interaction sans recharger la page | — |
— | bases de données, cookies |
<?php
echo 'Hello World'; // affiche le texte 'Hello World'
?>
<!DOCTYPE html>
<html>
<head>...</head>
<body>
<?php
echo 'Hello World'; // affiche le texte 'Hello World'
?>
</body>
</html>
Le code PHP est écrit entre les balises <?php
et ?>
<?php
echo 'Hello World'; // affiche le texte 'Hello World'
?>
Ce qui est dehors s'affiche tel quel
Si le fichier finit avec une balise PHP fermante, on peut la supprimer
Commentaire : bout de texte qui est ignoré
<?php
echo 'Today it is ' . date('l'); // affiche le jour de la semaine
?>
Pourquoi ?
Deux types de commentaires : //...
et /* ... */
<?php
echo 'Hello World<br>'; // le reste de cette ligne est un commentaire
/* tout ce
texte est un
commentaire */
echo /* même ici */ 'Rehello (sic)';
?>
Chaque instruction (ligne de code) doit finir avec un point-virgule (;
)
<?php
echo 'Hello World'; // affiche le texte 'Hello World'
?>
On peut supprimer le dernier point-virgule juste avant une balise PHP fermante
echo
affiche une chaîne de caractères (un texte)
<?php
echo 'Hello World'; // affiche le texte 'Hello World'
?>
On peut aussi utiliser print
Variable : unité d'information (nombre, texte, etc) stockée temporairement en mémoire (pas dans un fichier)
Elle existe pendant la génération de la page PHP
<?php
$prenom = 'Camille'; // cette variable contient la chaîne de caractères 'Camille'
$age = 22; // cette variable contient le nombre entier 22
echo $prenom . ' a ' . $age . ' ans'; // affiche 'Camille a 22 ans'
?>
Une variable a un nom et une valeur
<?php
// nom : $site
// valeur : 'Arles'
$site = 'Arles';
echo $site; // affiche la valeur de $site
?>
Le nom d'une variable doit commencer par le symbole dollar ($
), suivi des lettres (a
...z
, A
...Z
), chiffres (0
...9
) et tirets bas (_
). Pas de chiffre juste après le $
On assigne une valeur à une variable avec
le symbole =
(!)
On initialise une variable en lui affectant une valeur. Souvent, une expression littérale
<?php
// le nom de la variable est $prenom
// 'Aldo' est une expression littérale
$prenom = 'Aldo'; // la variable $prenom prend la valeur 'Aldo'
?>
'Hello world'
2024
1.618
true
ou false
Aussi : null (pas de type), object et array (tableau)
Le type d'une variable est implicite : il dépend de sa valeur
<?php
$cours = 'r213'; // variable de type string
$note_moyenne = 13.79 // type float
$nb_inscrits = 50; // type integer
$fini = false; // type boolean
?>
On obtient le type d'une variable avec la fonction gettype()
Les nombres (integer
et float
) ont les opérations classiques : +
(addition), -
(soustraction), *
(multiplication) et /
(division)
En plus : %
(modulo), **
(exponentielle)
<?php
echo (2 + 3.6)*5 - 3/2; // affiche 26.5
echo '<br>';
echo 23%4; // affiche 3, car 22 = 5*4 + 3
echo '<br>';
echo 2**5; // affiche 32
?>
Plus d'opérateurs ici. Par exemple : ++
, +=
, *=
, etc
Ce code est-il valide ?
<?php
$prix = 12;
$prix = $prix + 10;
echo $prix;
?>
Pour comparer deux nombres : ==
(égal), !=
(différent), <
(plus petit que), <=
(inférieur ou égal), >
(plus grand que), >=
(supérieur ou égal)
Ils renvoient une valeur booléenne : true
ou false
<?php
$bool1 = (2 == 3.5); // false
$bool2 = (2 != 3.5); // true
$bool3 = (3 < 3); // false
$bool4 = (3 <= 3); // true
?>
Erreur fréquente : utiliser =
(affectation) au lieu de ==
Trois opérateurs logiques : &&
(et), ||
(ou), !
(non)
<?php
$bool1 = false && true; // false
$bool2 = false || true; // true
$bool3 = ! $bool2; // false
?>
Délimités par des apostrophes ('
)
<?php
echo '<p>Un paragraphe</p>';
?>
On peut aussi utiliser les guillemets ("
)
Pour utiliser le caractère apostrophe ('
) dans un string, il faut l'échapper avec l'antislash (\
)
<?php
echo '<p>J\'adore</p>';
?>
Opérateur pour les strings : .
(assemblage)
<?php
$str1 = '<p>J\'adore ';
$str2 = 'dormir </p>';
$str3 = $str1 . $str2;
echo $str3; // affiche '<p>J'adore dormir </p>
?>
Constante : variable dont la valeur ne change jamais
<?php
const PI = 3.1415; // la constante PI vaut 3.1415
?>
$
dans le nomCe code est-il valide ?
<?php
$nom = Dupont;
$note = 13,5;
$réussit = $true;
?>
Un tableau (array) est « une liste de variables ». C'est une variable qui contient une séquence de valeurs
Pourquoi ? Les variables sont souvent groupées : liste de choses, propriétés d'un élément
Deux types : numérotés et associatifs
array()
[]
// déclaration d'un tableau nommé $tab1 avec trois strings : 'ab', 'bc', 'cd'
$tab1 = array('ab', 'bc', 'ce');
// afficher la première valeur : index 0 !!!
echo $tab1[0];
// modifier une entrée
$tab1[2] = 'cd';
Autre façon de déclarer un tableau : $tab1 = ['ab', 'bc', 'cd'];
Deux choses étranges :
$tab = array(1, '2', 3.0, 'quatre');
echo $tab[0]; // affiche '1'
echo $tab[3]; // affiche 'quatre'
Qu'est-ce que ça affiche ?
<?php
$tab = array(1, -2, 3, -4, 5);
echo $tab[1];
Ils ne sont pas indexés avec un entier, mais avec une clé (un string)
// déclaration d'un tableau avec trois valeurs
$tab2 = array(
'nom' => 'Gonzalez', // on ajoute la clé et le symbole =>
'prenom' => 'Aldo',
'bureau' => 'C07'
);
// afficher la valeur de la clé 'bureau'
echo $tab2['bureau'];
N'oubliez pas :
=>
Trouvez les erreurs
<?php
tab = array('seance'-> 'CM2';
'prof'='AldoGL';
"salle" -> C24;
'heure' -> 8)
echo $tab(prof);
echo $tab[heure];
Pour afficher le contenu d'un tableau :
print_r()
var_dump()
(plus complet)Quelques fonctions pour chercher dans un tableau :
// le tableau $tab contient la valeur 'val' ?
in_array('val', $tab);
// le tableau $tab contient la clé 'cle' ?
array_key_exist('cle', $tab);
// renvoie la clé de la valeur 'val' (ou false s'il n'y en a pas)
array_search('val', $tab);
Quelle ligne affiche la valeur associée à la clé 'bureau' ?
<?php
$tab2 = array('nom' => 'Gonzalez',
'prenom' => 'Aldo',
'bureau' => 'C07');
echo array_search('bureau', $tab2); // (1)
echo array_search($tab2, 'bureau'); // (2)
echo $tab2['bureau']; // (3)
On peut imbriquer les tableaux : une entrée de tableau peut être un tableau elle-même
Par exemple, une liste d'éléments avec des propriétés :
$enseignants = array(
array('prenom' => 'Aldo', 'nom' => 'Gonzalez', 'bureau' => 'C07'),
array('prenom' => 'David', 'nom' => 'Peyron', 'bureau' => 'C05'),
array('prenom' => 'Anne', 'nom' => 'Lesme', 'bureau' => 'C02')
);
array_push($enseignants, array('prenom' => 'Toufik', 'nom' => 'Baroudi', 'bureau' => 'C07'));
echo $enseignants[3]['nom']; // affiche 'Baroudi'
Les variables servent à manipuler des données simples dans un programme. Dès que ces données sont structurées, on les regroupe avec des tableaux
Une condition, un bloc d'instructions (entre accolades)
<?php
if ($age < 18) {
echo '<p>Vous n\'avez pas accès à ce contenu.</p>';
}
?>
Indentez (décalez à droite) toujours le code qui se trouve dans le bloc d'instructions
S'il n'y a qu'une seule instruction dans le bloc, on peut supprimer les accolades ({
}
)
Deux blocs d'instructions, un seul est exécuté
<?php
if ($age > 18) {
echo '<p>Faites une recherche par mots-clés.</p>';
} else {
echo '<p>Vous n\'avez pas accès à ce contenu.</p>';
}
?>
Plusieurs blocs d'instructions, plusieurs conditions
<?php
if ($age > 18) {
echo '<p>Faites une recherche par mots-clés.</p>';
} elseif ($age > 10) {
echo '<p>Vous n\'avez pas accès à ce contenu.</p>';
} else {
echo '<p>On vient d\'envoyer un SMS à tes parents.</p>';
}
?>
Boucle avec condition au début
<?php
$i = 1;
while ($i <= 10) { // while (...)
echo '<p>i vaut ' . $i . '</p>';
$i = $i + 1;
}
?>
Boucle avec condition à la fin. Bloc exécuté au moins une fois
<?php
$i = 1;
do { // do
echo '<p>i vaut ' . $i . '</p>';
$i = $i + 1;
} while ($i <= 10); // while (...); Attention au point-virgule !
?>
Attention au ;
après la condition
Nombre prédéfini d'itérations (répétitions de la boucle)
<?php
// for (valeur initial; condition; modification)
for ($i = 1; $i <= 10; $i++) {
echo '<p>i vaut ' . $i . '</p>';
}
?>
$i++
est égal à $i = $i+1
. Il existe aussi $i--
Pour parcourir un tableau on utilise la fonction count()
$acteurs = array('Brad', 'Margot', 'Diego');
// la fonction count() renvoie la taille du tableau
for ($i = 0; $i < count($acteurs); $i++) {
echo $acteurs[$i];
}
Boucle pour les tableaux
// parcourir un tableau (numéroté ou associatif)
foreach ($tab as $val) {
echo $val;
}
// parcourir avec la clé et la valeur
foreach ($tab as $cle => $val) {
echo $cle . ' est ' . $val . '<br>';
}
Pour parcourir et modifier les valeurs d'un tableau,
utilisez une boucle for
Pour structurer le code, on utilise les fonctions
Une fonction (function) est une suite d'instructions réutilisable qui peut renvoyer une valeur. Souvent, elle a des paramètres (arguments)
On déclare (crée) une fonction une fois, et on l'appelle (utilise) plusieurs fois
Deux mots-clés :
function
pour déclarer une fonctionreturn
pour renvoyer une valeur// déclaration d'une fonction
function ma_fonction($x, $y) {
return $x*$x + 2*$y;
}
// appel avec les valeurs 3 et 2.6
echo ma_fonction(3, 2.6);
Même si une fonction n'a pas de paramètres, les parenthèses sont nécessaires
On donne des valeurs par défaut aux paramètres avec =
. [doc]
PHP propose beaucoup (≥ 10 000) de fonctions déjà faites : include()
, var_dump()
, idate()
, print_r()
, in_array()
, array_key_exist()
, etc
On ne peut pas connaître toutes ces fonctions. Cherchez sur Google ou sur la documentation de PHP pour trouver la fonction que vous voulez
PHP déclare automatiquement plusieurs variables de type tableau : ce sont les variables superglobales
Ces variables sont : $GLOBALS
, $_SERVER
, $_GET
, $_POST
, $_FILES
, $_COOKIE
, $_SESSION
, $_REQUEST
et $_ENV
La variable superglobale $_GET
est un tableau associatif qui contient les paramètres de l'URL
// URL : index.php?type=feu&page=3
echo $_GET['type']; // affiche 'feu'
echo $_GET['page']; // affiche 3
Application : mettre des informations dans un hyperlien
La variable superglobale $_POST
est elle aussi un tableau associatif
On l'utilise pour récupérer les données entrées dans un formulaire
D'autres variables superglobales très utilisées :
$_SESSION
pour les sessions
$_COOKIE
pour les cookies
$_FILES
pour envoyer des fichiers avec un formulaire
Un utilisateur peut interagir avec un site web dynamique uniquement à travers un formulaire
Par exemple :
Deux fichiers : formulaire.html et affichage.php
[...]
<form method="post" action="affichage.php">
<input type="text" name="un_texte">
<input type="submit" value="Valider">
</form>
</body>
</html>
[...]
<p>
Vous avez écrit <?php echo $_POST['un_texte']; ?> dans le formulaire.
</p>
</body>
</html>
En HTML, un formulaire peut contenir beaucoup de types de widgets différents : zones de texte, boîtes à sélection, boutons, cases à cocher, etc
<form method="post" action="affichage.php">
Nom : <input type="text" name="user_name">
<input type="submit" value="Valider">
</form>
Le texte se trouve dans $_POST['user_name']
<form method="post" action="affichage.php">
<input type="checkbox" name="pear"> Poires
<input type="checkbox" name="apple"> Pommes
<input type="submit" value="Valider">
</form>
Plusieurs choix possibles. Input avant le texte
Pour voir si un une case a été cochée, on utilise la fonction isset
:
if (isset($_POST['pear'])) {
echo 'Vous avez coché les poires';
}
if (isset($_POST['pommes'])) {
echo 'Vous avez coché les pommes';
}
<form method="post" action="affichage.php">
<input type="radio" name="color" value="red"> Rouge
<input type="radio" name="color" value="green"> Vert
<input type="radio" name="color" value="blue"> Bleu
<input type="submit" value="Valider">
</form>
Groupe d'options avec un seul choix possible. Même attribut name
pour tous. Input avant le texte
Avec les boutons radio, les valeur possibles sont déjà définies dans le code HTML avec l'attribut value
if ($_POST['color'] == 'red') {
echo 'Vous avez choisi rouge';
} elseif ($_POST['color'] == 'green') {
echo 'Vous avez choisi vert';
} else {
echo 'Vous avez choisi bleu';
}
name
et la clé dans le tableau $_POST
Tout formulaire renvoie vers un fichier PHP qui fait :
Ne faites pas confiance aux données envoyées par l'utilisateur :
Vérifier que les valeurs sont cohérentes :
if (strlen($_POST['mdp']) >= 8) {
// faire quelque chose
} else {
echo 'Mot de passe trop court. <a href="formulaire.html">Retour</a>';
}
Valider plusieurs données, afficher une seule erreur
if ($_POST['number'] > 100) {
echo 'Nombre trop grand. Retour';
} elseif (strlen($_POST['mdp']) < 8) {
echo 'Mot de passe trop court. Retour';
} else {
// traiter les données
// ...
}
Valider plusieurs données, afficher toutes les erreurs
$erreur = false;
if ($_POST['number'] > 100) {
echo 'Nombre trop grand.';
$erreur = true;
}
if (strlen($_POST['mdp']) < 8) {
echo 'Mot de passe trop court.';
$erreur = true;
}
if ($erreur) { // pareil que if ($erreur == true)
echo '<a href="formulaire.html">Retour</a>';
} else {
// traiter les données
}
L'utilisateur peut entrer un script dans un formulaire pour accéder aux mots de passe, bases de données, etc
Avant d'afficher un texte saisi par l'utilisateur, passez la fonction htmlspecialchars()
:
<p>
Message enregistré : <?php echo htmlspecialchars($_POST['msg']); ?>
</p>
Vérifiez toujours les données d'un formulaire :
On peut valider un champ avant d'envoyer les données avec l'attribut pattern
et une expression régulière [lien]