YBET

Rue Albert 1er, 7

6810 Pin - Chiny

Route Arlon - Florenville

(/fax: 061/32.00.15

Les formations sur Internet

YBET informatique   Créer son site

14. Premier formulaire d'entrée des petites annonces

1. Création du formulaire - 2. Méthode Post - Get - 3. Traitement de l'information - 4. Récupération des données - 5. Vérification des données - 6. Vérification de l'adresse mail.

Maintenant que nous avons créé la table utilisateur MySQL, nous allons créer le formulaire et envoyer les données vers la base de donnée du site Internet. Deux méthodes sont utilisables avec leurs avantages et leurs défauts.

  1. La première méthode utilise un formulaire en HTML et un autre fichier en PHP qui vérifie les données. C'est la méthode la plus simple. Par contre, en cas de données incorrectes, l'utilisateur doit revenir en arrière avec le navigateur pour corriger.
  2. La deuxième méthode utilise un seul fichier PHP qui insère et vérifie les données (comme dans l'exercice précédant). On appelle ce type de formulaire auto-invocant.

Par facilité dans ce cours, nous utilisons ici la méthode HTML. L'autre méthode sera utilisée plus tard.

1. Création du formulaire

La première partie va créer le formulaire en HTM (inséré dans 1 fichier php) reprenant les différents champs à créer:

Nom d'utilisateur (*)
Mot de passe (*) (minimum 5 caractères)
Adresse mail (*)
Titre
Nom (*) Prénom (*)
(minimum 5 caractères)
Code Postal Ville (*) (minimum 3 caractères)
Pays (*)
Téléphone
Date de naissance: Jour mois Année
Remarque, ce formulaire n'envoie aucune données

Les champs uid (numéro d'utilisateur), type (utilisateur, administrateur, ...) et regdate (date d'inscription) ne sont pas reprises dans le formulaire, elle seront insérées automatiquement en PHP. Ce formulaire peut éventuellement être créer par FrontPage (ce qui est plus facile). Voici le code HTML

2. Méthodes POST et GET

Deux méthodes sont utilisée pour transférer un message, la méthode POST et la méthode GET. GET est la méthode par défaut.

  1. GET envoie les informations via l'URL comme: http://www.ybet.be/mail.php?ok=envoyer&titre='Monsieur'
    Toutes les variables sont reprises dans l'URL comme nom-variable=valeur. C'est un avantage en sites dynamiques au niveau référencement des différentes pages dans les moteurs de recherche.
  2. POST par contre n'utilise par l'URL fait passer les informations via l'en-tête HTTP , en même temps que les informations de navigation (adresse IP, version navigateur, résolution écran, ...). Cette méthode est donc plus sécurisée et n'est pas limitée en taille.

La méthode GET ne permet que de transférer quelques octets, la méthode post permet d'envoyer des variables de grande taille.

La méthode de réception des données est également différente.

Pour savoir si les données sont transmises, il suffit de vérifier si des valeurs sont incluses dans la variable tableau.

$_GET['nom-variable']='valeur-variable'

est équivalent à

$_POST['nom-variable']='valeur-variable'

Pour ce formulaire, nous utiliserons POST. Elle se retrouve dans l'en-tête du formulaire: <form method="POST" action="mail.php" name="creer-utilisateur"> qui demande envoie le résultat au fichier mail.php avec comme titre (optionnel) creer-utilisateur.

3. Traitement de l'information.

Une fois les données envoyées avec le bouton OK, le fichier suivant que nous appellerons mail.php par facilité va:

  1. Récupérer les données (si elles existent)
  2. Vérifier les informations obligatoires et la taille des informations transmises
  3. Transmettre un message d'erreur en cas de données non valides
  4. Vérifier si l'adresse mail et le nom d'utilisateur n'existent pas déjà dans la table "member"
  5. Transmettre un message d'erreur en cas de duplicate
  6. Si l'ensemble est correct, le fichier va transmettre les données dans la table "member"

Chaque variable de notre formulaire va correspondre à une variable php. Par facilité, nous allons faire correspondre le nom du champ (titre par exemple) avec le même nom de variable PHP ($titre).

Les vérifications à effectuer sont:

Nom Variable PHP Valeur nulle autorisée valeur minimum, maximum
titre $titre Non Liste: Monsieur, Madame, Mademoiselle. (Cette partie est faite par le formulaire)
nom $nom Non 3,25
prenom $prenom Non 3,25
codepostal $codepostal Oui 4,10
ville $ville Oui 3,25
pays $pays Non 3,20
telephone $telephone Non 8,20
email $email Non 8,60, caractère @, serveur mail
username $username Non 2,25
password $password Non 5,40
bday $bday Oui chiffre entre 1 et 31
bmonth $bmonth Oui chiffre entre 1 et 12
byear $byear Oui chiffre entre 1900 et 2050

4. Récupération des données.

L'ensemble des variables vont être récupérées dans notre fichier mail.php par la commande $_POST, soit

<?php

$titre=$_POST['titre'];

echo $titre;

?>

Mais est-ce nécessaire. Finalement nous pouvons directement utiliser le résultat de la variable tableau $_POST['nom-variable'].

5. Vérification des données

La première partie va vérifier le nombre de caractères des champs. Pour cela, nous allons créer une fonction comme vu au chapitre 4 de ce cours en ligne. Ceci va éviter de longues lignes de codes.

function taille_variable($variable,$taille_min=0,$taille_max=0){
global $_POST;
if(!isset($_POST[$variable])){
// valeur non définie
return false;
}elseif (strlen($_POST[$variable])<$taille_min){
return False;
}elseif(strlen($_POST[$variable])>$taille_max){
return FALSE;
}
return True;
}

Analysons cette fonction.

Certains champ sont optionnels. Par contre, si une valeur est rentrée, nous devons vérifier si les informations de taille sont correctes. Remarquez que dans ce cas, nous utilisons une nouvelle fonction if. Certaines versions PHP n'acceptent pas l'imbrications de fonctions IF.

if (strlen($_POST['codepost'])<>0){
   if(!taille_variable('codepost',4,10)){
     echo 'Code Postal invalide, entre 4 et 10 caractères';
     echo'<br>';
  }
}

Au total, si le contenu est correct, la valeur renvoyée est TRUE, False sinon. Nous aurions pu utiliser checkdate ( int mois, int jour, int année ) pour la vérification de la date de naissance. La partie complète de vérification de la taille devient:

<?php
if(!taille_variable('username',2,25)){
echo'Login invalide, rentrez minimum 2 caractères';
echo'<br>';

}elseif (!taille_variable('password',5,40)){
echo'Mot de passe invalide, rentrez minimum 5 caractères, 40 caractères maximum';
echo'<br>';
}elseif (!taille_variable('email',8,60)){
echo'email invalide, rentrez minimum 8 caractères';
echo'<br>';
}elseif(!taille_variable('nom',3,25)){
echo'Nom invalide, rentrez votre nom (minimum 3 lettres)';
echo'<br>';
}elseif (!taille_variable('prenom',3,25)){
echo'Prénom invalide, rentrez votre nom';
echo'<br>';
}
}
if (strlen(_POST['codepost'])<>0){
  if(!taille_variable('codepost',4,10)){
   echo'Code Postal invalide, entre 4 et 10 caractères';
   echo'<br>';
 }
}
if (!taille_variable('ville',3,25)){
 echo'Ville invalide, rentrez minimum 3 caractères';
 echo'<br>';
}elseif (!taille_variable('pays',3,20)){
 echo'Pays invalide, rentrez minimum 3 caractères';
 echo'<br>';
}elseif (strlen($_POST['telephone'])<>0){
 if (!taille_variable('telephone',5,20)){
  echo'Numéro de téléphone non valide';
  echo'<br>';
 }
}
if (strlen($_POST['bday'])<>0){
 if (!taille_variable('bday',1,2)){
  echo'Jour de naissance invalide, rentrez 2 chiffres';
  echo'<br>';
 }if (($_POST['bday'])<"1"){
echo'Jour inférieur à 1';
echo'<br>';
}elseif (($_POST['bday'])>"31"){
echo'Jour supérieur à 31';
echo'<br>';
}
}
if (strlen($_POST['bmonth'])<>0){
if (!taille_variable('bmonth',2,2)){
echo'Mois de naissance invalide, rentrez 2 chiffres';
echo'<br>';
}
if ($_POST['bmonth']<1){
echo'Mois de naissance >0';
echo'<br>';
}elseif ($_POST['bmonth']>12){
echo'Mois de naissance <12';
echo'<br>';
}

}
if (strlen($_POST['byear'])<>0){
if (!taille_variable('byear',2,2)){
echo'Année de naissance invalide, rentrez 2 chiffres';
echo'<br>';
}
if ($_POST['byear']<1900){
echo'Année de naissance >1900';
echo'<br>';
}elseif ($_POST['byear']>2020){
echo'Année de naissance <2020';
echo'<br>';
}
}
?>
<p>Recommencez, revenez en arrière avec votre navigateur</a></p>
<?php
function taille_variable($variable,$taille_min=0,$taille_max=0){
global $_POST;
if(!isset($_POST[$variable])){
// valeur non définie
return false;
}elseif (strlen($_POST[$variable])<$taille_min){
return False;
}elseif(strlen($_POST[$variable])>$taille_max){
return FALSE;
}
return True;
}
?>

6. Vérifier l'adresse Mail.

Il nous faut encore corriger certaines parties, notamment au niveau de l'adresse mail où nous ne vérifions que la taille. Deux vérifications sont possibles: le caractères @ doit être inclut dans l'adresse, nous pouvons également vérifier si le DNS accepte les mails.

La vérification du caractère @ dans la chaîne mail va utiliser la fonction strpos() que nous avons vu au chapitre 6 de cette formation. Comme rappel

STRPOS($variable,$variable1): revoie le nombre de caractère devant la lettre $variable1. Exemple: STRPOS ("YBET informatique,"i") renvoie le nombre 5. Si la réponse est false, le caractère n'est pas trouvé dans la chaîne.

if (!strpos($_POST['email'],'@')){
  echo 'Adresse mail non valide';

// vérifie si le caractère @ est inclus dans la chaîne
}

Nous aurions également pu vérifier la position du caractère dans la chaîne. En premier, l'adresse mail n'est pas valide, moins de 5 positions avant la fin de la chaîne est également une adresse de messagerie invalide (exemple: ybet@a.b n'est pas valide puisque les nom de domaine incluent minimum 2 caractères pour l'extension, le point plus au moins 1 lettre de nom de domaine).

Nous allons simplement interroger le serveur. Pour accepter des adresses mails, le serveur DNS doit être configurer spécifiquement. Ceci n'est pas réellement une preuve que l'adresse de messagerie est effectivement valide, le nom utilisateur peut être faux avec un serveur valide.

Cette vérification se fait en 2 parties: la récupération du nom de domaine et l'envoi de la vérification au serveur. Commençons par récupérer le nom utilisateur et le nom de domaine par la fonction PHP explode(). Cette fonction renvoie les 2 valeurs dans un tableau. Nous allons également utiliser la fonction list pour récupérer les 2 valeurs sous forme de variable.

La fonction de récupération devient list($user,$dns)=explode("@",$_POST['email']

checkdnsrr($dns) renvoie true si le nom de domaine est configuré, false sinon. Cette fonction n'est pas normalement pas utilisable sous windows. Vous ne pourrez donc pas la tester directement avec EasyPhp.

If (!checkdnsrr($dns)){

    echo'L\'adresse mail n'est pas valide';

}

Au total:

list($user,$dns)=explode("@",$_POST['email']

If (!checkdnsrr($dns)){

    echo'L\'adresse mail n'est pas valide';

}

Le codage complet de la procédure devient.

Cette partie ne fait que vérifier si les données rentrées dans le formulaire sont correctes. Le chapitre suivant va rentrer les données dans la base MySql si les données sont correctes.

Sur le sujet:

> 15. Insertion des coordonnées utilisateurs
<13 . Création des tables pour le développement d'annonces.