Forums, scripts, cours, services pour webmaster, manuels (PHP, MySQL, HTML...) en français !
PHP / MySql
Recherche
 
ManuelPHP.com
    Accueil > Cours > Formulaire PHP > Contrôle des données à transmettre


Contrôle des données à transmettre


Ce cours a été consulté 80968 fois.



21 - Première approche

Le formulaire:


------------------------------------------------
On constate que la première vérification
s'est bien effectuée, mais il y a un petit
problème: le message d'avertissement se
trouve en bas du formulaire, et ce dès
l'ouverture de la page.
Normal, puisqu'il n'y a rien dans le champ
"titre".
A l'usage (testez le) on verrait que tous
les messages d'avertissement s'affichent
de même. Or, cela est inopportun et rend
la page peu "lisible" pour l'utilisateur.
Il ne faudrait qu'aucun message
n'apparaisse à l'ouverture de la page, et
que les messages divers d'avertissement
apparaissent le cas échéant sur un écran
différent.
Le code - PARTIE 2 (à ajouter à la partie 1)

1...<?
2......if(empty($titre)){
3..........print("Le '<b>titre</b>' doit être spécifié!");
4..........exit();
5......}
...//vérification du début de l'url
6...$verif_url=strtolower($url);
7...$verif_url=substr("$verif_url", 0, 6);
8...$point=strpos($email,".");
9...$aroba=strpos($email,"@");
...//on vérifie les 7 premiers caractères
10...if($verif_url!="http://"){
11...exit();
12......}elseif($point==''){
13..........echo "Votre email doit comporter un <b>point</b>";
14..........exit();
15......}elseif($aroba==''){
16..........echo "Votre email doit comporter un <b>'@'</b>";
17..........exit();
18......}else{
19..........print("$titre: <a href='$url'>$url</a><br>");
20..........echo "Votre email est: '<a href="mailto$email"><b>$email</b>'";
21......}
22..?>

Examinons ce code, avant d'y apporter des améliorations.

LIGNE 1
...La balise "<?" indique que nous passons en PHP. Auparavant, pour le formulaire, nous étions en HTML. C'est un des intérêts du PHP que de mélanger les deux codes.
LIGNES 2 À 5
...C'est la première vérification consistant à tester si l'utilisateur a bien renseigné le champ dénommé "titre".
......ligne 2: if(empty($titre)){
..........Beaucoup de point à expliquer dans cette ligne. Le "if" (si) est des plus compréhensible. C'est une structure de test, avec entre parenthèses la condition. Celle-ci vérifie si le champ de nom "titre", dont la variable "associée" est $titre, est vide ("empty"). Remarquez bien les parenthèses: une paire pour le "if" et une paire pour ("empty"). La ligne se termine par "{", qui marque le début de du code de la structure de contrôle. Le signe inverse "}" est obligatoire pour en marquer la fin (ligne 5).
......ligne 3 : print
..........Avec la fonction print(), on affiche le message passé en paramètre (à l'intérieur des parenthèses). A remarquer les balises <b> et </b>, intégrées dans le code PHP, pour afficher une partie du texte en gras.
...ligne 4 : exit
..........La fonction exit() arrête l'exécution du code après l'affichage du message de la ligne 3.
...Ligne 5
..........On ferme la structure de contrôle démarrée en ligne 2. Bien penser aux accolades fermantes: leur omission est souvent cause d'erreur.
LIGNES 6 À 9
...On déclare les variables nécessaires au contrôle, tout en leur affectant des valeurs.
......ligne 6
..........La fonction strtolower() transforme les caractères d'une chaîne de texte en minuscules. On transforme donc le contenu de £url en minuscules et on affecte à la variable $verif_url le résultat.
......ligne 7
..........Avec la fonction substr(), nous sélectionnons les 7 premiers caractères de la chaîne contenue jusqu'à maintenant dans $verif_url, et nous en affectons le résultat à la dite variable. Maintenant le contenu de $verif_url est constitué des 7 premiers caractères en minuscules de l'url, c'est à dire de "http://".
......ligne 8
..........La fonction strpos() retourne la position du caractère passé en paramètre (ici le poin) contenu dans la chaîne (ici, le contenu de $email). Si la chaîne ne contient pas de le caractère voulu, elle ne retourne rien. La variable $point contient donc un chiffre si le point est bien présent, ou rien si le point est absent. Elle indique donc si il y a bien un point dans l'adresse email, afin de pouvoir contrôler.
......ligne 9
.........On fait de même avec l'arobade (@) et on stocke le résultat dans la variable $aroba
LIGNES 10 À 21
...On passe maintenant au contrôle proprement dit, à l'intérieur d'une structure de contrôle de type if…elseif…else.
...lignes 10 et 11
Début de la structure de contrôle. On vérifie la validité de l'url. Si la variable $verif_url précédemment calculée ne débute pas par ("!=" pour non égal) les caractères "http://", la ligne suivante sera exécutée (ligne 11: fonction exit()) et l'exécution du code s'arrête. Dans le cas contraire (donc si elle débute par les dits caractères), on continue à la ligne 12. Il serait sans aucun doute judicieux de prévoir un message si les caractères voulus ne sont pas présent, comme dans les lignes suivantes.
Notez bien la syntaxe de if(), avec la paire de parenthèses et l'accolade ouvrante { marquant le début de cette partie de la structure de contrôle. A la fin du if, il y aura obligatoirement une accolade fermante } (ligne suivante).
LIGNES 12 à 14
...Suite de la structure de contrôle. Si le premier contrôle s'est avéré correct alors on effectue celui-ci. Dans le cas contraire, le code a été arrêté à la ligne 11. Si la variable $point est vide (' ') on affiche un message d'avertissement. et on sort de l'exécution du code. Sinon, on continue.
A noter la syntaxe }elseif($point==''){ . L'accolade fermante qui marque la fin du if précédent, elseif ("sinon si") pour la suite de la structure de contrôle, la paire de parenthèse, la comparaison ("==" veut dire identique) de $point avec "vide" ('' représente une paire de simples quottes), et l'accolade ouvrante pour marquer le début du elseif. On aurait pût passer à la ligne après l'accolade fermante et aussi avant l'accolade ouvrante, mais je préfère la présentation utilisée ici…
LIGNES 15 à 17
...Troisième test de la structure de contrôle, et second elseif. Ici on teste la présence de l'arobade suivant la même démarche que pour les lignes 12 à 14.
LIGNES 18 à 21
...C'est la dernière partie de la structure de contrôle. Si tout est correct, alors on affiche les deux message. A remarquer que pour l'un, on a utilisé la fonction print() et pour l'autre echo. Le résultat est le même: le message considéré s'affiche dans les deux cas…
Pensez bien à l'accolade fermante qui marque la fin de la structure de contôle (ligne 21).
LIGNE 22
...La balise ?> marque la fin de la portion de code PHP.
22 - AMÉLIORATION

Nous allons maintenant faire en sorte d'afficher les messages sur un écran "vierge", et non comme jusqu'alors sur le même écran que le formulaire.
Nous avons pour l'instant un code constitué des parties 1 et 2 précédentes. Pour ne pas afficher les message il faudrait pouvoir ne traiter que la partie 1 à l'ouverture de la page, puis passer à la partie 2 lorsque l'utilisateur clique sur le bouton Envoyer, donc en quelque sorte dissocier les deux parties. On pourrait obtenir ce résultat en utilisant deux pages différentes, la première réservée à la saisie et la seconde au traitement, avec une modification de la ligne 1 (partie 1) en ce sens:
<form method="post" action="form.php3"> deviendrait <form method="post" action="autre_page.php3">
Le passage des données du formulaire se ferait alors sur autre_page.php3, et nous pourrions également renommer la page contenant le dit formulaire de form.php3 à form.html, cette page ne contenant que du code HTML.
Mais nous ne voulons utiliser qu'une seule page. Comment alors dissocier les deux parties. Nous allons voire qu'un break (arrêt) inséré en fin de première partie, l'identification de la partie en cours et le traitement de la partie 1 si l'utilisateur et en phase de saisie ou de la partie 2 si la phase est celle du traitement nous permet de le faire.
Vous avez sans doute remarqué que la problématique se résume à un test: soit nous somme en phse 1, soit nous sommes en phase 2. Nous avons à notre disposition une structure de condition adaptée: la structure switch…case1…case2…etc.
La commande switch($variable) permet de tester le contenu de la variable passée en paramètre. En fonction de la valeur de $variable, que nous allons tester avec les case x, nous exécuterons la partie de code voulue.
Reste à identifier la phase en cours. Nous allons pour ce faire affecter, d'une façon transparente pour l'utilisateur, une valeur à une variable, suivant la phase. En fonction de cette valeur, la partie 1 ou la partie 2 du code sera exécutée.
Pour créer cette variable, que nous appellerons $suite, et lui affecter la valeur voulue, nous allons encore utiliser les possibilité des formulaires en utilisant un "input" de type hidden (caché), de nom suite et avec une valeur de 0 ou 1 suivant les circonstances.
L'organigramme suivant nous aidera à mieux comprendre le fonctionnement de tout cela.



Les modifications suivantes sont donc à apporter:

...Partie 1 après la ligne 1
......1 insérer la balise..................<?
......2 insérer la ligne...................<input type="hidden" name="suite" value="1">
......3 insérer la commande................switch($suite){
......4 insérer la commande................case 0:
......5 insérer la balise..................?>
Partie 1 après la ligne 7
......6 insérer............................<?break?>
......7 insérer............................<?
......8 insérer............................case 1:

...Partie 2
......9 supprimer la balise de la ligne....?> (puisque nous sommes déja en PHP à partir de la modif 7).

Bon. Passons maintenant aux explications.

...1 - La balise indique le début d'un code PHP. Avant la modif, la partie 1 était en HTML.
...2 - L'instruction switch() permet de faire plusieurs test sur la valeur de la variable passée en paramètre, ici $suite. L'accolade ouvrante indique le début de l'instruction, qui se terminera par une accolade fermante.
...3 - Avec cette ligne, nous créons un élément de formulaire invisible, de nom "suite" et à qui nous affectons la valeur 1. Ainsi, quand l'utilisateur clique sur le bouton de commande "Envoyer", la valeur de $suite passe à 1, ce qui nous permettra de traiter la seconde partie du code, mais seulement après que l'utilisateur ait cliqué.
...4 - Avec case 0:, on traite le cas où $suite égale 0. Dans l'affirmative, le code qui suit sera traité. Dans la négative, on explorera les autres possibilités. Remarquez les deux points en fin d'instruction.
...5 - La balise ?> indique que la portion de code PHP se termine, et que nous repassons donc en HTML. Mais attention: ce n'est pas parce que la portion de code PHP est terminée que l'instruction en cours l'est également. Elle continue jusqu'à l'accolade fermante quel que soit la nature du code.
...6 - L'instruction break arrête le traitement en cours. En effet, il ne faut pas que la partie 2 s'exécute. Comme cette instruction est une instruction PHP, il faut indiquer que nous passons en PHP avec la balise <?. Et comme immédiatement après cette instruction nous repassons en HTML, il faut aussi l'indiquer par la balise "inverse" ?>. En fait, comme le code qui suit est également du PHP, nous aurions pu nous passer de cette balise "fermante" et continuer tout simplement notre code. Mais le fait d'en indiquer la fin permet de mieux structuré notre code. Et puis, cela nous permet d'évoquer ici cette possibilité.
...7 - On repasse en code PHP avec <?.
...8 - Avec case 1, on traite le cas où $suite égale 1. Dans ce cas, c'est la partie qui suit qui sera traitée, c'est à dire la phase 2 de vérification et de messages.
...9 - Ici, nous supprimons la balise fermante "?>" car nous sommes déjà en PHP depuis la modification 7.

Vous trouverez ci après le code après modification et les résultats avec le formulaire non rempli correctement et avec le formulaire rempli correctement.
Ce résultat apparaît sur la même page que le formulaires, mais celui-ci n'est plus visible. Cependant, il reste un petit problème à résoudre: comment l'utilisateur peut-il apporter les modifications de ses donnée dans le formulaire? Certes, il peut utiliser la barre de navigation pour retourner au dit formulaire et le modifier en conséquence. Mais cette démarche n'est pas très élégante. Nous verrons au prochain paragraphe comment ajouter aux réponse un bouton de commande "Retour" et le code nécessaire pour revenir au formulaire.

Le formulaire:



--------------------------------------
Résultat avec le point manquant


--------------------------------------
Résultat avec l'arobade manquante.


--------------------------------------
Résultat avec une saisie correcte.


---------------------------------------
........Le code après modifications

...<BODY>
...<?
...switch($suite){
......case 0:
...?>
........<form method="post" action="verif.php3">
............Titre: <br><input type="text" name="titre" size="12"><br>
............URL: <br><input type="text" name="url" size="12" value="http://"><br>
............Votre email: <br><input type="text" name="email" size="20"><br>
............<input type="submit" value="OK">
............<input type="hidden" name="suite" value="1">
............<input type="reset" name="Clear" value="Effacer">
........</form>
...<?break;?>
...<?
......Case 1:
........if(empty($titre)){
............print("<center>Le '<b>titre</b>' doit être spécifié!</center>");
........}
........//vérification du début de l'url
........$verif_url=strtolower($url);
........$verif_url= substr("$verif_url", 0, 7);
........$point=strpos($email,""."");
........$aroba=strpos($email,""@"");
........//on vérifie les 7 premiers caractères
........if($verif_url!="http://"){
............print("L'URL doit commencer par <b>http://</b>");
............exit();
........}elseif($point==''){
............echo "Votre email doit comporter un <b>point</b>";
........}elseif($aroba==''){
............echo "Votre email doit comporter un <b>'@'</b>";
............exit();
........}else{
............print("$titre: <a href='$url'>$url</a><br>");
............echo "Votre email est: '<a href="mailto"."$email".""><b>$email</b>'";
........}
........$suite=0;
......}
...?>
...</BODY>
...</HTML>



Voir aussi : Création du formulaire, Contrôle des données à transmettre

Crédits




Google

Services webmasters

Les manuels
 

ManuelPHP.com © 2003-2012 Tigersun - Crédits
Webmaster Site Internet - Télécharger des Logiciels - Programme TV - Entraide Informatique - Agence de Communication
2017-11-19