le formulaire en php

références

          Tutoriel POST & GET chez PHP Sources


créer le formulaire

On utilise le formulaire créé en Javascript :

<html>
<head>

<title>Validation de formulaire avec PHP</title>
	<link rel="stylesheet" type="text/css" href="styles1.css" />
</head>

<body >

<form method="post" action="mailto:votrenom@abc.com">

Votre nom : <input type="text" name="nom" value=""><br /><br />
Votre courriel : <input type="text" name="courriel" value=""><br /><br />
Votre ville :<input type="text" name="ville" value=""><br /><br />

Choisissez votre Programme : <select name="prog">
<option value="Programmeur">Programmeur
<option value="TSI">TSI
<option value="Sécurité">Sécurité
<option value="Ne sais pas">Ne sais pas
</select>
<br /><br />

Choisissez l'étape : <br />
<input type="radio" name="etape" value="un"> Étape 1
<br />
<input type="radio" name="etape" value="deux"> Étape 2
<br />
<input type="radio" name="etape" value="trois"> Étape 3
<br />
<input type="radio" name="etape" value="quatre"> Étape 4
<br /><br /><br />

Cours suivis :<br />
Programmation Internet :
<input type="checkbox" name="cours" value="Internet">
<br />
Java : 
<input type="checkbox" name="cours" value="Java">
<br />
Maths II : 
<input type="checkbox" name="cours" value="Maths">
<br />
Français : 
<input type="checkbox" name="cours" value="Francais">
<br /><br /><br />

Autres spécifications : <br /><textarea name="thetext" rows="5" cols="40">
   </textarea>
<br /><br /><br />
<input type="submit" value="Envoyer">
<input type="reset" value="Annuler">
</form>


</body>
</html>




Le fichier peut être enregistré en format .html puisqu'il ne contient pas de code PHP.

On pourrait utilisé aussi le fichier qui contient toutes les validations faites en JS. La raison pour faire les validations en JS c'est que ça libère le serveur et c'est plus sécure.

La première chose qu'il faut changer pour passer le fichier à PHP c'est la ligne <FORM ...

On devra écrire ceci : <form method="post" action="validation.php">.

Dans action on met le nom du fichier qui va recevoir le formulaire et dans method on spécifie post ou get. La méthode post est plus sécure puisque les paramètre ne sont pas montrés dans la ligne de URL.


le fichier php

La clé pour passer les paramètres efficacement du formulaire au programme, c'est la superglobal variable &_POST[]

Notez qu'elle est un array et qu'elle reçoit toutes les valeurs passées par la commande post. Le nom de la valeur passée réfère à la propriété name dans le formulaire et non à id.

Le début du programme validation.php pourrait ressembler à :

<html>
<head>
  <title>Fichier PHP pour recevoir le formulaire</title>
  <link rel="stylesheet" type="text/css" href="styles1.css" />
</head>
<body>

<?php
$nom = $_POST["nom"];
$courriel =  $_POST["courriel"];





Maintenant on pourrait faire une première validation comme ceci :

if (!$nom || !$courriel)
{
exit("Retournez au formulaire. <br />
    Vous devez entrer tous les champs!");
}




Et voici une autre version de la validation, avec plus de détails :

$erreur = "";
if (empty($nom) || empty($courriel))
{
$message = "Retournez au formulaire.  <br />
   Les champs suivants ne doivent pas être vides : <br />";
$erreur="erreur";
if (empty($nom)) 
{
$message .= " Nom";
}
if (empty($courriel))
 {
 $message .= " Courriel";
 }
}
else 
{
$message="Tout est complet";
}
echo $message."<br />";
if ($erreur) exit;



Pour faire la validation du courriel on trouve des scripts très complets sur Internet. De nombreux forums couvre le sujet car c'est très en demande de pouvoir faire une validation complète d'une adresse email.

Voici une fonction qu'on peut incorporer à sa page. Le code peut être inséré dans la section <head> ou bien dans la page. La fonction retourne vrai si l'adresse est valide.

<?php
	function check_email($email) {
  // First, we check that there's one @ symbol, 
  // and that the lengths are right.
  if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) {
    // Email invalid because wrong number of characters 
    // in one section or wrong number of @ symbols.
    return false;
  }
  // Split it into sections to make life easier
  $email_array = explode("@", $email);
  $local_array = explode(".", $email_array[0]);
  for ($i = 0; $i < sizeof($local_array); $i++) {
    if
(!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&
?'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$",
$local_array[$i])) {
      return false;
    }
  }
  // Check if domain is IP. If not, 
  // it should be valid domain name
  if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) {
    $domain_array = explode(".", $email_array[1]);
    if (sizeof($domain_array) < 2) {
        return false; // Not enough parts to domain
    }
    for ($i = 0; $i < sizeof($domain_array); $i++) {
      if
(!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|
?([A-Za-z0-9]+))$",
$domain_array[$i])) {
        return false;
      }
    }
  }
  return true;
}
?>



Pour l'exécuter on ferait :

if(!check_email($courriel))
{
echo "Courriel pas valide!";
exit;
}



Pour les autres champs du formulaire la procédure est identique à ce qui a été fait plus haut. On n'a qu'à vérifier si la variable est vide dans la plupart des cas. Si une validation de valeur est nécessaire (l'âge, par exemple), un peu de code suffit.

Cependant, il y a une complication qu'il va falloir contourner : comment traiter le checkbox lorsque plusieurs valeurs ont été cochées. Cela exige un peu de travail.

On veut garder tous les textbox avec le même nom. Ceci est une bonne pratique de programmation car ça nous permet de les traiter avec une boucle dans d'autres situations. Il faut d'abord modifier chaque textbox dans le formulaire pour qu'il soit un array :


Cours suivis :<br />
Programmation Internet :
<input type="checkbox" name="cours[]" value="Internet"><br />
Java : 
<input type="checkbox" name="cours[]" value="Java"><br />
Maths II : 
<input type="checkbox" name="cours[]" value="Maths"><br />
Français : 
<input type="checkbox" name="cours[]" value="Francais">



Ensuite, on écrit le code pour traiter l'array reçu dans le script PHP :


echo "Ses cours : ";
for ($i=0; $i<count($_POST['cours']);$i++) 
{
$cours[$i] = $_POST['cours'][$i];
echo $cours[$i]." ";
}
echo "<br />";




Finalement, on pourrait décider d'envoyer le contenu du formulaire par courriel.

Mais puisque la fonction mail est dépendante de l'installation de SMTP, il est fort probable que cela ne fonctionnera pas sur localhost. Cependant ça fonctionne bien sur un serveur permanent.

Un exemple de la commande pour envoyer :


mail("votrenom@adresse.ca","Commentaires sur le site",
"Nom: $nom\nCourriel: $courriel\nEndroit: $ville\n",
"From: $courriel\nReply-To: $courriel");
 



Dans les cours suivants on verra qu'on peut aussi poster le formulaire à une base de données MySQL.


Haut de la page

Précédente            Suivante