Principes de programmation
Formulaire
2526 · Dekens Antoine
Conversion en nombre
Il est possible de convertir une valeur de type string en un numeric de différentes manières. Nous avons déjà vu la conversion implicite en faisant des opérations mathématiques, mais il exite aussi des fonctions pour le faire :
$string = "10.5";
// Conversion implicite
echo $string * 1; // 10.5
// Conversion en décimal
echo floatval( $string ); // 10.5
// Conversion en entier
// ⚠️ Les valeurs décimales sont perdues, il n'y a pas d'arrondissement
echo intval( $string ); // 10
Existence d'une variable
Dans plusieurs cas de figure, il est essentiel de pouvoir vérifier l'existence d'une variable. Nous allons parler de ces 2 fonctions :
- isset( )
- empty( )
isset( )
Détermine si une variable est déclarée et est différente de null. Retourne un boolean.
$a = 0;
$b = null;
// Retourne true
isset( $a );
// Retourne false (null)
isset( $b );
// Retourne false (undefined)
isset( $c );
empty( )
Détermine si une variable est vide ou si sa valeur équivaut à false (falsy value). Retourne un boolean.
$a = 0;
$b = null;
// Retourne true (falsy value)
empty( $a );
// Retourne l'inverse de true = false (falsy value)
!empty( $a );
// Retourne true (falsy value)
empty( $b );
Les formulaires
Mise en place
Créeons 2 fichiers, un index.php qui contiendra un formulaire et un fichier results.php qui affichera les données récupérées.
Prévoyons un formulaire avec la méthode POST et l'action results.php contenant 4 champs :
- un champ de type text pour récupérer un prénom
- un champ de type text pour récupérer un nom
- un champ de type mail pour récupérer une adresse mail
- un champ de type submit pour soumettre le formulaire
<form method="POST" action="/results.php">
<div>
<label for="firstname">Prénom</label>
<input type="text" id="firstname" name="firstname">
</div>
<div>
<label for="lastname">Nom</label>
<input type="text" id="lastname" name="lastname">
</div>
<div>
<label for="mail">Adresse mail</label>
<input type="email" id="mail" name="mail">
</div>
<div>
<input type="submit" value="Envoyer">
</div>
</form>
Dans le body de notre fichier results.php, nous allons faire en sorte de récupérer le prénom et l'afficher dans une phrase d'accueil. Cela passe par l'utilisation d'une superglobale en lien avec notre méthode, $_POST dans notre cas.
<?php
// On récupère la valeur enregistrée dans
// la superglobale via l'attribut 'name'
// d'un des champs de notre formulaire.
$firstname = $_POST[ 'firstname' ];
// Afficher le prénom introduit à l'intérieur
// d'une balise parapraphe.
echo "<p>Coucou $firstname</p>";
?>
Gestion des erreurs
Maintenant que notre page results.php attend une valeur $_POST que se passe-t-il si on charge la page sans soumettre le formulaire ?
Effectivement, aucune donnée n'a été envoyé. $_POST existe toujours, mais dans notre cas est totalement vide, c'est là que notre fonction empty() rentre en jeu :
<?php
// Si $_POST est vide
if( empty( $_POST ) ) {
echo "Aucune donnée à afficher."
// Si non
} else {
$firstname = $_POST[ 'firstname' ];
echo "<p>Coucou $firstname</p>";
}
?>
Sauf que nous n'avons pas encore traité toute les possibilités. Notre condition vérifie pour le moment si notre superglobale est vide, mais si elle ne l'est pas mais que l'on essaye d'atteindre une valeur inexistante ?
<?php
if( empty( $_POST ) ) {
echo "Aucune donnée à afficher."
} else {
// On essaye de récupérer une valeur
// "age" qui n'est pas reprise dans notre formulaire.
$age = $_POST[ 'age' ];
echo "<p>J'ai $age ans.</p>";
}
?>
Cela ne suffit pas de vérifier que notre superglobale soit bien remplie, il faut aussi vérifier l'existence d'une valeur via isset() et si elle n'est pas vide elle même :
<?php
if( empty( $_POST ) ) {
echo "Aucune donnée à afficher."
} else {
// On vérifie que 'firstname' est
// bien définie dans notre superglobale et pas une string vide
if( isset($_POST[ 'firstname' ] && $_POST['firstname'] !== "" ) ) {
$firstname = $_POST[ 'firstname' ];
echo "<p>Coucou $firstname</p>";
} else {
echo 'Utilisateur inconnu';
}
}
?>
Exercices
Exercice A
Afficher la valeurs des 3 champs dans la page results.php comme sur l'image suivante. Il faut aussi prévoir les cas de figures où les champs sont vides.
Remarquez qu'il y a du contenu en gras.
Exercice B
Tansformer en formulaire de contact en ajoutant 2 champs et les afficher dans la page de results.php : un select pour choisir le sujet, et un champ textarea pour y inscrire un message. 3 options sont disponibles :
- Prise de contact
- Poser une question
- Demander un devis