Plus important : il serait souhaitable, au moment de mettre à jour les informations d’un film, de disposer comme valeur par défaut des valeurs déjà saisies Ces problèmes peuvent se résou
Trang 11.4 Accès à MySQL avec PHP 53
Une ergonomie rudimentaire En se restreignant à des scripts très simples, on a
limité du même coup la qualité de l’interface Par exemple, on aimerait que les formulaires soient présentés avec un alignement correct des champs Plus important : il serait souhaitable, au moment de mettre à jour les informations d’un film, de disposer comme valeur par défaut des valeurs déjà saisies
Ces problèmes peuvent se résoudre en ajoutant du code PHP pour effectuer des contrôles, ou en alourdissant la partie HTML Le risque est alors d’aboutir à des scripts illisibles et difficilement maintenables Le chapitre qui suit va montrer comment mettre en œuvre des scripts plus robustes et offrant une interface utilisateur plus sûre et plus conviviale Nous verrons également comment éviter des scripts très longs et difficilement lisibles en structurant le code de manière à répartir les tâches
en unités indépendantes
Trang 3Techniques de base
2
Ce chapitre montre, sans entrer trop rapidement dans des techniques de programma-tion avancées (bibliothèques de foncprogramma-tions, programmaprogramma-tion objet, concepprogramma-tion d’une base de données) comment réaliser les bases d’un site avec MySQL et PHP Le but est double : donner un catalogue des fonctionnalités les plus courantes, et montrer à cette occasion les principales techniques de gestion des interactions web client/ser-veur Voici les sujets abordés :
1 Réutilisation de code Dès que l’on commence à produire les pages d’un
site à partir de scripts PHP communiquant avec MySQL, on est amené à programmer de manière répétitive des parties de code correspondant soit à des opérations routinières (connexion à la base, exécution d’une requête), soit à des tests (validations des champs de saisie, vérification que des instructions
se sont exécutées correctement), soit enfin à du texte HTML Les fonc-tions constituent un des principaux moyens (l’autre étant la programmation orientée-objet, présentée dans le chapitre suivant) de réutiliser le code en évi-tant par conséquent de répéter indéfiniment les mêmes instructions (page 56)
2 Traitement des données transmises par HTTP Une des principales
spécificités de la programmation web est la réception et l’envoi de données via le protocole HTTP PHP simplifie considérablement le traitement de ces données, et permet souvent de les manipuler sans tenir compte du protocole, comme s’il s’agissait de paramètres passés au script Dans de nombreux cas, il faut cependant être attentif aux transformations subies par les données, soit parce qu’elle doivent être codées conformément au protocole HTTP, soit parce que le décryptage de PHP introduit des modifications parfois non souhaitées, soit enfin à cause de failles potentielles de sécurité Cela soulève des problèmes délicats liés aux différentes configurations possibles
de PHP et aux différents contextes d’utilisation (HTML, MySQL, texte
Trang 456 Chapitre 2 Techniques de base
simple, ) Cette section discute cet aspect essentiel et décrit une stratégie générale pour régler ces problèmes (page 64)
3 Gestion des formulaires La fin du chapitre précédent a montré comment
mettre à jour une table à partir d’un formulaire Nous reprenons le sujet de manière beaucoup plus détaillée, en montrant comment contrôler les saisies, comment réafficher le formulaire avec des valeurs par défaut, comment utiliser un seul formulaire pour insertions et mises à jour (page 78)
4 Transfert et gestion de fichiers Un site web n’est pas seulement un
ensemble de pages HTML Il peut également fournir ou recevoir des fichiers Nous montrons comment transmettre des fichiers du client au serveur, comment les stocker et référencer sur ce dernier, et comment les présenter pour téléchargement Ces fonctionnalités sont présentées dans le cadre
de la gestion d’un petit album photo (page 90)
5 Gestion des sessions Le protocole HTTP ne mémorise pas les échanges
entre un client et un serveur Pour effectuer un suivi, on doit donc simuler
des « sessions », le plus souvent à l’aide de cookies Nous détaillons pas
à pas la réalisation d’une session (page 98)
6 SQL dynamique Cette section montre comment traiter des requêtes SQL
déterminées « dynamiquement » à l’exécution d’un script, et comment afficher le résultat – qui peut être arbitrairement grand – en plusieurs pages,
à la manière d’un moteur de recherche (page 109)
Tous ces sujets sont traités indépendamment pour permettre au lecteur de s’y reporter directement après une première lecture, et s’appuient sur des exemples com-plets, utilisables et modifiables Les techniques présentées dans ce chapitre forment les briques de base pour la construction d’un site complet, sujet abordé après l’étude
de la programmation objet, dans le prochain chapitre Nous verrons alors comment intégrer ces techniques dans une démarche globale, comprenant une conception rigoureuse de la base de données, le choix d’un style de développement cohérent
et la séparation des codes HTML et PHP
2.1 PROGRAMMATION AVEC FONCTIONS
Une fonction est une partie de code qui ne peut communiquer avec le script appelant que par l’intermédiaire d’un petit nombre de variables – les paramètres – bien identifiées Toutes les données utilisées localement par la fonction pour accomplir
sa tâche particulière ne sont pas accessibles au script appelant Réciproquement, la fonction ne peut pas manipuler les informations du script
2.1.1 Création de fonctions
Un script reposent sur des fonctions confie à chacune l’implantation d’un service précisément identifié : ouvrir un fichier, lire une donnée, effectuer un calcul, etc Chaque fonction accomplit son rôle (et rien de plus), et le script n’est alors rien
Trang 52.1 Programmation avec fonctions 57
d’autre qu’un coordinateur qui délègue les diverses tâches à des fonctions, lesquelles
à leur tour subdivisent leur travail en faisant appel à des fonctions plus spécialisées,
et ainsi de suite La structuration judicieuse d’un programme en fonctions concourt
à la production d’un code sain, lisible et donc facile à mettre à jour La conception
de cette structuration vise à deux buts principaux :
1 déléguer les tâches ingrates, les données secondaires, les contrơles d’erreur à
des modules particuliers ;
2 partager le code : idéalement, on ne devrait jamais écrire deux fois la même
instruction car cette instruction devrait être implantée par une fonction appelée partout ó l’on en a besoin
En appliquant ces idées, on obtient un code dans lequel chaque fonction occupe
au plus quelques dizaines de lignes dans un fichier à part du script principal, ce qui permet de comprendre facilement l’objectif poursuivi et l’algorithme mis en œuvre
A contrario, le mauvais script est celui qui cumule toutes les instructions dans un seul
fichier : on aboutit rapidement à des centaines de lignes accumulant les structures principales et les détails les plus anodins dans un même code, rapidement illisible Ce style de programmation (très courant) est à terme impossible à maintenir et corriger Une fonction bien conçue, bien écrite et bien testée, c’est un problème sur lequel on
ne reviendra plus jamais !
Écriture de fonctions
Nous allons commencer par définir une fonction Connexion() qui se connecte
à MySQL On peut se demander pourquoi définir une telle fonction, alors qu’il
en existe déjà une : la réponse est tout simplement que mysql_pconnect() peut échouer pour diverses raisons, et renvoie alors une valeur nulle qui ne peut être utilisée pour exécuter des requêtes Si l’on ne teste pas ce cas, on s’expose un jour
ou l’autre à de gros ennuis Le tester à chaque appel à mysql_pconnect() rompt le principe exposé ci-dessus de ne jamais écrire des instructions redondantes
La fonction Connexion()
La fonction Connexion() prend comme paramètres les valeurs nécessaires pour se connecter à un serveur sous un compte utilisateur, et se placer ensuite dans une base
si la connexion a réussi Elle est placée dans un fichier Connexion.php qui peut être inclus avec la commande require dans n’importe quel script
Exemple 2.1 exemples/Connexion.php:Fonction de connexion à MySQL
<? php
/ / F o n c t i o n C o n n e x i o n : c o n n e x i o n à MySQL
f u n c t i o n Connexion ( $pNom , $ pM o t P a s s e , $ p B a s e , $ p S e r v e u r )
{
/ / C o n n e x i o n au s e r v e u r