Skip to content

Instantly share code, notes, and snippets.

@tomsihap
Created January 27, 2020 13:11
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tomsihap/de9f3d63602283593b5c3a71a42533b6 to your computer and use it in GitHub Desktop.
Save tomsihap/de9f3d63602283593b5c3a71a42533b6 to your computer and use it in GitHub Desktop.
TP Formulaires

TP 1

But du TP : créer un formulaire en utilisant des données externes d'une base de données par exemple, et valider les données reçues.

Soignez votre CSS ! Utilisez un Bootstrap par exemple

Le projet doit être proprement codé : utilisez les balises HTML et attributs qui conviennent ! (un type=email pour un input d'email par exemple)

Vous allez créer une page pour enregistrer un futur apprenant. On utilisera la liste de pays en JSON suivante : https://gist.githubusercontent.com/keeguon/2310008/raw/bdc2ce1c1e3f28f9cab5b4393c7549f38361be4e/countries.json

On devra pouvoir saisir les informations suivantes :

  • Nom (max 150 chars)
  • Prénom (max 50 chars)
  • Date de naissance (format Y-m-d : On doit pouvoir créer une date avec $d = DateTime::createFromFormat($format, $date);
  • Nationalité (un des pays du json fourni)
  • Adresse (max 255 chars)

Formulaire

Vous créérez un formulaire avec les champs suivants :

  • Nom (input)
  • Prénom (input)
  • Date de naissance (Y-m-d)
  • Nationalité (select)
  • Adresse postale
  • Email
  • Téléphone (10 chiffres)
  • Diplôme (sans, Bac, Bac+2, Bac+3 ou supérieur) (select)

Remplir le select "nationalité" :

Vous devez récupérer la liste en JSON en la copiant-collant dans une variable :

$json = '[{name: 'Austria', code: 'AT'}, etc. etc. etc, ...';

Vous devez ensuite décoder ce JSON pour qu'il soit exploitable comme un array PHP :

$data = json_decode($json);

$data est maintenant votre array PHP ! N'hésitez pas à le var_dump pour voir ce qu'il contient, comment il est formé.

Avec json_decode, pour accéder aux données, par défaut, on y accède comme dans un objet (avec des flèches ->name) et non pas comme dans un tableau (avec des crochets ['name']). Par exemple :

foreach($data as $d) {
    echo 'Pays : ' . $d->name;
    echo 'Code : ' . $d->code;
}

Maintenant que vous avez accès aux données du tableau, utilisez ce foreach pour afficher un select qui ressemble à ça :

<select name="country">
	<option value="AT">Austria</option>
	...
</select>

Valider les données

Une fois votre formulaire complet, il doit envoyer ses données à un fichier de traitement (le champ action) du formulaire.

Dans ce fichier, vous allez valider les données, c'est à dire vous assurer que les données saisies par l'utilisateur sont valides selon vos besoins :

  • Nom (input) : vérifier qu'il n'est pas vide et < 150 chars
  • Prénom (input) : vérifier qu'il n'est pas vide < 50 chars
  • Date de naissance (Y-m-d) : vérifier que vous pouvez créer une date sous ce format
  • Nationalité (select) : vérifier que la valeur existe dans la liste des pays
  • Adresse postale : vérifier qu'il n'est pas vide et < 255 chars
  • Email : vérifier que c'est un format email
  • Téléphone (10 chiffres) : vérifier que c'est un format de numéro de téléphone français
  • Diplôme (sans, Bac, Bac+2, Bac+3 ou supérieur) (choix valide) in_array()

Pour chaque champ, il faudra valider de la façon suivante :

EXISTENCE - NON VIDE - VALIDATION SPÉCIFIQUE

Par exemple, pour nom : on teste si elle existe isset(), si elle est non vide !empty() et sa validation spécifique (demandée dans l'énoncé), qui est la taille : strlen().

if (isset($_POST['nom'] && !empty($_POST['nom']) && strlen($_POST['nom']) < 255) {
	echo "Le nom est valide : " . $_POST['nom'] . "<br>";
} 

Valider un format de date :

if (DateTime::createFromFormat('Y-m-d', $_POST['date'])) {
    var_dump('Le format de date est valide');
}

Valider un email :

if ( filter_var($email, FILTER_VALIDATE_EMAIL) ) {
    echo 'email valide';
}

Valider un numéro de téléphone :

if ( preg_match("(0|(\\+33)|(0033))[1-9][0-9]{8}", $telephone ) ) {
    echo 'le telephone est valide';
}

Afficher les informations

Plutôt que de rediriger vers une autre page, vous pouvez très bien réutiliser la même page dans laquelle se trouve le formulaire !

Il suffit de demander à PHP si votre variable $_POST est vide ou non : si elle est vide, c'est qu'il n'y a pas de formulaire qui vient d'être envoyé, alors vous affichez le formulaire. Si elle n'est pas vide, alors le formulaire vient d'être envoyé : affichez les validations !

Exemple :

<html>


<?php
// Si POST est vide, alors j'affiche le formulaire :
if (empty($_POST)) { 
?>
	<form>
	...
	</form>
<?php
}
// Sinon, j'affiche les validations de formulaire qui se trouvaient d'habitude dans un autre fichier :
else {
if (isset($_POST['nom'] && !empty($_POST['nom']) && strlen($_POST['nom']) < 255) {
	echo "Le nom est valide : " . $_POST['nom'] . "<br>";
} 

// etc...

} ?>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment