VIII. PHP ETAPE 8 : CONCLUSION▲
VIII-1. En guise de conclusion▲
Programmer en PHP, c'est garder à l'esprit constamment les généralités qu'il y avait dans cette introduction :
à savoir ce que peut PHP, et ce qu'il ne peut pas, ou pas bien, en relation avec la façon dont il fonctionne.
Je vais répéter cela de façon très carrée.
Avant de développer quoi que ce soit d'un peu ambitieux en PHP, comme un projet même petit, il faut inscrire ceci :
A quelles actions de l'utilisateur je vise quelles réactions dans mon code ?
En sachant que les actions que peut recevoir PHP, c'est essentiellement un submit, qui envoie des informations fournies par l'utilisateur, et c'est au rafraîchissement de la page occasionné par le submit qu'on peut programmer des instructions nouvelles en fonction des informations reçues.
C'est déjà pas mal.
VIII-1-a. PHP, un langage qui ne peut pas tout▲
Mais cela signifie que le concepteur du projet doit avoir en tête à l'avance toutes les actions de l'utilisateur avec lesquelles il veut interagir.
Tout se passe du côté du serveur, et doit être programmé d'avance.
Il y a d'autres langages qui se passent du côté client, du côté de l'utilisateur et sont susceptibles de réagir au moindre de ses battements de cil. Ce n'est pas le cas de PHP !
Pour parler d'un problème très concret et qui revient toujours en PHP : les contrôles de saisie.
Nous avons vu dans ce tutoriel comment remplir et traiter des formulaires avec PHP.
J'ai fait le choix de ne pas aborder, et pour cause, tout l'aspect contrôle de saisie.
A peine l'ai-je effleuré en vous disant une fois 'N'oubliez pas maxlength="10"' dans les attributs d'une zone de texte qui propose la saisie d'un téléphone.
Et encore n'était-ce pas du PHP, mais du HTML !
Le contrôle de saisie, c'est ce genre de choses.
Limiter et prévenir les erreurs, doublons, coquilles, maladresses, plaisanteries qui sinon se retrouvent directement dans votre base de données et la rendent pratiquement inutilisable à court terme.
Ainsi aurait-on dû également forcer la saisie de nombres pour le code postal à 5 etc...
Autre chose, vous avez sans doute en travaillant ce tuto cliqué parfois plusieurs fois sur un formulaire et vous êtes aperçu ensuite que la même valeur était du coup entrée plusieurs fois, autant de fois que vous avez cliqué.
C'est normal, rien dans votre code n'interdisait la saisie de doublons, qui se retrouvaient donc inéluctablement dans la base de données !
Pour gérer tout ceci, très utile donc, on préfèrera traditionnellement le sous-traiter soit à un langage comme javascript (non, on ne le dira jamais assez, ça n'a rigoureusement rien à voir avec java, qui est un autre langage)...
Javascript est un langage côté client qui réagit très souplement aux événements de l'utilisateur.
Ceci dit, javascript limitera grandement le taux d'erreurs des gens de bonne foi, mais pas des plaisantins qui ont désactivé le javascript sur leur navigateur !
Donc pour plus de sûreté, on combinera un formatage serré dans notre HTML et on programmera des regex (regular expressions) dans notre code PHP.
Je n'entrerai pas dans les arcanes des regex ici, mais sachez juste que c'est un type de code qui permet un formatage très rigoureux que l'on peut personnaliser à souhait et qui, côté serveur, permet de tester les données entrées avant de les insérer dans une base.
Vous y viendrez si vous voulez programmer des contrôles de saisie efficaces en PHP.
Dans tous les cas, l'idée est la suivante, PHP doit recueillir des infos "propres" et homogènes dès qu'on lui fait manipuler des bases de données.
VIII-1-b. Conceptualisation d'un projet PHP▲
Ayez le réflexe de raisonner en bloc, de façon modulaire...
- Recensez toutes les actions que vous solliciterez de la part de l'utilisateur.
- Notez toutes les variables que vous aurez besoin d'initialiser ou d'affecter pour avancer.
- En vue du switch qui organisera la structure générale de votre programme, nommez ces blocs par exemple case 'debut', case 'inscription', case 'confirmation', case'erreur' etc.
- Rangez toutes les instructions dans ces blocs... Vérifier que chaque bloc est fonctionnel avant de passer au suivant...
- Enfin, vérifiez bien le déclencheur qui vous fait entrer dans chaque bloc d'instructions. Il a cliqué sur tel bouton que je lui présente dans tel bloc, il n'a rien cliqué etc...
Ainsi, quand vous avez tout cela clair en tête : vous pouvez vous lancer dans la structure de votre page, qui peut se présenter ainsi, en partant de la condition des écrans les plus avancés et en remontant jusqu'à l'écran d'arrivée...
Le mot clé sera MODULARISER.
<?php
/****************************Actions de l'utilisateur***********************/
//il a cliqué confirmer
if
(isset($_POST
[
'confirmer'
]
)){
$bloc
=
'insertionbase'
;
}
//il a cliqué form2
elseif
(isset($_POST
[
'validForm2'
]
)){
$bloc
=
'traiteform2'
;
}
//il a cliqué valider formulaire1
elseif
(isset($_POST
[
'validForm1'
]
)){
$bloc
=
'traiteform1'
;
}
//il arrive juste
else
{
$bloc
=
'accueil'
;
}
/***************************Blocs d'instruction***************************/
/*Signalons au passage que si l'ordre était primordial dans notre floppée de if
Il n'a plus aucune importance dans nos blocs d'instructions !
Aussi on peut reprendre l'ordre chronologique et intuitif.*/
switch
($bloc
){
case
'accueil'
:
//toutes les instructions de présentation du formulaire1
break
;
case
'traiteform1'
:
//toutes les instructions de traitement du formulaire1
//appel fonction machin
//présentation du form2
break
;
case
'traiteform2'
:
//toutes les instructions de traitement du formulaire2
//appel fonction truc
break
;
case
'insertionbase'
:
//appel fonction connexion
//toutes les modifications de base de données
}
?>
Ainsi la structure de votre programme, même si le programme est touffu, est claire comme de l'eau de roche.
VIII-2. Quelques réflexes pour progresser en PHP▲
PHP est un excellent langage pour démarrer la programmation.
Il est assez intuitif et peu contraignant. Il est très gratifiant et vous donne vite des ailes.
Si déjà vous sortez de ce tutoriel avec les réflexes suivants, vous en aurez vite un usage très fluide.
- Bien indenter votre code.
- Bien repérer les actions très répétitives et les "ranger" dans des fonctions bien conçues.
- Bien faire des commentaires pédagogiques pour vous même dans votre code de débutant pour toujours savoir qui fait quoi à quel moment.
- Quand vous ne comprenez pas pourquoi un code ne marche pas, ne continuez pas de changer des choses au hasard. Arrêtez-vous. Vérifiez étape par étape que chaque module fonctionne.
- Quand le module fatidique est cerné, le forum est là pour vous désembourber en un quart de tour avec des développeurs chevronnés !
- Entreprenez un vrai projet personnel, comme le développement d'un site qui vous tient à coeur. Rien de tel pour vous porter que le souffle d'un projet web qui vous inspire !
Bon vent !
Et allez, quittons-nous sur un TP un peu plus costaud que les précédents, qui ne sera pas le plus bavard pour autant !
VIII-3. TP8▲
Dans la correction du TP5, nous nous attelions au problème des nombres premiers.
Vous pouvez vous en inspirer, et même la copier/coller pour résoudre le problème suivant.
Vous rédigerez un programme (affichepremiers.php) qui affiche dès que l'on clique sur un bouton OK la liste des nombres premiers...
Disons en tout cas jusqu'à 10 000. Il faut bien poser une limite à l'utilisateur.
Après les avoir tous répertoriés (une ligne par nombre), il affiche leur nombre (x nombres premiers entre 0 et 10 000)...
Bon courage.
PS : rien ne vous empêche ensuite de copier coller tout ça dans un fichier texte et de continuer... 10 000 par 10 000... Quand on pense que de grands mathématiciens y passaient des nuits quand l'informatique n'existait pas !
VIII-4. Correction du TP8 ▲
Veuillez cliquer sur le symbole à droite pour découvrir la solution quand vous aurez fini.
Il ne vous aura pas échappé que le code précédent, certes tourne, mais il est diablement laborieux !
Par exemple, il est idiot de tester tous les nombres pairs, puisque l'on sait qu'un nombre premier (en dehors de 2) est forcément impair !
Aussi, comme Jpeg69 qui m'a soufflé l'idée de cet ajout, et s'est attelé à cette correction bis, nous allons procéder maintenant, pour ceux que le sujet intéresse, à une optimisation du code.
Vous aurez besoin de certains pré-requis pour vous en approcher.
- D'algorithmie tout d'abord... Sachez que pour savoir si un nombre est premier, on peut se contenter de vérifier qu'il n'est divisible par aucun des nombres premiers qui lui sont inférieurs, et mieux encore... On s'arrête à la racine carrée de ce nombre !
- Syntaxe : sqrt($nombre) renvoie la valeur de la racine carrée de $nombre.
- Syntaxe : array_pad($tableau,$index,$element) permet de remplir un tableau proprement.
- Syntaxe : la boucle {chaque instruction avec un point virgule} while(condition) est une variante de la boucle while... La différence, c'est qu'elle procède une fois à l'instruction AVANT de rentrer dans la boucle. Tandis qu'une boucle while "classique" ne fait rien tant que la condition n'est pas vérifiée.
A vous de jouer maintenant !
VIII-5. Mes liens favoris pour l'apprentissage du développement web▲
VIII-5-a. Les tutos et cours Developpez.com▲
Un cours developpez.com pour apprendre XHTML
Un cours developpez.com pour apprendre les CSS
L'excellent cours PHP5 de developpez.com pour aller beaucoup plus loin, par notre maître Yogui !
VIII-5-b. D'autres tutos et cours qui m'ont beaucoup appris▲
VIII-6. Remerciements▲
- Guillaume Rossolini alias Yogui, correcteur pointilleux et toujours fiable, pour m'avoir encouragée dans cette rédaction,
- bbil qui a répondu patiemment et toujours gentiment à mon millier de questions sur "l'éditeur à Nono",
- Nono40 pour avoir développé cet éditeur de fichiers xml qui aboutit à une présentation soignée.