Bonjour,
j'ai un formulaire dans lequel les utilisateurs vont entrer leur coordonnées GPS à la main (pour le moment on en est là).
Voici le code en question
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 <form method="post" action="ecrire_horloge.php"> <h1>Mes données : </h1> <!-- liste déroulante des identités --> <label><h3>Choisir un nom : </h3><br /> <select name="identite"> <option value="1">Toto</option> <option value="2">Titi</option> <option value="3">Tutu</option> </select> </label> <br /> <h3>Déterminer le lieu.</h3> <p>Je suis <!-- lieu libre de remplissage --> <input type="text" id="lieu" name="lieu" placeholder="à la maison" title="lieu où vous vous trouvez" required minlength="2" maxlength="128" size="40" ></p> (Entrez un texte de lieu pour compléter la phrase « Je suis » sous une forme lisible de type « à la cantine », « chez Bidule », « dans le métro », « sur le chemin du travail », etc.) <br /> <br /> <h3>Coordonnées GPS</h3> <p>Latitude : <input type="text" id="latitude" name="latitude" placeholder="50.17" title="latitude" required minlength="1" maxlength="32" size="32" > , longitude : <input type="text" id="longitude" name="longitude" placeholder="3.47" title="longitude" required minlength="1" maxlength="32" size="32" ></p>(uniquement des chiffres, le séparateur doit être un point et non une virgule) <br /> <i>-- > On peut obtenir ses latitude et longitude sur googleMaps (choisir le lieu puis clic droit, c'est le premier de la liste) ou OpenStreetMaps (choisir le lieu, clic droit afficher l'adresse, les coordonnées s'affichent à droite)</i> <br /> <h3><input type="submit" value="envoyer mes données" /></h3> </form>
Ce qui me pose problème c'est qu'en cas de mauvais remplissage de ces coordonnées GPS, ça déconne plus loin dans ma page d'affichage sur carte OSM. En outre, la latitude doit être comprise en -90 et 90 et la longitude -180 et 180 (sinon, ça déconne aussi)
Donc je voudrais pouvoir filtrer en amont.
J'ai trouvé un tuto qui explique comment détecter si le contenu d'une variable est bien numérique et si elle est comprise entre telle et telle valeur.
Voici un exemple de ce code
Dont le résultat à l'affichage est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 <?php $tests = array( "42", "1337", "ohlala", "1,5", "1.5", ); // TEST NUMÉRIQUE OU PAS foreach ($tests as $element) { if (is_numeric($element)) { echo var_export($element, true) . " est numérique <br />"; } else { echo var_export($element, true) . " N'est PAS numérique <br />"; } } // TEST BONNE VALEUR foreach ($tests as $element) { if (is_numeric($element)) { if ($element < 180 && $element > -180) { echo var_export($element, true) . " est entre -180 et 180 <br />"; } else { echo var_export($element, true) . " est en dehors des limites <br />"; } } } ?>
'42' est numérique
'1337' est numérique
'ohlala' N'est PAS numérique
'1,5' N'est PAS numérique
'1.5' est numérique
'42' est entre -180 et 180
'1337' est en dehors des limites
'1.5' est entre -180 et 180
Donc il filtre bien.
Avec ce type de filtre, je serai capable de l'implémenter dans dans la cible du formulaire (ecrire_horloge.php) et refuser de récupérer les données qui ne sont pas correctes et éventuellement afficher une alerte genre « vos données lat-lon sont mauvaises, on ne les a pas prises en compte » (voire même un message plus précis disant « la valeur n'est pas dans les limites untel » « ce n'est pas des chiffres » « vous avez laissé une virgule, un espace, » etc.
Toutefois, si cela me prémunira d'avoir des données corrompues dans mon xml, je ne suis pas tout à fait satisfait.
Je voudrais que cette alerte puisse s'afficher dans le formulaire html, AVANT que la personne ne clique sur le bouton submit, pour qu'elle puisse corriger son texte. Mais est-ce réalisable ? Et comment ?
Partager