
Les formulaires
Organisations possibles entre fichiers HTML et PHP :
- le formulaire dans un fichier HTML et le traitement dans un fichier PHP
- le formulaire dans un fichier PHP qui gère l’affichage et le traitement dans un autre fichier PHP
- un seul fichier PHP qui gère à la fois l’affichage et le traitement (fonctionnement de Symfony)
Afficher un formulaire
HTML
La balise form est utilisée, avec la propriété action qui appelle le fichier PHP responsable du traitement et la propriété method qui est généralement POST.
Chaque champ de saisie est défini avec la balise input, avec les propriétés type (submit, text, number, email, date…), name et id.
Les champs de saisie sont généralement accompagnés de libellés avec la balise label, avec la propriété for="idChampsConcerne".
Le bouton de validation est déclaré avec un input de type “submit”, avec une propriété supplémentaire value qui affiche un message à l’intérieur du bouton.
<form action="traitement.php" method="POST">
<label for="prenom">Prénom : </label>
<input type="text" name="prenom" id="prenom"><br>
<label for="nom">Nom : </label>
<input type="text" name="nom" id="nom"><br>
<input type="submit" name="ok" value="Valider"><br>
</form>action="".
PHP
Au sein d’un fichier PHP, on insère tout le HTML dont on a besoin.
On peut boucler sur un tableau de données pour en afficher chaque case, dans une liste déroulante avec la balise select ou des cases à sélectionner avec des inputs de type checkbox ou radio-button.
<body>
<form action="" method="POST">
<label for="liste">Liste déroulante : </label>
<select name="liste" id="liste">
<?php
$jours = array('lundi','mardi','mercredi','jeudi','vendredi','samedi','dimanche');
foreach ($jours as $numero=>$jour) {
echo '<option value="' . $numero . '">' . $jour . '</option>';
}
?>
</select><br>
Choix multiple : <br>
<?php
$choix = ['choix 1', 'choix 2', 'choix 3'];
foreach ($choix as $unChoix) {
echo '<input id="'.$unChoix.'" type="checkbox" name="'.$unChoix.'><label for="'.$unChoix.'">'.$unChoix.'</label><br>';
}
?>
<input type="submit" name="ok" value="Valider">
</form>
Traiter un formulaire
Variables superglobales
Les variables $_GET, $_POST, $_REQUEST sont disponibles pour récupérer la valeur des inputs sous la forme de tableaux associatifs (clé: name / valeur: saisie).
On teste l’existence de la variable avant de récupérer les valeurs :
if (isset($_GET['prenom']))
echo'La valeur saisie est '.$_GET['prenom'];
ul>li*5>lorem+tab permet de rapidement créer la structure avec une ul composée de 5 li, remplis de lorem ipsum.
Validation des données saisies
Il faut purifier les input sinon on se fait hacker…. —> on sanitize toujours.
Plusieurs méthodes sont disponibles : filter_var ou filter_input pour une seule valeur, filter_var_array ou filter_input_array pour plusieurs valeurs
avec chacune des paramètres comme : FILTER_SANITIZE_STRING (pour ne pas interpréter les balises), FILTER_SANITIZE_SPECIAL_CHARS (pour…….), FILTER_VALIDATE_INT (pour spécifier le type à récupérer), FILTER_VALIDATE_EMAIL…
Il est possible de créer des filtres de validation personnalisés avec un tableau de filtre et FILTER_VALIDATE_REGEXP.
// Verification que l'utilisateur a clique sur 'OK' et que le nom a ete renseigne
// (sinon un message est affiche), si tout est bon alors il est redirige vers la
// page prevue
<?php
if (isset($_POST['ok'])) {
$message = ''; // on initialise un message vide
$nom = filter_input(INPUT_POST, 'nom', FILTER_SANITIZE_STRING); // on purifie l'input
if (!$nom)
$message .= "Il faut renseigner le nom.";
if (!$message) {
// tout est bon, on effectue le traitement
header('chemin...');
}
}
?>required pour rendre des champs de saisie obligatoires : utile pour faire passer des messages à l’utilisateur mais pas pour la sécurité.
Il est facile de modifier le code source donc on ne fait jamais confiance à l’utilisateur !!$var ?? "".