Informatique


Récupérer un formulaire

Sans choix multiple

On propose ici de récupérer un formulaire pour lequel chaque élément n'est affecté que par une seule valeur.

  • le formulaire est envoyé lorsque l'utilisateur clique sur le bouton submit (M'identifier)
  • la variable globale $_POST est générée, il s'git d'un tableau associatif
  • chaque cellule du tableau $_POST reçoit comme nom associatif les name des éléments du formulaire envoyé
  • à chaque cellule du tableau est associé la valeur choisie par l'utilisateur
  • on récupère le tableau $_POST dans le fichier spécifié derrière l'attribut action
  • pour plus de facilité de manipulation on réaffecte les valeurs contenues dans les cellules de $_POST dans des variables aux noms plus simples
  • on affiche à l'écran les valeurs passées par l'utilisateur avec la pseudo-méthode echo

Démo
<form action="formu_1.php" method="post">
<fieldset>
 <legend>Identification</legend>
	<label for="nom">Nom:</label>
	<input id="nom" type="text" name="nom">
<br>
	<label for="pr">Prénom:</label>
	<input id="pr" type="text" name="pren">
<br>	
	<label for="h">Homme:</label>
	<input id="h" type=radio name =sexe value=M checked>
	<label for="f">Femme:</label>
	<input id="f" type=radio name =sexe value=F>
</fieldset>
<input type="submit" value="M'identifier">
</form>

<?php
	$nom=$_POST['nom'];
	$pren=$_POST['pren'];
	$sexe=$_POST['sexe'];
	echo("Votre nom: ".$nom."Votre prénom: ".$pren." Vons êtes: ".$sexe);
?>

Avec choix multiples

On propose ici de récupérer un formulaire pour lequel chaque élément peut être affecté par plusieurs valeurs.

  • cette fois, pour les centres d'intérêt, on propose de pouvoir cocher plusieurs possibilités
  • afin de pouvoir stocker plusieurs valeurs le name "interet" est déclaré comme étant un tableau au moyen des crochets ouvrant et fermant
  • le tableau $interet est parcouru au moyen d'une boucle for
  • la méthode count() renvoit le nombre de cellules d'un tableau

Démo
<form action="formu_2.php" method="post">
<fieldset>
 <legend>Identification</legend>
	<label for="nom">Nom:</label>
	<input id="nom" type="text" name="nom">
<br>
	<label for="pr">Prénom:</label>
	<input id="pr" type="text" name="pren">
<br>	
	<label for="h">Homme:</label>
	<input id="h" type=radio name =sexe value=M checked>
	<label for="f">Femme:</label>
	<input id="f" type=radio name =sexe value=F>
</fieldset>
<fieldset>
 <legend>Vos activités</legend>
	<label for="mu">Musique</label><input id="mu" type="checkbox" name="interet[]" value="musique">
	<label for="vo">Voyages</label><input id="vo" type="checkbox" name="interet[]" value="voyage">
	<label for="in">Informatique</label><input id="in" type="checkbox" name="interet[]" value="informatique">
	<p>
	<label for="le">Lecture</label><input id="le" type="checkbox" name="interet[]" value="lecture">
	<label for="ci">Cinéma</label><input id="ci" type="checkbox" name="interet[]" value="cinéma">
</fieldset>
<input type="submit" value="M'identifier">
</form>

<?php
$nom=$_POST['nom'];
$pren=$_POST['pren'];
$sexe=$_POST['sexe'];
$interet=$_POST['interet'];
echo("Votre nom: ".$nom.".<br>Votre prénom: ".$pren.".<br>Vons êtes: ".$sexe);
echo(".<br>Vos centres d'intérêt: ");
for($i=0;$i<count($interet);$i++){
	echo($interet[$i].", ");
}
?>

Eviter les notices

Si le fichier contenant le formulaire contient également le script permettant de traiter ce formulaire, alors, à l'ouverture, des notices apparaissent.

Pourquoi?

Car lorsqu'on ouvre le fichier pour la première fois cela veut dire que l'utilisateur n'a pas entré de données.
Dès lors les variables sont vides! Or, en php, une variable n'existe que lorsqu'elle a été affectée.

C'est pourquoi les notice apparaissent!

Pour éviter l'affichage des notices:

  • on utilise un champ hidden pour détecter que l'utilisateur a pressé ou n'a pas pressé le bouton submit
  • si le bouton submit n'a pas été pressé, l'entrée test de $_POST n'a pas été affectée
  • la méthode isset() renvoit true si la variable passée en paramètre a été affectée, false dans le cas contraire
  • si le fichier est ouvert pour la première fois, la condition renvoit false et "Bienvenue sur notre module d'identification"
  • si l'utilisateur a pressé le bouton submit, l'entrée test a été initialisée, la condition renvoit true et le code récupère le formulaire

Démo
<form action="formu_3.php" method="post">
<fieldset>
 <legend>Identification</legend>
	<label for="nom">Nom:</label>
	<input id="nom" type="text" name="nom">
<br>
	<label for="pr">Prénom:</label>
	<input id="pr" type="text" name="pren">
</fieldset>
<input type="hidden" name="test" value="ok">
<input type="submit" value="M'identifier">
</form>

<?php
if(isset($_POST['test'])){
 $nom=$_POST['nom'];
 $pren=$_POST['pren'];
 echo("Votre nom: ".$nom."Votre prénom: ".$pren);
}
else	{
 echo("Bienvenue sur notre module d'identification.");
}
?>