IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

PHP : Le tutoriel pour grands débutants pressés

Image non disponible


précédentsommaire

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...

Une méthode de travail rigoureuse
  1. Recensez toutes les actions que vous solliciterez de la part de l'utilisateur.
  2. Notez toutes les variables que vous aurez besoin d'initialiser ou d'affecter pour avancer.
  3. 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.
  4. Rangez toutes les instructions dans ces blocs... Vérifier que chaque bloc est fonctionnel avant de passer au suivant...
  5. 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.

une structure type
Sélectionnez
<?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.

Une dernière liste de conseils de Mamie Dendrite
  • 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.

Listing des nombres premiers jusqu'à 10 000
Cacher/Afficher le codeSélectionnez

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.

4 pré-requis informatiques pour optimiser le code
  • 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 !

Le code optimisé de Jpeg69, merci à lui !
Cacher/Afficher le codeSélectionnez

VIII-5. Mes liens favoris pour l'apprentissage du développement web

VIII-6. Remerciements

UN GRAND MERCI À CES TROIS MEMBRES du forum developpez.net
  • 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.

précédentsommaire

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 VAUTHIER Sylvie. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.