objectif général : Acquérir les compétences nécessaires pour développer des sites Web dynamiques.
objectifs opérationnels :
Stocker et utiliser des données à l’aide des variables et des opérateurs.
Manipuler des tableaux et des chaînes de caractères.
Contrôler le flux d’exécution des instructions.
Définir et utiliser des fonctions.
Transférer des données.
Interfacer PHP avec MySQL.
3. Objectifs opérationnels
Stocker et utiliser des données à l’aide des variables
et des opérateurs.
Manipuler des tableaux et des chaînes de caractères.
Contrôler le flux d’exécution des instructions.
Définir et utiliser des fonctions.
Transférer des données.
Interfacer PHP avec MySQL.
4. Le Sommaire
1. Présentation de PHP.
2. Principe de
fonctionnement.
3. Exemple introductif.
4. Les types de base.
5. Les constantes.
6. Les tableaux.
7. Les opérateurs.
8. Les structures de contrôle.
9. Les fonctions.
10. Le transfert de données.
11. La gestion de sessions
12. PHP ↔ MySQL.
5. Présentation de PHP
PHP est un langage de script exécuté du côté serveur et utilisé
essentiellement pour créer des pages Web dynamiques.
A la différence des pages statiques, les pages dynamiques
doivent s'adapter (besoin de l'heure, accès à des bases de
données, réponse personnalisée, traitement de formulaire, etc.).
6. Principe de fonctionnement
1. Requête de données.
2. Activation du moteur PHP.
3. Connexion au serveur BDD.
4. Extraction des données.
5. Formatage en HTML.
6. Réponse.
2
4
3
6
5
1
serveur BDD
moteur PHP
serveur Web
client Web
7. Exemple introductif
<?
/* la variable titre stocke le
titre du script */
$titre = ' Script introductif '
?>
<html>
<head>
<?php
# affiche le titre de la page
echo (" <title> $titre </title>")
?>
</head>
<body>
<%
// affiche le contenu de la page
echo ('Hello, world !');
%>
</body>
</html>
Les syntaxes d’intégration :
• <?php … ?>
• <? … ?> : à activer via short_open_tag
• <% … %>: à activer via asp_tags
Les commentaires:
• // ou # : une seule ligne.
• /* … */ : plusieurs lignes.
Les variables sont précédées du signe $.
La variable est "déclarée" à son utilisation.
La valeur qui lui est affectée détermine son type.
echo affiche une chaîne de caractères :
• telle quelle, si ' … ' est utilisés ;
• en interprétant les variables, sinon.
Toute instruction se termine par (;) sauf si elle est
suivie de ?>.
8. Types de base
numériques et booléen
Type entier:
• un entier ou integer représente un entier relatif (32 bits)
• généralement entre –2 147 843 648 et 2 147 843 647
Type réel:
• Un réel ou double représente un nombre à virgule.
• de -1,7e308 à 1,7e308 avec 14 chiffres après la virgule.
Type booléen:
• exprime la valeur TRUE ou la valeur FALSE
• seuls les constantes FALSE et NULL, les nombres 0 et 0.0, les
chaînes "0" et vide, le tableau vide et l’objet vide valent FALSE.
• TRUE convertit en entier donne 1 et FALSE donne 0
• TRUE convertit en chaine donne "1" et false donne ""
9. Types de base
chaîne de caractères
Une string représente une suite de caractères.
Il y a 256 caractères, mais une string est illimitée.
Une constante string est délimitée par des guillemets ( ' ou " ).
Les guillemets doubles permettent d’interpréter d’éventuels
caractères d’action ou variables présents dans la chaîne qu’ils
délimitent.
l’anti-slash () permet d’échapper ou de déspécialiser les
caractères (', ", , $).
App1
10. Types de base
quelques fonctions
gettype($var) : retourne le type de $var.
settype($var, "type_désiré") : renvoie true si le type de $var est
modifiée.
intval($var), doubleval($var), strval($var) : permettent de
convertir.
is_string($var), is_bool($var), is_int($var), is_double($var),
is_numeric($var), is_array($var) : permettent de tester un type.
isset($var) : renvoie false si $var n’est pas initialisée ou vaut
NULL.
empty($var) : renvoie true si $var n’est pas initialisée ou vaut
NULL, 0, 0.0, "" ou "0".
unset($var) : détruit la variable $var.
11. Types de base
quelques fonctions sur les strings
strlen($str) : renvoie la longueur de $str.
strcmp($str1, $str2): compare alphabétiquement $str1 et $str2.
trim($str): supprime des espaces de début et de fin de chaîne.
addslashes($str): déspécialise les caractères (', ", ).
stripslashes($str): supprime les antislashs.
substr($str,$i,$j) : retourne une sous chaîne de $str de taille $j et
débutant à la position $i.
explode ($sep , $str)
retourne un tableau de chaînes, chacune d'elle étant une sous-chaîne
du paramètre $str extraite en utilisant le séparateur $sep.
12. Notion de constante
Une constante est un identificateur qui représente une valeur
restant inchangée durant l’exécution d’un script.
Cet identificateur est en majuscules (fortement recommandé)
et n’est pas préfixée par $.
Syntaxe de définition d’une constante :
define("NOM_CTE", val_cte);
Exemple : define ("TVA", 0.18);
Une constante ne doit pas être redéfinie.
13. Tableaux
présentation
Un tableau est un regroupement de données de types distincts
ou non, désignées par un identificateur unique.
Chaque donnée est repérée par une clé (ou indice) de type entier
positif ou de type string.
Syntaxe de création d’un tableau numéroté :
$nomTab=array(valeur1,valeur2,valeur3,...)
Syntaxe de création d’un tableau associatif :
$nomTab=array(cle1=>valeur1, cle2=>valeur2,...)
Syntaxe d’accès à un élément :
$nomTab[cle]
App2
14. Tableaux
quelques fonctions
reset($tab) : déplace le pointeur de $tab au début et retourne la
première valeur de celui-ci.
count($tab) : retourne le nombre d’élément d’un tableau.
each($tab) : retourne le couple clé/valeur courant.
extract($tab) : reçoit un tableau associatif $tab et crée des
variables dont les noms sont les clés de $tab, et leur affecte les
valeurs associées.
list($var1, $var2, …): assigne une liste de variables en une seule
instruction.
sort($tab) et rsort($tab) : la première permet le tri alphanumérique
des éléments de $tab, et le second fait l’inverse.
array_merge($tab1, $tab2, …): concatène les tableaux passés en
argument.
15. Opérateurs
Opérateurs arithmétiques
+, -, *, /, % (modulo), ++(incrément), --(décrément)
Opérateurs d’assignation
= (affectation), += (ajouter à), *=, /=, -=, %=
Opérateurs de comparaison
== (égalité), <, <=, >, >=, !=
Opérateurs logiques
AND, && (et), OR, || (ou), ! (non)
Opérateur de concaténation
Noté par un point (.), il « fusionne » deux strings App3
16. Structures conditionnelles
Elles permettent d'exécuter un traitement en fonction d’une (ou
de plusieurs) condition(s).
if (condition_1)
{traitement_1}
[else
{traitement_2}]
if (condition_1)
{traitement_1}
elseif (condition_2)
{traitement_2}
… // suite de elseif
else
{traitement_n}
17. Structures itératives
Elles permettent la répétition d’un traitement en fonction d’une condition.
while(condition) { traitement }
do { traitement } while(condition);
for (exp1 ; condition ; exp2 ) { traitement }
foreach ($tableau as $valeur){traitement}
foreach ($tableau as $cle => $valeur)
{traitement}
App4&5
18. Fonctions
syntaxe
Syntaxe de la définition d’une fonction
function nomDeLaFonction( [arg_1[, arg_2, …] ])
{
corpsDeLaFonction
}
Un argument (ou paramètre) permet à la fonction de
communiquer avec son environnement.
return dans le corps de la fonction lui permet de retourner une
valeur résultat.
A défaut de return, une fonction peut utiliser un argument
pour renvoyer une valeur.
19. Fonctions
rappel sur les paramètres
La communication entre la fonction appelée et le code
appelant se fait par l'intermédiaire de variables particulières et
locales à la fonction appelée que l’on nomme paramètres
formels.
Lors de l’appel, tout paramètre formel est associé à une
variable ou constante de même type nommée paramètre
effectif.
Il existe deux types d'association ou de passage de paramètre :
• passage par valeur :
oCopie de la valeur du param eff dans le param formel
oLa fonction accède au param eff uniquement en lecture
• passage par référence :
oLe param eff et le param formel « se confondent »
oLa fonction accède au param eff en lecture et en
App6
20. Transfert de données
donnée interne transmise d’une page à une autre
L’URL (Uniform Ressource Location ou adresse) d’une page
permet le transfert de données d’une page à une autre
Ajouter à l’URL le caractère ? suivi des couples nom/valeur des
données à transférer. Séparer les couples par le caractère &.
Exemple :
<a href="page2.php?id=3&montant=10000">
Aller à la page 2 en transmettant l’identifiant du client et le
montant de sa commande
</a>
La page2 accède aux données transmises par le biais du tableau
associatif $_GET.
Exemple : echo $_GET['montant']; // affiche 10000
App7
21. Transfert de données
données transmises via formulaire
Principaux attributs de l’élément form :
• action="adresse_script_cible"
script côté serveur qui traitera les données du formulaire.
• method="get|post"
méthode HTTP employée pour envoyer les données
Tout champ du formulaire doit avoir un nom
• Attribut name="nomChamp"
• Choix multiple : name="nomChamp[]"
Le script cible accède aux données transmises comme suit :
• $_GET['nomChamp'] si method="get"
• $_POST['nomChamp'] si method="post"
• $_REQUEST['App8&9 nomChamp'] dans tous les cas
22. Transfert de données
fichier uploadé via formulaire
Pour joindre un fichier à un formulaire :
• attribut enctype="multipart/form-data" de l’élément form
• méthode d’envoi : post
• champ input de type file muni de l’attr name="nomChamp"
Le script destinataire accède aux infos (nom, type, taille, … ) sur
un fichier joint par le biais du tableau super global
$_FILES['nomChamp'].
Tout fichier uploadé est placé dans un répertoire temporaire
move_uploaded_file($nom_temporaire,$nom_definitif)
déplace un fichier uploadé et retourne un booléen.
App10
23. Gestion de sessions
présentation
La gestion d’une session permet d'enregistrer (côté serveur) des
infos sur un internaute afin de les réutiliser durant toute sa visite.
Ces informations doivent être explicitement enregistrées dans le
tableau associatif $_SESSION.
Ce qui permet ainsi de suivre un internaute de page en page, de
sauvegarder un caddie, de sécuriser un site, etc.
Tout visiteur se voit assigner un "identifiant de session"
permettant de retrouver des informations sur lui.
Cet identifiant est stocké dans un cookie (chez le client) ou
propagé dans l'URL des pages visitées (méthode à risques).
Dans les versions récentes de PHP, réactiver la propagation par
l’URL en modifiant, dans le fichier php.ini, les directives :
• session.use_only_cookies = 0
• session.use_trans_sid = 1
Une session doit obligatoirement démarrer avant l’envoi de toute
information au navigateur.
24. Gestion de sessions
exemple
Stockage d’une information dans une variable
$total = 35000; // Montant d’une commande par exemple
Création ou prolongement d’une session
session_start();
Enregistrement de la variable ‘total’ dans la session
$_SESSION[‘total’] = $total ;
Test de l’enregistrement de la variable ‘total’ dans la session
if ( isset( ($_SESSION[‘total']) )
Affichage de l’information (dans une autre page)
echo $_SESSION[‘total’];
Suppression de la variable de session associée à ‘total’
unset($_SESSION[‘total']);
Destruction de toutes les variables de session
$_SESSION = array(); // Tableau vide
Destruction de la session
session_destroy(); App11
25. PHP ↔ MySQL
présentation de MySQL
Le SGBDR (Système de Gestion de Bases de données
Relationnelles) open source le plus utilisé sur le Web.
Logiciel permettant de créer des bases de données, de les
exploiter (en y effectuant notamment des recherches des
modifications ou des tris) et de contrôler l’accès aux données.
Ses principaux concurrents sont PostgreSQL, Microsoft SQL
Server, DB2 et Oracle mais ses atouts majeurs sont :
performances élevées ;
coût réduit ;
simplicité de configuration et d’apprentissage ;
portabilité ;
accessibilité du code source ;
disponibilité du support (www.mysql.com).
26. PHP ↔ MySQL
étapes de la communication
Pour que PHP travaille avec MySQL, il faut une :
1. connexion au serveur
authentification
création d'un objet ou d’un identifiant
1. sélection d’une base de données
2. utilisation des tables
Lecture
écriture
4. déconnexion du serveur
(facultative si la connexion et non persistante)
NB : Dans ce cours, l’extension mysqli (i pour improved çàd
amélioré) est choisie du fait d’une forte recommandation du
« The PHP group ».
27. PHP ↔ MySQL
Connexion/Déconnexion
• Connexion à l’aide du constructeur de la classe mysqli qui reçoit
les 4 chaînes : $serveur, $user, $passwd et $dbname.
• Retourne, en cas de succès, un objet qui représente la
connexion au serveur MySQL.
• Il est recommandé de vérifier la réussite de la connexion via
l’attribut mysqli::$connect_error.
• Pour une connexion persistante, préfixer l’adresse IP ou le nom
du serveur par p: .
• La déconnexion se fait soit automatiquement à la fin de
l'exécution du script (si la connexion n’est pas persistante), soit
explicitement en appelant la méthode :
bool mysqli::close ( void )
28. PHP ↔ MySQL
Connexion/Déconnexion : exemple
//Définition des paramètres de connexion
define('SERVER','localhost');
define('USER','toto');
define('PASSWD','secret');
define('DBNAME','mabdd');
//Connexion
$cnx = new mysqli(SERVER, USER, PASSWD,DBNAME) or
die('Erreur de connexion : ' . $cnx->connect_error);
…
//Déconnexion explicite
$cnx->close();
App12
29. PHP ↔ MySQL
exécution d’une requête de lecture ou d’écriture
mixed mysqli::query (string $req)
Invoquer sur un objet mysqli
Reçoit $req, une requête écrite en SQL
Retourne un jeu de résultats ou objet mysqli_result pour une
requête select.
Retourne TRUE pour les requêtes insert, update et delete.
retourne FALSE en cas d’échec de n’importe quelle requête.
Il est recommandé de vérifier la réussite de l’exécution de la
requête via l’attribut mysqli::$error.
30. PHP ↔ MySQL
exploitation d’une select via tableau associatif
mixed mysqli_result::fetch_assoc( )
Invoquer sur un objet mysqli_result
Retourne une ligne de ce résultat sous la forme d’un tableau
associatif dont les clés sont les noms des attributs (de la clause
SELECT) et leurs valeurs associées étant leurs valeurs ds la BDD ;
Chaque nouvel appel à fetch_assoc() retournera la prochaine
ligne dans le jeu de résultats, ou NULL s'il n'y a plus de lignes.
Exemple : consultation sur la table membres(id, nom, prenom)
$liste= $cnx->query("select prenom, nom from membres");
while($ligne = $liste->fetch_assoc() ){
echo 'Prenom :'.$ligne['prenom'].' Nom : '.$ligne['nom'].'<br />';
}
31. PHP ↔ MySQL
exploitation d’une select via objet
mixed mysqli_result::fetch_object( )
Invoquer sur un objet mysqli_result
Retourne une ligne de ce résultat sous la forme d’un objet dont
les attributs sont les noms des attributs (de la clause SELECT) et
leurs valeurs associées étant leurs valeurs dans la BDD ;
Chaque nouvel appel à fetch_object() retournera la prochaine
ligne dans le jeu de résultats, ou NULL s'il n'y a plus de lignes.
Exemple : consultation sur la table membres(id, nom, prenom)
$liste= $cnx-> query("select prenom, nom from membres");
while($ligne = $liste->fetch_object() ){
echo 'Prenom :'.$ligne->prenom.' Nom: '.$ligne->nom.'<br />';
}
App13
32. PHP ↔ MySQL
autres méthodes
mysqli_result::free_result()
Libère la mémoire associée à l'objet mysqli_result.
mysqli::$insert_id
retourne le dernier identifiant généré par un champs de type
AUTO_INCREMENT.
mysqli_result::$num_rows
retourne le nombre de lignes d'un résultat d’une SELECT.
mysqli_stmt::$affected_rows
retourne le nombre de lignes affectées par la dernière requête
INSERT, UPDATE ou DELETE.
string mysqli::real_escape_string($chaine_a_echapper)
ajoute un slash à tout caractère spécial de la chaîne à échapper.
Cette fonction doit toujours (avec quelques exceptions) être
utilisée pour protéger les données à insérer dans la BDD.
App14